我試圖檢測一個 2d 游戲物件的哪個對撞機被觸發。顯然使用 box collider 2d,我試過使用這種方法,但即使認為游戲物件具有內置腳本的碰撞在碰撞時自行銷毀,效果很好,就是這個,由于某種原因不起作用(不列印任何東西):
void OnTriggerEnter2D(Collider2D col)
{
if (col.IsTouching(playerCol))
{
print("player collider hit");
}
...
...
}
玩家對撞機設定為:https : //prnt.sc/23oe10m
編輯:它實際上是由另一個對撞機觸發的,而不是我想要的那個似乎作業得很好的對撞機。
注意:如果我不使用 isTouching,碰撞器會像我想的那樣完美地作業,事情是我需要使用 isTouching 方法來檢查它擊中了哪個碰撞器,然后運行想要執行的代碼,因為我想專門從playerCol. col.gameObject 內的腳本中的 OnTriggerEnter2d 也可以完美運行,因為它會在與 playerCol 碰撞時洗掉游戲物件(我想要做的),但是 isTouching 方法不適用于此。
EDIT2:我有一個我遇到問題的游戲物件的準確副本,它確實列印了一些東西,而我遇到問題的另一個游戲物件卻沒有。
有任何想法嗎?
uj5u.com熱心網友回復:
所以我發現它可能是我當前版本的 Unity (2019.2.17f1) 的一個錯誤,即 Collider2D.isTouching() 方法不能真正與 Polygon Colliders 一起正常作業,因為我已經在這里投射了它:
void OnTriggerEnter2D(Collider2D col)
{
if (col.IsTouching(playerCol) == true)
{
print("playerHit");
}
if (col.gameObject.CompareTag("Bullet") && col.gameObject.layer != gameObject.layer && !col.IsTouching(laserCol))
{
int hit;
hit = col.gameObject.GetComponent<BulletScript>().damage;
Attacked(hit);
print("Player has taken " hit);
}
...
}
令人驚訝的是,上面的 if 陳述句不起作用,唯一的區別是多邊形碰撞器,而下面的則起作用。
結論:我在IsTouching方法呼叫中切換到檢測碰撞器重疊col是否等于播放器的二級碰撞器,而不是檢測碰撞器重疊col是否等于playerCol,問題解決了。
一定是 Polygon Collider 2D 在那個版本中被竊聽了。
uj5u.com熱心網友回復:
您可以列印附加到 col 的 GameObject 的名稱。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/386427.html
