2017-03-16 52 views
5

大家好:)這裏的情況:預製Collider2D不承認光線投射撞機

我有一個baddy預製有兩個對撞機部件:用於物理簡單CapsuleCollider2D,並觸發PolygonCollider2D僅用於鼠標點碰撞。

的PolygonCollider2D通過一個附加的腳本(Baddy.cs)使用僅在需要時更新:

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

是的,這是不良的做法,但它得到是工作完成的。它非常完美:在遊戲的場景視圖中,我可以暫停並看到我們的baddy預製件上確實存在多邊形對撞機。

在另一個附加的腳本(CollisionHandler.cs),我們檢查我們的baddy鼠標按:

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

然而hit.collider==this.gameObject.GetComponent<PolygonCollider2D>()原來假的,即使我可以立即在手之前打印既hit.colliderthis.gameObject.GetComponent<PolygonCollider2D>()我們if(MousePress())並將它們都定義爲:

D_Prefab(Clone) (UnityEngine.PolygonCollider2D) 

他們不可能是不同PolygonColliders,因爲只能有一次一個,因爲我們的Baddy腳本祛瘀es並同時創建PolygonCollider。

任何想法可能會出錯?

回答

2

通過將Physics2D.RaycastAll與layerMask結合使用,我解決了其他碰撞體的問題,包括baddy自己的capsuleCollider2D。幸運的是,在我需要檢查鼠標碰撞之前,我的壞人會凍結,所以當baddy的動畫速度爲0時,我提前更新了碰撞器。顯然,通過更新函數創建和移除碰撞器並不會給系統足夠的時間來處理碰撞。

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