[Unity-4] 碰撞检测

一、基本介绍

要进行碰撞检测有两个必须的组件,刚体(Rigidbody)和碰撞器(Collider)。

1、刚体是一个非常重要的组件。新创建的物体默认情况下是不具备物理效果的,而刚体组件可以给物体添加一些常见的物理属性,例如质量、力、速度等,这些属性可以使得该物体表现出实际中物体的一切行为。

2、碰撞器分为盒子碰撞器(Box Collider)、球体碰撞器(Sphere Collider)、胶囊碰撞器(Capsule Collider)、网格碰撞器(Mesh Collider)和车轮碰撞器(Wheel Collider),不同的碰撞器适用于不同形状的游戏体。

二、碰撞检测

1、刚体具有以下几个碰撞检测的函数:

a.OnCollisionEnter(Collision other):碰撞刚发生的时候触发此方法,需要在这一时刻执行的指令可以写到这里面。

b.OnCollisionStay(Collision other):碰撞中触发的函数,在碰撞持续过程中,每一帧都会执行以下这个函数,需要在碰撞发生过程中执行的指令可以写到这里面。

c.OnCollisionExit(Collision other):碰撞退出触发的函数,需要在碰撞结束的时刻执行的指令可以写到这里面。

2、碰撞器具有以下几个碰撞检测的函数:

d.OnTriggerEnter(Collider other):同OnCollisionEnter(Collision other)

e.OnTriggerStay(Collider other):同OnCollisionStay(Collision other)

f.OnTriggerExit(Collider other):同OnCollisionExit(Collision other)

注意:Collider具有一个参数isTrigger,当设置为false时,发生碰撞会触发刚体相应的函数(a、b或c),当设置为true的时候,abc则不会被触发,相应的d、e、f会被触发。

也就是说abc和def之间只有一组函数会被触发。

三、相关问题

1.有这样一种情形,物体A和B进行碰撞检测,A和B都有自己的OnTriggerEnter函数,当碰撞发生的时候,A和B的OnTriggerEnter函数触发顺序谁先谁后呢?

经过验证后发现,顺序是随机的。所以如果要执行一些有顺序的操作时最好将这些操作写到同一个物体的OnTriggerEnter函数中。

[Unity-4] 碰撞检测

时间: 2024-10-27 12:02:56

[Unity-4] 碰撞检测的相关文章

Unity Layout碰撞检测

第一次看到LayerMask根本不知道是什么东东,后来问问度娘,看了几篇文章,终于看明白一点点,在网上看到各路大神的解释,终于明白了,LayerMask实际上是一个位码操作,在Unity3d中Layers一共有32层,这个是不能增加或者减少的,中文名字叫层蒙版 LayerMask允许你在检视面板中显示LayerMask弹出菜单,类似与camera.cullingmask.LayerMask可以选择性地过滤物体,例如当投射射线时 摘自官网:Layers are used throughout Un

Unity学习-碰撞检测(七)

Unity脚本说明 Unity支持语言: C#(主流),JavaScript,Boo 创建脚本: [Assets-Create-C# Script] 学习案例 布置场景: 添加一个Plane,3个Cube,一个Directional light 设置启动项(Preferences) 导入UnityVS,方便用vs开发unity [Assets-Import Package-Visual Studio 2014 Tools] 写一个让方块移动的脚本(Move) [Assets-Create-C#

Unity + Spine 碰撞检测

通过自己在开发的游戏过程中发现有几种做碰撞检测的方法:1. 只在unity中添加collider这是最简单的一种.在Spine中编辑好骨骼动画以后导入到unity中,让后spawn bone就可以得到在Spine中的骨架,然后在需要的骨骼上加上collider.这种方法对于简单的碰撞应用还可以,但是复杂一点就不好用了,比如在某一帧需要去掉碰撞,这就做不到.而且在编辑collider的时候对于复杂多变的bone也很不好勾勒碰撞区. 2.在Spine中添加专用的碰撞骨骼在Spine中可以专门多创建一

Unity 2D碰撞检测

void Update() { if (Input.touchCount == 1) { Vector3 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position); Vector2 touchPos = new Vector2(wp.x, wp.y); if (collider2D == Physics2D.OverlapPoint(touchPos)) { //your code } } }

【转】Unity LayerMask 的位运算

Unity的Layer Unity是用 int32来表示32个Layer层,int32用二进制来表示一共有32位. 0000 0000 0000 0000 0000 0000 0000 0000 31                                                                 0 看几个例子 开启layer 2 LayerMask mask = 1<<2; 其中 <<左边的 1表示有[开启],0表示没有该layer[忽略] .右边

Unity LayerMask 与位运算

Unity是用 int32来表示32个Layer层,int32用二进制来表示一共有32位. 0000 0000 0000 0000 0000 0000 0000 0000 31                                                            0 看几个例子: 开启layer 2 LayerMask mask = 1<<2; 其中 <<左边的 1表示有[开启碰撞],0表示没有该layer[忽略碰撞] .右边的2表示左移2位即是 l

【Unity入门】碰撞检测与触发检测

版权声明:本文为博主原创文章,转载请注明出处. 在Unity里面,游戏物体的碰撞我们可以通过刚体组件(Rigidbody)和碰撞器组件(Collider)来进行检测.首先在场景里面添加一个Plane面板作为地面,然后在Plane面板的上方一定高度处放一个Cube立方体. 然后给Cube立方体添加一个刚体组件(Rigidbody).运行游戏,这时候我们可以看到立方体掉在了面板上面. 立方体和面板产生了碰撞,并且禁止在面板上,这时候我们可以可以通过脚本来进行检测,比如立方体掉在面板上的时候我们可以将

unity中射线碰撞检测总结

这阵子通过看视频,看书对unity中射线碰撞检测,有了一些了解,这里我把它总结一下写下来,希望能帮助到你们,也希望通过各位大神来指正不足之处: 射线碰撞检测,就是由某一物体发射出一道射线,射线碰撞到物体之后,可以得到该物体的相关信息,然后就可以对该物体进行一些操作的过程了.PS:个人见解: 射线的发射分为可见和不可见,可见的情况就是在游戏当中你可以看到射线,而不可见就是游戏运行时,你只可以在Scene试图下观察到它,而这到射线又是存在的: 而其实两者区别不大,关键是看你怎么用它了: 下面先看看不

unity不使用刚体的碰撞检测

孙广东  2015.8.15 目的: 这篇文章的主要目的是为了让您了解有关于在Unity内如何使用没有刚体的碰撞检测. 在这里,检查的只是垂直运动方向,但可以通过修改脚本,将对象添加到场景检查其他方向 (或更改cube 的位置. unity就是 3D 的游戏引擎,带有内置物理Nvidia PhysX.游戏对象应用物理模拟必须具有刚体.它常用于碰撞检测. 假设我们只想要碰撞检测模拟物理学,然后只对碰撞检测使用物理引擎可能会降低整体性能. 有两个解决办法: 解决办法-1: 使刚体运动学和捕获触发器事

Unity 碰撞检测中碰撞器与触发器的区别

要产生碰撞必须为游戏对象添加刚体(Rigidbody)和碰撞器,刚体可以让物体在物理影响下运动.碰撞体是物理组件的一类,它要与刚体一起添加到游戏对象上才能触发碰撞.如果两个刚体相互撞在一起,除非两个对象有碰撞体时物理引擎才会计算碰撞,在物理模拟中,没有碰撞体的刚体会彼此相互穿过. 物体发生碰撞的必要条件 两个物体都必须带有碰撞器(Collider),其中一个物体还必须带有Rigidbody刚体. 在unity3d中,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种则是利用触发器. 碰撞器:一