一、三种碰撞检测※
检测函数均继承自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手册 碰撞体