关于unity碰撞检测器的用法

今天已经是我第三次忘记了这两种碰撞检测的用法,混淆了。特意整理一下

首先把今天要解决涉及到的东西列出来

碰撞方法:

OnCollisionEnter(Collision2D collision)

OnCollisionExit(Collision2D collision)

OnCollisionStay(Collision2D collision)

OnTriggerEnter(Collider2D collision)

OnTriggerExit(Collider2D collision)

OnTriggerStay(Collider2D collision)

涉及到的组件:

Rigidbody-IsKinematic

Colider-IsTrigger

好了 我们来分析

上面的6个方法 中的 Enter Exit Stay 这三种很好理解,第一个是进入时候触发,第二个是离开的时候出发,第三个是 呆在里边的时候触发。。

这个理解好了 那么我们主要要分析的是事

OnCollisionEnter(Collision2D collision)

OnTriggerEnter(Collider2D collision)

这两个方法 在不同的状态下 哪个被被触发。

好了 下面开始测试

时间: 2024-10-24 20:24:26

关于unity碰撞检测器的用法的相关文章

Unity 碰撞的例子

1.新建一个3D的Unity工程. 2.菜单 "GameObject" - "3D Object",选择"Cube" 和 "Capsule"两个物体.在Hierarchy的面板中,拖拽Capsule到Cube的物体上.Cube为Capsule的子组件. 3.Hierarhy面板中,选择Cube,在Inspector面板的Transform选项卡,更改两个属性:Position和Scale.Cube重命名为"Visor

unity碰撞组件、刚体组件

游戏导入标准资源包“Character Controllers”后可以为游戏对象添加 character(角色控制器)组件: 添加角色控制器组建以后可以控制游戏对象移动: 角色控制器组件因为与碰撞组件相互冲突,所以添加角色控制器组建后Collider组件就会消失. 默认在Unity中创建的模型是不具备接收物理引擎的,除非给模型添加刚体组件或角色控制器组件. 看下面代码: 1 using UnityEngine; 2 using System.Collections; 3 4 public cla

Unity碰撞器触发关系测试

本文刚体有关的内容不再赘述,主要测试碰撞器和触发器的消息关系. 刚体在这篇有测试:U3D刚体测试1-刚体非刚体物体非Kinematic等之间的碰撞关系 碰撞器测试结果: 1.A对象为Collider,B对象为Trigger.A对象绑定接收脚本.只触发Trigger相关消息. 2.A对象为Collider,B对象也为Collider.A对象绑定接收脚本.只触发Collider相关消息. 3.A对象为Collider,B对象同时有Collider和Trigger.A对象绑定接收脚本.Trigger消

Unity碰撞消息(OnCollisionXXXX)和触发消息(OnTriggerXXXX)的调用情境

MonoBehaviour中的消息非常多,一共有62个! 除了必须关注的脚本生命周期的一系列函数外,还有其他两组比较常混淆的消息:碰撞和触发. 按3D和2D物体区分,又分为碰撞:Collision.Collision2D.触发:Trigger.Trigger2D. 以3D物体为例做了如下实验,分别测试下OnColiisionXXXX碰撞消息和OnTriggerXXXX触发消息的调用情景. 实验模拟: 1.分别创建物体A 和 物体B,使物体A处于物体B上方 2.在物体A有刚体组件的情况下,对物体A

(@WhiteTaken)Unity中Invoke的用法

今天无意间读到大神写的代码,看到了Invoke函数,于是产生兴趣.后来才明白自己要学习的东西还有很多. 下面讲用法. Invoke是延时调用函数,在用Invoke函数之前需要引入命名空间using UnityEngine.Events; 1.Invoke("MethodName",2) 这个比较简单,写在c#脚本中,意为 两秒之后调用一次,MethodName方法. 2.InvokeRepeating("MethodName",1,2) 这个方法就是多次调用Invo

SerializeField等Unity内的小用法

[SerializeField] 在Inspector版面中显示非public属性,并且序列化:若写在public前面,等于没写……(至于序列化是啥,自行脑补……),上图: [NonSerialized]在Inspector版面中隐藏public属性,并且序列化:如果写在非public属性前面,等于没写……,上图: [HideInInspector] 在Inspector版面中隐藏public属性,与上面相比,只是隐藏,没有序不序列化的功能……,上图: [AddComponentMenu("XX

Unity一些属性的用法

[SerializeField] 在Inspector版面中显示非public属性,并且序列化:若写在public前面,等于没写……(至于序列化是啥,自行脑补……),上图: [NonSerialized]在Inspector版面中隐藏public属性,并且序列化:如果写在非public属性前面,等于没写……,上图: [HideInInspector] 在Inspector版面中隐藏public属性,与上面相比,只是隐藏,没有序不序列化的功能……,上图: [AddComponentMenu("XX

Unity 关于SendMessage的用法

[Message相关有3个函数] 一.功能:用于向某个GameObject发送一条信息,让它完成特定功能. 1.执行GameObject自身的Script中"函数名"的函数SendMessage ("函数名",参数,SendMessageOptions) 2.执行自身和子节点GamgeObject的Script中"函数名"的函数BroadcastMessage ("函数名",参数,SendMessageOptions) 3.自

Unity 中 ContextMenu 的用法

在自定义脚本中的方法前加入  [ContextMenu("Execute")]  标签,然后将脚本挂载到对象上,可以再编辑模式下执行标记的方法: 自定义脚本如下: using System.Collections; using System.Collections.Generic; using UnityEngine; public class LestContextMenu : MonoBehaviour { [ContextMenu("Execute")] vo