首页 > 代码库 > Unity中OnTriggerEnter条件以及isTrigger的一个问题
Unity中OnTriggerEnter条件以及isTrigger的一个问题
该函数触发的条件:
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的一个问题