碰撞体(Collider)以及触发器(Is Trigger)----碰撞的条件,触发碰撞器和触发器的条件

本文详细介绍了碰撞(Collision)和触发(Trigger)的概念及其实现条件,包括碰撞与触发的区别、产生不同接触方式所需的条件以及接触后的事件类型。通过图表形式展示了各种碰撞体之间的交互规则。
一:产生碰撞的条件
1:若要产生碰撞,必须双方都要有碰撞器。
2:运动的一方一定要有刚体,另一方有无刚体无所谓。
注:如果运动的一方无刚体,它去碰撞静止的刚体,相当于没有装上。

二:接触的两种方式
1:Collision碰撞,造成物理碰撞,可以在碰撞时执行OnCollision事件。
2:Trigger触发,取消所有的物理碰撞,可以在触发时执行OnTrigger事件。
注:两个物体接触不可能同时产生碰撞+接触,最多产生一种。但是可以AB产生碰撞,AC产生触发。

三:产生不同方式接触的条件
1:Collision碰撞
     (1):双方都有碰撞体
     (2):运动的一方必须有刚体
     (3):双方不可同时勾选Kinematic运动学。
     (4):双方都不可勾选Trigger触发器。
2:Trigger触发
     (1):双方都有碰撞体
     (2):运动的一方必须是刚体
     (3):至少一方勾选Trigger触发器

四:接触后事件细分为Enter,Stay,Exit三种(以Trigger为例,分别为OnTriggerEnter、OnTriggerStay、OnTriggerExit)
1:Enter事件表示两物体接触瞬间,会执行一次。
2:Stay事件表示两物体持续接触,会不断执行。
3:Exit事件当两物体分开瞬间,会执行一次。

五:碰撞规则表
进行碰撞检测并在碰撞时发送消息
 静态碰撞体 (Static Collider)刚体碰撞体 (Rigidbody Collider)运动学刚体碰撞体 (Kinematic Rigidbody Collider)静态触发碰撞体 (Static Trigger Collider)刚体触发碰撞体 (Rigidbody Trigger Collider)运动学刚体触发碰撞体 (Kinematic Rigidbody Trigger Collider)
静态碰撞体 (Static Collider) Y    
刚体碰撞体 (Rigidbody Collider)YYY   
运动学刚体碰撞体 (Kinematic Rigidbody Collider) Y    
静态触发碰撞体 (Static Trigger Collider)      
刚体触发碰撞体 (Rigidbody Trigger Collider)      
运动学刚体触发碰撞体 (Kinematic Rigidbody Trigger Collider)      
碰撞时发送触发器 (Trigger) 消息
 静态碰撞体 (Static Collider)刚体碰撞体 (Rigidbody Collider)运动学刚体碰撞体 (Kinematic Rigidbody Collider)静态触发碰撞体 (Static Trigger Collider)刚体触发碰撞体 (Rigidbody Trigger Collider)运动学刚体触发碰撞体 (Kinematic Rigidbody Trigger Collider)
静态碰撞体 (Static Collider)    YY
刚体碰撞体 (Rigidbody Collider)   YYY
运动学刚体碰撞体 (Kinematic Rigidbody Collider)   YYY
静态触发碰撞体 (Static Trigger Collider) YY YY
刚体触发碰撞体 (Rigidbody Trigger Collider)YYYYYY
运动学刚体触发碰撞体 (Kinematic Rigidbody Trigger Collider)YYYYYY


六:实验表




Unity3D 中,**碰撞(Collision)****触发器Trigger)**虽然都用于检测物之间的交互,但它们的功能使用场景有显著差异。 ### 碰撞(Collision) 碰撞是一种物理组件,它允许物之间发生物理碰撞反应。当两个物带有碰撞且至少有一个物具有刚(Rigidbody)时,Unity 会自动计算它们之间的物理互动,例如反弹、摩擦力、质量影响等。碰撞通常用于需要真实物理反馈的场景,例如角色与地面的接触、物下落或滚动等[^1]。 碰撞通过 `OnCollisionEnter`、`OnCollisionStay` `OnCollisionExit` 方法来响应碰撞事件。这些方法提供了一个 `Collision` 类型的参数,可以访问碰撞点、法线方向以及相对速度等信息。以下是一个示例: ```csharp void OnCollisionEnter(Collision collision) { Debug.Log("与 " + collision.gameObject.name + " 发生了碰撞。"); } ``` ### 触发器Trigger触发器本质上是一个特殊的碰撞,它不会产生物理碰撞反应,而是用于检测物是否进入某个区域或穿过某个边界。触发器通常用于逻辑判断,例如玩家进入敌人视野范围、拾取物品或激活某个机关等[^1]。 触发器通过 `OnTriggerEnter`、`OnTriggerStay` `OnTriggerExit` 方法来响应事件,这些方法接受一个 `Collider` 类型的参数,表示触发该事件的碰撞。以下是一个示例: ```csharp void OnTriggerEnter(Collider other) { Debug.Log(other.gameObject.name + " 进入了触发区域。"); } ``` ### 功能差异总结 | 特性 | 碰撞(Collision) | 触发器Trigger) | |------|---------------------|--------------------| | 物理反应 | 是 | 否 | | 使用场景 | 物理互动、碰撞反馈 | 区域检测、逻辑触发 | | 检测方法 | `OnCollisionEnter` / `Stay` / `Exit` | `OnTriggerEnter` / `Stay` / `Exit` | | 参数类型 | `Collision` | `Collider` | | 是否需要 Rigidbody | 至少一方需要 | 至少一方需要 | 此外,可以通过设置 `isTrigger` 属性将普通碰撞转换为触发器。这种灵活性使得开发者可以在同一物上切换两种行为模式[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值