碰撞器和触发器的概念及相关处理事件
碰撞器
碰撞器概念
- 在U3D引擎中任意物体之间的碰撞事件的产生都依赖于碰撞器,即“Collider”。
- Object之间的碰撞实际上是“Collider”之间的碰撞。
- Object所具有的网格渲染器,即”Mesh Renderer”并不参与碰撞的检测,仅仅是展现给人看的外观。
碰撞器所具有的属性
Material 材质
Is Trigger 是否触发器
Radius 半径(胶囊形或圆形碰撞器)
Center 中心
Size 大小 在X、Y、Z三维上的碰撞器尺寸。
碰撞器事件
1 2 3
| 1.MonoBehaviour.OnCollisionEnter(Collision collision) 当进入碰撞器 2.MonoBehaviour.OnCollisionExit(Collision collision) 当退出碰撞器 3.MonoBehaviour.OnCollisionStay(Collision collision) 当逗留碰撞器
|
实例
只要为两个Object设置了碰撞器,就会继续碰撞检测。
小方块与墙壁发生碰撞未能穿过墙壁。
触发器
触发器概念
- 勾选碰撞器的”Is Trigger”属性,碰撞器就会变成触发器。
- 即原来具有这个碰撞器的Object现在不能发生碰撞。
- 触发器具有新的触发事件,在游戏中可以用来表示在特定的区域中发生的事件,如在毒雾中持续削减HP。
触发器所具有的属性
Material 材质
Is Trigger 是否触发器
Radius 半径(胶囊形或圆形触发器)
Center 中心
Size 大小 在X、Y、Z三维上的碰撞器尺寸。
触发器事件
1 2 3
| 1.MonoBehaviour.OnTriggerEnter(Collider collider)当进入触发器 2.MonoBehaviour.OnTriggerExit(Collider collider)当退出触发器 3.MonoBehaviour.OnTriggerStay(Collider collider)当逗留触发器
|
实例
将脚本添加到自己定义的空物体,并为空物体添加碰撞器,同时勾选”Is Trigger”,使用Edit Collider按钮调整区域大小
小方块进入了指定区域,门自动打开
附实现完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| using System.Collections; using System.Collections.Generic; using UnityEngine; public class door : MonoBehaviour { private Transform m_transform; void Start () { //通过查找门的名称获取其变换组件 m_transform = GameObject.Find("doorparent").GetComponent<Transform>(); } void Update () { } //开门方法 void Opendoor() { m_transform.Rotate(Vector3.up, -90); } //关门方法 void Closedoor() { m_transform.Rotate(Vector3.up, 90); } //当进入的物体为小方块 private void OnTriggerEnter(Collider other) { if (other.gameObject.name == "student") { Opendoor(); } } //当退出的物体为小方块 private void OnTriggerExit(Collider other) { if (other.gameObject.name == "student") { Closedoor(); } } }
|