找回密码
 立即注册
查看: 254|回复: 0

【Unity3D】碰撞体组件Collider

[复制链接]
发表于 2023-2-18 16:27 | 显示全部楼层 |阅读模式
1 前言


Unity3D 中碰撞体(Collider)组件用于检测运动的物体之间是否发生碰撞,也可以作为触发器使用。产生碰撞的条件是:
    2 个游戏对象都有 Collider 至少有一个游戏对象有 Rigidbody 2 个游戏对象保持相对运动(一个 Cube 放在 Plane 上,不会产生碰撞,因为没有相对运动)

碰撞体的边界不一定与游戏对象的边界一致,用户可以点击 Edit Collider 按钮编辑碰撞体的边界,也可以在属性面板里调整碰撞体边界。另外,用户可以勾选 Is Trigger 选项,作为触发器使用(不勾选将作为碰撞器使用),作为触发器使用时,不会产生碰撞,游戏对象之间会相会穿越。

1)回调方法

碰撞器回调方法:
// 碰撞开始 void OnCollisionEnter(Collision other) // 碰撞过程中,每帧调用一次 void OnCollisionStay(Collision other) // 碰撞结束 void OnCollisionExit(Collision other)
触发器回调方法:
// 触发开始 void OnTriggerEnter(Collider other) // 触发过程中,每帧调用一次 void void OnTriggerStay(Collider other) // 触发结束 void OnTriggerExit(Collider other)
说明:碰撞器和触发器对应的回调方法都是 MonoBehaviour 里的方法,用户可以在脚本组件里重写这些方法,碰撞器和触发器对应的回调方方法只能执行其一,当作为触发器使用时,就不能执行碰撞器对应的回调方法。

2)回调参数

Collision 参数
// 碰撞对象的碰撞体组件 Collider collider = collision.collider; // 碰撞点信息 ContactPoint[] contactPoint = collision.contacts; Vector3 point = contactPoint[0].point;
Collider 参数
// 获取碰撞体的MeshRenderer组件 MeshRenderer meshRenderer = collider.GetComponent<MeshRenderer>(); 2 应用

2.1 碰撞器应用


1)创建游戏对象

游戏对象的 Transform 组件参数如下:
NameTypePositionRotationScaleColor
PlanePlane(0, 0, 0)(0, 0, 0)(1, 1, 1)#ABA4A4FF
CubeCube(0.1, 3, -4.4)(0, 0, 0)(1, 1, 1)#F41E1EFF
SphereSphere(0, 1, -4.5)(0, 0, 0)(1, 1, 1)#F41E1EFF

补充:给 Cube 添加 Rigidbody 刚体组件。

2)脚本组件

给 Cube 游戏对象添加脚本组件,如下:

ColliderController.cs
using UnityEngine;  public class ColliderController : MonoBehaviour {      private void OnCollisionEnter(Collision other) {         other.collider.GetComponent<MeshRenderer>().material.color = Color.green;     }      private void OnCollisionStay(Collision other) {         GetComponent<MeshRenderer>().material.color = Color.yellow;     }      private void OnCollisionExit(Collision other) {         other.collider.GetComponent<MeshRenderer>().material.color = Color.blue;     } }
3)运行效果

2.2 触发器应用


1)创建游戏对象

游戏对象的 Transform 组件参数如下:
NameTypePositionRotationScaleColor
PlanePlane(0, 0, 0)(0, 0, 0)(2, 2, 2)#ABA4A4FF
CubeCube(0, 3, -4.8)(0, 0, 0)(1.7, 0.5, 1.7)#F41E1EFF
SphereSphere(0, 4.5, -4.8)(0, 0, 0)(1, 1, 1)#F41E1EFF

补充:给 Sphere 添加 Rigidbody 刚体组件,Collider 组件勾选 Is Trigger 选项。

2)脚本组件

给 Sphere 游戏对象添加脚本组件,如下:

TriggerController.cs
using UnityEngine;  public class TriggerController : MonoBehaviour {      private void OnTriggerEnter(Collider other) {         other.GetComponent<MeshRenderer>().material.color = Color.green;     }      private void OnTriggerStay(Collider other) {         GetComponent<MeshRenderer>().material.color = Color.yellow;     }      private void OnTriggerExit(Collider other) {         other.GetComponent<MeshRenderer>().material.color = Color.blue;     } }
3)运行效果

声明:本文转自【Unity3D】碰撞体组件Collider

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 12:04 , Processed in 0.121005 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表