Unity物体之间碰撞检测的方法
检测碰撞有两种方式,一种是利用碰撞器,另外一种就是触发器。
碰撞器的种类:
1.Static Collider 静态碰撞器
指的是相互碰撞的两个物体没有附加刚体而只附加了Collider的游戏对象。这类对象在碰撞时会保持静止,发生碰撞时不会触发任何的方法函数。
2.Rigidbody Collider 刚体碰撞器
在静态碰撞器的基础上,处于运动状态的物体必须要附加刚体组件和带有碰撞检测函数的脚本,被撞的物体可以没有刚体组件或碰撞检测脚本。当两个物体发生碰撞时,带有刚体组件的物体会发生物理特性,如被撞飞,或有摩擦力的影响下移动一段距离。
3.Kinematic Rigidbody Collider 运动学刚体碰撞器
在第2点得基础上勾选了刚体组件中的IsKinematic属性,在发生碰撞时能检测到碰撞,但是勾选ISkinematic属性的物体不会因为撞击而发生位移,它任待在原地不动,若要想让它发生移动,只能用transform.translate的方法。(如果要移动这类对象,就只能修改它的Transform,而不是用力)
触发器:
这三种碰撞器如果被撞击的物体的Collider勾选了IsTrigger复选框,就变成了相应的触发器了,若此时该物体被撞击,撞击该物体的对象会穿进被撞的物体中,同时触发void OnTriggerEnter(Collider other)方法。
碰撞器的检测函数:(只有带刚体的碰撞才能触发检测函数,而且处于运动中的物体必须带检测函数的脚本,other.gameObject为撞击中的对方物体)
void OnCollisionEnter(Collision other); void OnCollisionStay(Collision other); void OnCollisionExit(Collision other);
触发器的检测函数:(任何带有触发器的碰撞都能触发检测函数)
void OnTriggerEnter(Collider other); void OnTriggerStay(Collider other); void OnTriggerExit(Collider other);