2020年5月1日 星期五

【Unity3D】使用OnTriggerEnter偵測碰撞並destroy物件時要注意的小地方

在語法上使用OnTriggerEnter語法偵測碰撞時,下列語法可以同時destroy自己跟與自身碰撞的物件

private void OnTriggerEnter(Collider other)
    {
        Destroy(gameObject); //當自己跟其他物件相撞時,destroy自己
        Destroy(other.gameObject); //同時也destroy其他物件
    }

這樣的方式在某些狀況下會有一點小問題,如下: 
譬如是射擊遊戲類的型態,當對面很多敵人物件飛過來時,
敵人物件通常也是做成prefab物件,所以裡面的基本元素是相同的來源。

那麼在遊戲畫面上兩個相同的基本元素也有可能相碰,這時使用上面的語法就會有一點矛盾的地方,也就是說當兩個相同的敵方元素相碰,會執行第一段destroy自己,然後再執行下一段destroy碰撞自己的其他物件,但是碰撞自己的其他物件其實也就是上一段已經destroy的同一個物件,這樣可能就會產生error。

在這種情況下只要不在這個物件上加上RigidBody Commpont就可以了,只要把RigidBody加在自己發射的飛彈上,讓飛彈碰撞到敵方物件時,摧毀自己也摧毀敵方。 這樣就可以避免上述的矛盾錯誤。

來源自:Unity tutorial:create with code live Week 3 | Session 4 - Spawn Animals at Intervals - April 9, 2020

9am PST 影片內 49分10秒處的說明

沒有留言: