Unity3D 的OnTriggerEnter和OnCollisionEnter方法

两个物体都有碰撞体和刚体时:

 

情况1:当物体A勾选了isTrigger, 则触发了OnTriggerEnter方法.

情况2:当A,B两个物体都勾选了isTrigger,则触发了OnTriggerEnter方法.

情况3:当A,B两个物体都没有勾选isTrigger,则触发了OnCollisionEnter 方法

结论1:如果发生了OnTriggerEnter方法,至少有一个物体勾选了isTrigger;如果想发生OnCollisionEnter 方法,则不需要勾选isTrigger。

结论2:OnTriggerEnter和OnCollisionEnter 冲突,不能同时发生。

 

来自官方的表格:


 

当A,B有一个添加了刚体(Rigidbody)时:


OnCollisionEnter方法 :

若A添加了刚体,B没有添加刚体,A去碰撞B,则A会被弹开,B不会运动,此时A、B都会触发OnCollisionEnter方法。

若A添加了刚体,B没有添加刚体,B去碰撞A,不会发生碰撞效果,此时A和B都不会触发OnCollisionEnter方法。


OnTriggerEnter方法:

只要A和B中有一个添加了刚体,无论谁碰撞谁,两者都会触发 OnTriggerEnter方法。但由于至少一方勾选了isTrigger,所以不会发生碰撞效果。


总结:

OnCollisionEnter方法要求碰撞的发起方必须拥有刚体,而被碰撞方有没有刚体并不重要。OnTriggerEnter方法则对此没有要求,只需要碰撞双方有一个具有刚体即可触发。即刚体是一个判断是否实现碰撞的是与否的标志。


刚体对于系统的开销是很大的,所以在使用刚体时,根据可能发生的碰撞触发事件,适当的减少刚体,是一个减少资源消耗的好办法。 比如地面就可以不设置刚体,因为地面是永远不动的,把人物设置刚体就可以实现真实的物理碰撞效果了。
 

 

OnTriggerEnter和OnCollisionEnter的选择:

 

如果想实现两个刚体物理的实际碰撞效果时候用OnCollisionEnter,Unity引擎会自动处理刚体碰撞的效果。

如果想在两个物体碰撞后自己处理碰撞事件用OnTriggerEnter。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值