2017-03-16 14 views
5

Witam wszystkich :) Oto sytuacja:Szkieletowe Collider2D nieuznanych za Raycast Collider

mam baddy prefabrykatów, który ma dwa komponenty Collider: prosta CapsuleCollider2D wykorzystywane do fizyki, a spust PolygonCollider2D wykorzystywane wyłącznie do kolizji Najedź myszką .

PolygonCollider2D jest aktualizowana za pośrednictwem dołączonego skryptu (Baddy.cs) tylko w razie potrzeby za pomocą:

if(this.gameObject.GetComponent<PolygonCollider2D>()!=null){ 
    Destroy(this.gameObject.GetComponent<PolygonCollider2D>()); 
} 
this.gameObject.AddComponent<PolygonCollider2D>(); 
this.gameObject.GetComponent<PolygonCollider2D>().isTrigger=true; 

Tak, to jest biedny praktyka, ale dostać to zadanie. Działa to doskonale: w widoku sceny gry mogę zatrzymać się i zobaczyć, że rzeczywiście istnieje zderzacz wielokątów na naszym uszkodzonym prefabrykacie.

W innym dołączonym skryptu (CollisionHandler.cs) sprawdzamy prasie myszki na naszej baddy:

if(MousePress()){ 
    hit=Physics2D.Raycast(level.mousePoint, Vector2.zero, 0f); 
    if(hit&&hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()){ 
     print("baddy mousePress"); 
    } 
} 

Jednak hit.collider==this.gameObject.GetComponent<PolygonCollider2D>() okazuje się fałszywy, chociaż mogłem drukować zarówno hit.collider i this.gameObject.GetComponent<PolygonCollider2D>() bezpośrednio przed ręką w naszych if(MousePress()) i mieć je obie zdefiniowane jako:

D_Prefab(Clone) (UnityEngine.PolygonCollider2D) 

nie mogły być różne PolygonColliders bo tam może być tylko jeden na raz, ponieważ naszym baddy skryptu eliminować es i tworzy jednocześnie wielokątnik.

jakieś pomysły co może być nie tak?

Odpowiedz

2

Korzystając z Physics2D.RaycastAll z maską warstwową, rozwiązałem problem przeszkadzania innym zderzaczom, w tym własnej kapsule złoczyńcyCollider2D. Na szczęście moje baddy zamarzły zanim musiałem sprawdzić kolizje myszy, więc zaktualizowałem zderzacz z wyprzedzeniem, kiedy animowana prędkość animacji wynosiła 0. Najwyraźniej tworzenie i usuwanie kolizji za pomocą funkcji aktualizacji nie daje systemowi wystarczająco dużo czasu na obsłużenie kolizje.

http://answers.unity3d.com/questions/1326583/prefab-collider2d-not-recognized-as-raycast-collid.html#comment-1327337

Powiązane problemy