1. 程式人生 > >Unity中OnTriggerEnter條件以及isTrigger的一個問題

Unity中OnTriggerEnter條件以及isTrigger的一個問題

兩個 才會 har 產生 collider 檢測 自由 net 人物

該函數觸發的條件:

1、兩個物體都必須有碰撞器(Collider)組件;

2、其中一個物體的碰撞器(Collider)的IsTrigger屬性必須勾上;

3、最重要的一點,其中一個物體必須有剛體(Rigidbody)組件。如果是一個運動的物體(如子彈)去碰撞一個靜止的物體,則剛體(Rigidbody)組件必須加在運動的物體上,否則無法觸發OnOnTriggerEnter函數。所以這時候子彈身上就要加一個Rigidboyd而不是character controller

Bug描述:遊戲主角在靜止狀態下,一個自動運動的敵人碰撞主角,如果敵人身上沒有剛體(Rigidbody)組件,主角則不會受到傷害(不會執行OnTriggerEnter函數

中的代碼)。

就是發生碰撞的主體一定是要帶剛體的,即只有帶剛體的碰撞體去撞其他碰撞體時,雙方才會收到碰撞事件,比如:

一、控制A(剛體加碰撞體)撞擊 靜止的B(只有碰撞體),雙方能收到碰撞事件。

二、控制B(只有碰撞體)撞擊 靜止的A(剛體加碰撞體),雙方收不到碰撞事件。

三、讓A(剛體加碰撞體)自由下落,然後控制B(只有碰撞體)去撞擊A,雙方能受到碰撞事件。

得出的結論似乎是如果碰撞雙方只有一個有剛體,那麽那個剛體一定要處於運動的狀態下才會有碰撞事件發生。

此外還有兩點:

一、產生觸發事件的兩個物體會相互穿越,isTrigger檢測的是可穿越碰撞,準確的說是因為開啟IsTrigger那個物體會被物理引擎鎖忽略掉,所以會產生兩個物體穿越的情況。如果人物有Rigidbody,而且想讓人物和地面產生碰撞事件且不穿過地面,可以不勾選isTrigger,用OnCollisionEnter(Collision collison)檢測碰撞。

二、兩個對象要麽都收到碰撞事件,要麽都收到觸發事件,不會出現一個收到觸發事件,一個收到碰撞事件的情況。

可以參看這篇文章http://blog.csdn.net/monzart7an/article/details/22739421

Unity中OnTriggerEnter條件以及isTrigger的一個問題