Unity3D 碰撞器和触发器

本文详细介绍了Unity中碰撞器和触发器的工作原理及使用方法。碰撞器要求至少一方具有Rigidbody并处于运动状态,触发器则允许物体穿越,适用于不需要物理反馈的场景。文章还解释了碰撞器与触发器之间的区别和联系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于碰撞器和触发器经常忘记用法,这次主要记录下以便于能够复习用

 

1.碰撞器

发生条件:

1.碰撞的双方中一定至少要有一个Rigidbody存在,并且碰撞双方必须都要有碰撞体组件。

2.碰撞双方若只有一个有刚体,那么那个刚体一定要处于运动的状态下才会有碰撞事件发生。

用法:

    void OnCollisionEnter(Collision col)
    {
        //进入碰撞器执行的代码
    }
    void OnCollisionStay(Collision col)
    {
        //持续碰撞器执行的代码
    }
    void OnCollisionExit(Collision col)
    {
        //离开碰撞器执行的代码
    }

 

2.触发器

发生条件:

1、必须都要有碰撞器组件(Collider),其实上面的碰撞事件同样也需要这个前提条件。

2、必须有一个物体带刚体组件,并且处于运动状体中(包括主动运动去撞击别人和在运动过程中被别人撞击)。

3、两个碰撞器中至少有一个开启了IsTrigger。

注意:

一、产生触发事件的两个物体会相互穿越,准确的说是因为开启IsTrigger那个物体会被物理引擎锁忽略掉,所以会产生两个物体穿越的情况。

二、两个对象要么都收到碰撞事件,要么都收到触发事件,不会出现一个收到触发事件,一个收到碰撞事件的情况。

用法:

 void OnTriggerEnter(Collider col)
    {
        //进入触发器执行的代码
    }
    void OnTriggerStay(Collider col)
    {
        //持续在触发器执行的代码
    }
    void OnTriggerExit(Collider col)
    {
        //离开触发器执行的代码  
    }

 

额外用法:在控制一个物体A去撞另一个物体B时,不要直接去修改物体A的Transform的position属性,因为你会发现如果即使两者发生了碰撞也还是会穿越的,原因就在于我们是直接设置的坐标,如果物体A有刚体组件的话,应该用AddForce,给物体添加一个力,然后让物理引擎去让物体动,此时如果发生了碰撞的话,就不会穿越了。

 

3.关系

当Is Trigger=false时,碰撞器根据物理引擎引发碰撞,产生碰撞的效果,可以调用OnCollisionEnter/Stay/Exit函数; 
当Is Trigger=true时,碰撞器被物理引擎所忽略,没有碰撞效果,可以调用OnTriggerEnter/Stay/Exit函数。 

碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性

如果既要检测到物体的接触又不想让碰撞检测影响物体移动或要检测一个物件是否经过空间中的某个区域这时就可以用到触发器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值