Unity 碰撞与触发

在Unity中,碰撞与触发的关键都是要有Collier这个类。

1、想要一个物体A具有物理属性,必须挂载Rigidbody脚本,且该物体的Collider不能勾选IsTigger。这样,程序运行时,它会自由落体。


2、物体A想要在一个平面上停留,那么这个平面也需要有Collider。但是不需要Rigidbody。


3、两个物体之间要发生碰撞或者触发必须要有一方有RigidBody。


4、Collider上勾选IsTrigger,表示使用触发,函数表现为

MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器
MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器
MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器
5、Collider上不勾选IsTrigger,表示使用碰撞器,函数表现为

MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器
MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器
MonoBehaviour.OnCollisionStay(Collision collision)  当逗留碰撞器

OnTriggerStay 只要符合条件,每帧都会触发

而OnCollisionStay 即使符合条件,也不会每帧都触发。


6、Static Collider 静态碰撞器

指的是没有附加刚体而附加了碰撞器的游戏对象。这类对象会保持静止或者很轻微的移动。对于环境模型十分好用,当和刚体碰撞时而不会移动。


7、Rigidbody Collider 刚体碰撞器

指的是同时附加了刚体和碰撞器的游戏对象。通过脚本的力量和碰撞完全受物理引擎的影响。可以和只包含碰撞器的游戏对象碰撞。将会成为你游戏中使用物理效果的基本类型碰撞器。


8、Kinematic Rigidbody Collider 运动学刚体碰撞器

指的是同时包含碰撞器和刚体,并且激活IsKinematic的一类游戏对象,要移动这类游戏对象,要修改它的Transform组件(指的是position和rotation这类属性),而不是用力。它们很像静态碰撞器,不过如果你想要不停地到处移动碰撞器,它们会更好用。这类游戏对象还有许多其他的独特使用情景。运动学刚体碰撞器是个非常懒惰和霸道的家伙,它碰到其他碰撞器完全没有反应(其实还是有点反应,会触发一些碰撞函数的,后面有解释)。它不受力、重力或扭矩的影响。可以通过设置Transform 的position和rotation来准确的操作它们或者让它们动起来,但是,它们可以和其他的非运动学刚体互相作用。对于放在运动学刚体碰撞器上面的刚体,会受到运动学刚体施加的摩擦力。


实例测试

每个测试场景都有一个物体CubeA(黄色,挂载ScriptA脚本)和一个物体CubeB(红色,挂载ScriptB脚本)。

每个测试场景均测试物体CubeA 去碰撞 CubeB。

由于刚体一般勾选IsKinematic的时候,都会去掉勾选刚体上UseGravity。后续一般勾选IsKinematic的时候,都表示默认去掉勾选UseGravity。反之,如果刚体没有勾选IsKinematic,表示都默认勾选上UseGravity。

测试结果如下:

Unity 碰撞与触发_第1张图片

Unity 碰撞与触发_第2张图片

Unity 碰撞与触发_第3张图片

你可能感兴趣的:(Unity 碰撞与触发)