Unity_碰撞器/触发器(Collider/Trigger)
创始人
2024-12-17 10:05:57

本篇内容介绍Unity中的碰撞器与触发器。 这些分为2D和3D,本篇以3D举例,2D类似。效果图见四.3.2

一、碰撞器与触发器的区别

1.是否发生物理碰撞:

碰撞器顾名思义会导致物理之前的物理碰撞,但触发器不会,不引起物理碰撞,只检测物体进入或离开触发区域。

碰撞器由于发生物理碰撞所以会阻止物体穿过进而发生相互作用,但触发器可以自由进出触发区域。

2.使用场景:

所以一般情况下当物体之间实际碰撞时使用碰撞器,只需要判断进出某个区域则用触发器

二、碰撞器/触发器功能

1.碰撞器功能:

碰撞器用于物理交互,他的主要功能包括:

1.1实现物体之间的真实物理交互效果,如碰撞,反弹等物理现象
1.2防止物体穿墙等类似效果
1.3检测是否与其他对象碰撞,在需要时执行相应的逻辑,如播放音乐等。一般这样情况使用触发器。

2.触发器功能:

1.检测到物体进入/离开/停留在触发区域时可以执行相应事件,见上面1.3。

三、碰撞器/触发器种类

碰撞器与触发器种类相同就是把Is Trigger勾选就好了。

1.Box Collider:

2.Sphere Collider:

3.Capsule Collider:

4.Mesh Collider:

5.还有Wheel Collider/Terrain Collider/Edge Collider:

由于我暂时没有项目用到,这里不做解释,等后续使用会补充。

6.Character Controller:

如果你使用Character Controller自带的碰撞器,使用方法看第四点。

四、碰撞器与触发器的使用方法

1.添加刚体组件:

添加刚体组件以满足你需要碰撞或触发的两个物体至少有一个具有刚体组件。

如果你仅需检测碰撞后执行某功能或方法,可以设置为运动学刚体避免影响你物体的正常运动。

如果你使用Character Controller则不需要添加刚体组件。

2.碰撞器使用方法:

2.1创建脚本:

创建脚本挂载到合适位置,这里我演示放到了碰撞物体上。

2.2方法:
private void OnCollisionEnter(Collision collision) {      } private void OnCollisionStay(Collision collision) {      } private void OnCollisionExit(Collision collision) {      }

方法有三种,进入,停留,离开,这里具体使用方法举例放到触发器里。

3.触发器使用方法:

3.1使用条件:

有一方有触发器即可,与刚体类似。

3.2方法:
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

4.Character Controller碰撞器使用方法:

private void OnControllerColliderHit(ControllerColliderHit hit) {      }

相关内容

热门资讯

虎牙申请动态封面生成方法专利,... 国家知识产权局信息显示,广州虎牙科技有限公司申请一项名为“动态封面生成方法、装置、电子设备及存储介质...
这家意大利公司想让机械臂飞上太... 3D 打印是什么?你的直觉告诉你,是一台不足鞋盒大小的设备,吐出细如发丝的塑料,耗费数小时,堆叠成一...
友邦吊顶获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示友邦吊顶(002718)新获得一项实用新型专利授权,专利名为“...
中国电信词元套餐落地 迅策受益... 本报讯 (记者李春莲)5月17日,中国电信集团有限公司(以下简称“中国电信”)正式推出全国试商用词元...
国内首次!128通道全植入式脑... 今天,我国正式启动首个128通道全植入式脑机接口系统多中心临床试验,这项试验由首都医科大学附属北京天...