欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OnCollisionEnter、OnTriggerEnter与其子物体的联系

程序员文章站 2022-07-12 22:59:07
...

碰撞器:OnCollisionEnter

触发器:OnTriggerEnter

条件:至少有一个物体有Rigidbody刚体组件,两个物体都要有Collider碰撞器组件

 

一、简单测试OnCollisionEnter和OnTriggerEnter

在场景创建Cube和Sphere,添加Rigidbody和Collider组件,并挂载脚本监听“void OnCollisionEnter(Collision collision)”和“void OnTriggerEnter(Collider other)”

OnCollisionEnter、OnTriggerEnter与其子物体的联系

OnCollisionEnter、OnTriggerEnter与其子物体的联系

public class Test : MonoBehaviour
{

    void OnCollisionEnter(Collision collision)
    {
        Debug.Log(gameObject.name + " - OnCollisionEnter - " + collision.gameObject.name);
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(gameObject.name + " - OnTriggerEnter - " + other.gameObject.name);
    }
}

1. 两个物体的Collider组件的IsTrigger选项都不勾选,两个组件都是碰撞器,挂载的脚本都会触发“OnCollisionEnter”函数;

2. 一个勾选IsTrigger选项,一个不勾选,一个作为碰撞器,一个作为触发器,挂载的脚本都会触发“OnTriggerEnter”函数;

3. 两个都勾选IsTrigger选项,都作为触发器,挂载的脚本都会触发“OnTriggerEnter”函数;

 

二、OnCollisionEnter、OnTriggerEnter与其子物体的联系

有些情况下,子物体的碰撞器/触发器会触发父物体的“OnCollisionEnter”、“OnTriggerEnter”函数

比如,父物体添加Rigidbody刚体,没有碰撞器,子物体没有Rigidbody,有碰撞器,父物体会触发“OnCollisionEnter”,子物体不会。

如果,父物体添加Rigidbody刚体,有碰撞器,子物体没有Rigidbody,有碰撞器,父物体会触发“OnCollisionEnter”,子物体仍然不会。

所以:有Rigidbody组件的物体,当自身或子物体的碰撞器发生碰撞,会执行“OnCollisionEnter”;当自身或子物体的触发器发生碰撞,会执行“OnTriggerEnter”。

 

不过,给父物体和子物体分别添加RigidBody组件,在碰撞器和触发器执行时,会分别检测,调用对应函数。

如果父物体要屏蔽子物体碰撞器/触发器,可以给子物体添加Rigidbody。

 

是不是可以说:两个物体都有Collider碰撞器组件,至少有一个物体或其父物体有Rigidbody刚体组件,就可以发生碰撞?


 

相关标签: 碰撞 刚体