Unity 碰撞与触发
在Unity中,碰撞与触发的关键都是要有Collier这个类,如果要触发碰撞事件,必须具备如下条件:碰撞双方都要有碰撞,至少有一个有刚体组件,双方Collider至少有一个开启Is Trigger。
1、想要一个物体A具有物理属性,必须挂载Rigidbody脚本,且该物体的Collider不能勾选IsTigger。这样,程序运行时,它会自由落体。
2、物体A想要在一个平面上停留,那么这个平面也需要有Collider。但是不需要Rigidbody。
3、两个物体之间要发生碰撞或者触发必须要有一方有RigidBody。
4、Collider上勾选IsTrigger,表示使用触发,函数表现为
5、Collider上不勾选IsTrigger,表示使用碰撞器,函数表现为
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。
测试结果如下: