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 组件参数如下:

Name Type Position Rotation Scale Color
Plane Plane (0, 0, 0) (0, 0, 0) (1, 1, 1) #ABA4A4FF
Cube Cube (0.1, 3, -4.4) (0, 0, 0) (1, 1, 1) #F41E1EFF
Sphere Sphere (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 组件参数如下:

Name Type Position Rotation Scale Color
Plane Plane (0, 0, 0) (0, 0, 0) (2, 2, 2) #ABA4A4FF
Cube Cube (0, 3, -4.8) (0, 0, 0) (1.7, 0.5, 1.7) #F41E1EFF
Sphere Sphere (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相关推荐

  1. unity 根据模型生成碰撞体_Unity之碰撞体组件

    3D物理组件中碰撞体组件添加与设置 碰撞体是物理组件中的一类,3D物理组件和2D物理组件有独特的碰撞体组件,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对象有碰撞体时 ...

  2. Unity 3D 碰撞体(Collider)|| Unity 3D 触发器(Trigger)

    在游戏制作过程中,游戏对象要根据游戏的需要进行物理属性的交互. 因此,Unity 3D 的物理组件为游戏开发者提供了碰撞体组件.碰撞体是物理组件的一类,它与刚体一起促使碰撞发生. 碰撞体是简单形状,如 ...

  3. 碰撞器组件 (Collider)

    碰撞器-- 必须都要有碰撞器组件(Collider),其实上面的碰撞事件同样也需要这个前提条件. 2.必须有一个物体带刚体组件,并且处于运动状体中(包括主动运动去撞击别人和在运动过程中被别人撞击). ...

  4. 29给灯加文本渲染组件和盒装碰撞体组件

    这节说的是,给灯添加文本和包围盒组件. 我在这里换下,不添加包围盒组件,而是盒体触发器组件,更简明扼要. 从后面两节看到,当覆盖包围盒和离开包围盒时,切换灯光显隐,或者切换文本显隐. 好,现在开始 1 ...

  5. Unity3D入门(八):物理组件之刚体与碰撞体

    Unity3D入门(八):物理组件之刚体与碰撞体 准备工作 物理组件之刚体 刚体组件简介 使用刚体移动物体 遇到的问题 物理组件之碰撞体 碰撞体简介 碰撞体种类 Box Collider Sphere ...

  6. unity3d 理解刚体(Rigidbody)和碰撞体(Collider)以及触发器(Is Trigger),边学边更新

    刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受 ...

  7. Unity3D基础12:碰撞体

    前文:https://blog.csdn.net/Jaihk662/article/details/86757037(Rigidbody物理类组件) 一.碰撞体组件 碰撞体(Collider)可以理解 ...

  8. Unity 碰撞体 composite

    unity中盒型碰撞体与多边形碰撞体有used by composite这一选项,如果勾选这一选项代表该碰撞体可以被之后添加的composite 复合碰撞体使用,复合碰撞体会将该碰撞体的box与pol ...

  9. 详解Unity中的车轮碰撞器Wheel Collider

    前言 碰撞体组件定义了物体的物理性状,Unity中有一系列基本碰撞体,我们可以使用它们组合成任意形状,但除了基本碰撞体之外,Untiy还提供了诸如车轮(Wheel).网格(Mesh).地形(Terra ...

最新文章

  1. kvo实现原理_KVC、KVO实现原理
  2. Thinking in work
  3. java分布式事务原理_JAVA分布式事务原理及应用
  4. Java高并发编程:Callable、Future和FutureTask
  5. NATAPP.CN 内网穿透教程
  6. 自制vue组件通信插件:教你如何用mixin写插件
  7. 虐杀外星人java,逆天游戏《毁灭全人类2》登PS4 外星人疯狂虐杀地球人
  8. 怎么抓取屏幕截图计算机考试时间,定时抓屏快照(电脑截屏工具)V4.8 最新版
  9. Hive 导入CSV文件
  10. 用CSV文件读写数据的两种方式(转)
  11. 正则表达式--C#正则表达式的符号及例子
  12. JavaScript 验证 API中的setCustomValidity()方法
  13. 关于【CSDN免积分下载器】的分析
  14. Delphi7串口通讯实例(含Spcomm控件)
  15. QGIS教程—缓冲区buffer
  16. 《Scrum实战》第3次课【富有成效的每日站会】作业汇总
  17. win7电脑蓝屏没有修复计算机,Win7旗舰版系统电脑老是出现蓝屏的修复教程
  18. 汉诺塔在VC控制台的图形演示
  19. 第十一天-购物车订单系统的实现
  20. 服务器WPS上的文档删除了怎么办,wps怎么样找回已经删除的文档

热门文章

  1. 【蓝桥杯】 数独游戏 (经典深搜题型)
  2. 特别详细的POST 注入 思路
  3. D-Link无线wifi短信认证上网设置流程说明
  4. 4. 当事人类别
  5. 省市县联动列表html代码,html+js 全国 省市县三级联动
  6. C++投骰子的随机游戏
  7. maven项目报错:Could not find artifact com.syy:****:jar:1.0-SNAPSHOT
  8. 2022.08.21 吉司机线段树略讲
  9. 读书笔记之香帅中国财富报告
  10. 基础贴吧java代码_原来你是这样的JAVA[01]-基础一瞥