Unity碰撞函数不触发,是新手易犯的问题
具体参考,官方文档中的表格 http://docs.unity3d.com/Manual/CollidersOverview.html
Collision detection occurs and messages are sent upon collision | ||||||
---|---|---|---|---|---|---|
Static Collider | Rigidbody Collider | Kinematic Rigidbody Collider | Static Trigger Collider | Rigidbody Trigger Collider | Kinematic Rigidbody Trigger Collider | |
Static Collider | Y | |||||
Rigidbody Collider | Y | Y | Y | |||
Kinematic Rigidbody Collider | Y | |||||
Static Trigger Collider | ||||||
Rigidbody Trigger Collider | ||||||
Kinematic Rigidbody Trigger Collider |
Trigger messages are sent upon collision | ||||||
---|---|---|---|---|---|---|
Static Collider | Rigidbody Collider | Kinematic Rigidbody Collider | Static Trigger Collider | Rigidbody Trigger Collider | Kinematic Rigidbody Trigger Collider | |
Static Collider | Y | Y | ||||
Rigidbody Collider | Y | Y | Y | |||
Kinematic Rigidbody Collider | Y | Y | Y | |||
Static Trigger Collider | Y | Y | Y | Y | ||
Rigidbody Trigger Collider | Y | Y | Y | Y | Y | Y |
Kinematic Rigidbody Trigger Collider | Y | Y | Y | Y | Y | Y |
表格看起来情况比较多,好像比较复杂。
简明公式
拿人和地面碰撞举例子:
碰撞回调函数,如OnCollisionEnter,OnCollisionExit,OnCollisionStay,触发条件如下:
两个物体,人和地面,Collider都加,Rigidbody至少加一个,Kinematic不能都勾,Trigger都不能勾
触发器回调函数,如OnTriggerEnter,OnTriggerExit,OnTriggerStay,触发条件如下:
两个物体,人和地面,Collider都加,Rigidbody至少加一个,Kinematic怎么勾都行,不影响,Trigger至少加一个
Rigidbody选择:
Rigidbody一般加在动的会受力的物体上,比如人,地面不会动,一般不加
大功告成!
按照公式配置, 是不是很好记呢?以后碰撞相关的就不会混乱了,推荐动手做,加深记忆。若要对其原理进行学习,可以继续阅读。本文为个人理解和配置习惯,非官方,若有建议欢迎交流。
写于2016/09,饼哥欢迎一切相关交流与提问~
属性解释
Collider
定义:组件,碰撞体形状,是触发碰撞的根基。
使用:要触发函数,双方都要加上。
Rigidbody
定义:组件,刚体,赋予物体物理属性,使其能受力,并根据受力自己动起来。
使用:一般只加给动的物体,比如例子中的人。
IsTrigger
定义:Collider的属性,表示是否为触发器Trigger。
使用:默认不勾,表示不是Trigger,为正常碰撞体实心不可穿透;勾上表示是Trigger,为空心可穿透。触发对应函数。
注意:上述的穿透与否,是针对一方加了Rigidbody Collider而言,不加的叫Static Collider,双方都是Static的话,就算双方Collider重合,不会触发任何函数,也不会弹开,因为双方都不会受力,不受力自然就不会动了。
IsKinematic
定义:Rigidbody的属性,表示是否为Kinematic运动学的。
使用:默认不勾,表示正常刚体,可受力;勾上,不受力,行为类似Static,一般用于脚本控制移动的物体。
Q&A
Q: 版本
A: 不影响,使用的Unity5之后
Q: 参考
A: http://docs.unity3d.com/Manual/CollidersOverview.html
与编辑器中亲自尝试