一、三种碰撞检测※
检测函数均继承自MonoBehaviour,Enter和Exit只在进入和离开碰撞器时触发一次,Stay函数只要物体停留在碰撞器内则一直触发。
1、碰撞器 Collosion※
OnCollisionEnter(Collision collision)当物体进入碰撞器OnCollisionExit(Collision collision)当物体离开碰撞器OnCollisionStay(Collision collision)当停留在碰撞器内
碰撞规则:
两者其一必须有刚体!否则无效。
有刚体碰没刚体,两者均触发碰撞函数,有刚体则运动,没刚体不动
没刚体碰有刚体,不会触发碰撞函数
都有刚体,都触发碰撞函数
1、触发器 Trigger※
Trigger是一种特殊的碰撞器,当勾选Collision中的IsTrigger选项时,碰撞器就被设为了触发器,不会再触发碰撞器函数,而是触发器函数。也会失去碰撞效果。
OnTriggerEnter(Collider collider)当进入触发器OnTriggerExit(Collider collider)当退出触发器OnTriggerStay(Collider collider)当停留在触发器
碰撞规则:
两个
Trigger或者其一是Trigger:两者其一必有刚体,互碰都有消息触发,均不是刚体则无效
角色控制器 CharacterController※
角色控制器是一种特殊的碰撞器,是为了方便角色控制而设计的。只有调用Move,SimpleMove等移动函数之后才检测。角色控制器继承了碰撞器和刚体无需另行设置。
OnControllerColliderHit(ControllerColliderHit hit)当角色碰撞到物体
CharacterController | Collision | Trigger | |
CharacterController | 谁主动碰撞,谁受到回调 | 没有刚体且没有 A去碰B,A只有 B去碰A,A,B都只能收到 | 双方都可以收到Trigger回调,有无刚体没有影响 |
碰撞器有关的属性※
刚体 Rigidbody※
刚体组件用于模拟物体的物理行为。当你向一个物体添加刚体组件后,它将会受到物理引擎的控制,包括重力、碰撞、惯性等。这意味着物体将会对力的作用做出反应,从而产生运动、旋转和碰撞效果。
IsKinematic※
当你将Rigidbody的IsKinematic属性设置为true时,这意味着该物体将不受到物理引擎的力的影响,也就是说它不会受到重力、碰撞或其他物理效果的影响。
Layer※
碰撞体必须在同一个layer或者包含另一个layer,否则无效。
总结※
CharacterController与其他做碰撞,不需要添加Rigidbody,因为自带了。
如果另一个是Collision或者CharacterController,必须由ChacterController通过调用移动函数发起碰撞,CharacterController所在物体会有OnControllerColliderHit回调,被撞的则不会收到碰撞消息
如果另一个是Trigger则,无论谁碰谁,双方都只有Trigger的回调。
另一个特殊的情况是,Collision是刚体,则若是Collision发起碰撞,撞到了CharacterController.则双方都只有Collision回调。CharacterController不会有OnControllerColliderHit
参考:Unity手册 碰撞体