Unity C# OnTriggerEnter()理解
网上看了不少文档,但是实在是看不太明白,所以就索性花了一个晚上,终于算是弄明白了OnTriggerEnter()函数。自认为我理解的没错,如果有错误的地方,还烦请指正。
举例说明:
ColliderTest.cs代码:
void OnTriggerEnter(Collider myCollision)
{
if (myCollision.gameObject.tag == "Player")
{
Destroy(gameObject);
Debug.Log("Collision happened!");
}
}
OnTriggerEnter()其实就是当其他的gameObject(蓝色cube Player)进入到自身gameObject(红色cube Powerup, 拥有代码ColliderTest.cs作为compenent,暂且看作“自身gameObject")的时候需要执行的操作。
括号中的(Collider myCollision)参数指的是其他的gameObject,也就是例中的蓝色cube Player。所以if语句中的条件语句myCollision.gameObject.tag也就是指的Player的tag是否为”Player“。因此Destroy(gameObject)语句消灭的是红色的Powerup(因为代码作用在红色的Powerup,也就是自身gameObject), 而Destroy(myCollision.gameObject)消灭的是蓝色的Player。
关于哪个物体应该添加Rigidbody和勾选isTrigger,我测试了一下,无所谓,在哪个物体上都一样。按照官网说明,两个碰撞的物体都要有Collider Component,其中一个必须有Rigidbody和勾选isTrigger.如果两个均没有Rigidbody或两个同时勾选isTrigger,则不会发生碰撞。
Note: Both GameObjects must contain a Collider component. One must have Collider.isTrigger enabled, and contain a Rigidbody. If both GameObjects have Collider.isTrigger enabled, no collision happens. The same applies when both GameObjects do not have a Rigidbody component.