[英]Prefab Collider2D not Recognized as Raycast Collider
大家好:)這是情況:
我有一個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>()
結果為false,即使我可以在我們的if(MousePress())
之前立即打印hit.collider
和this.gameObject.GetComponent<PolygonCollider2D>()
if(MousePress())
,並讓他們都定義為:
D_Prefab(Clone) (UnityEngine.PolygonCollider2D)
它們不能是不同的PolygonColliders,因為一次只能有一個,因為我們的Baddy腳本同時刪除並創建了PolygonCollider。
什么想法可能會出錯?
通過使用帶有layerMask的Physics2D.RaycastAll,我解決了其他碰撞器阻礙的問題,包括baddy自己的capsuleCollider2D。 幸運的是,在我需要檢查鼠標碰撞之前,我的baddys會凍結,因此我提前更新了對手,當baddy的動畫速度為0.顯然通過更新功能創建和移除碰撞器並不能給系統足夠的時間來處理碰撞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.