本篇内容介绍Unity中的碰撞器与触发器。 这些分为2D和3D,本篇以3D举例,2D类似。效果图见四.3.2
碰撞器顾名思义会导致物理之前的物理碰撞,但触发器不会,不引起物理碰撞,只检测物体进入或离开触发区域。
碰撞器由于发生物理碰撞所以会阻止物体穿过进而发生相互作用,但触发器可以自由进出触发区域。
所以一般情况下当物体之间实际碰撞时使用碰撞器,只需要判断进出某个区域则用触发器
碰撞器用于物理交互,他的主要功能包括:
碰撞器与触发器种类相同就是把Is Trigger勾选就好了。
由于我暂时没有项目用到,这里不做解释,等后续使用会补充。
添加刚体组件以满足你需要碰撞或触发的两个物体至少有一个具有刚体组件。
如果你仅需检测碰撞后执行某功能或方法,可以设置为运动学刚体避免影响你物体的正常运动。
创建脚本挂载到合适位置,这里我演示放到了碰撞物体上。
private void OnCollisionEnter(Collision collision) { } private void OnCollisionStay(Collision collision) { } private void OnCollisionExit(Collision collision) { }
方法有三种,进入,停留,离开,这里具体使用方法举例放到触发器里。
有一方有触发器即可,与刚体类似。
public GameObject ColliderSphere; public GameObject CollidedCube; private Color colorSphere; private Color colorCube; private void Start() { colorSphere = ColliderSphere.gameObject.GetComponent().material.color; colorCube = CollidedCube. gameObject.GetComponent().material.color; } private void OnTriggerEnter(Collider other) { if (other.gameObject.name == "Cube") { ColliderSphere.gameObject.GetComponent().materials[0].color = Color.red; } } private void OnTriggerStay(Collider other) { if (other.gameObject.name == "Cube") { Debug.Log("物体停留"); } } private void OnTriggerExit(Collider other) { if (other.gameObject.name == "Cube") { ColliderSphere.gameObject.GetComponent().materials[0].color = colorSphere; CollidedCube.gameObject.GetComponent().materials[0].color = colorCube; } }
具体看触发进入方法中,判断触发检测到的物体名字是否与你想要的一样,如果一样则实现某种功能,这里我实现变色,没进入前是这样的:
进入后圆球变红色:
这个窗口的打开位于:Window->General->Console
private void OnControllerColliderHit(ControllerColliderHit hit) { }