unity3d 碰撞器和触发器的区别

来源:互联网 发布:js点击计数器 编辑:程序博客网 时间:2024/05/22 13:00

首先得先明白什么是碰撞器,什么是触发器


碰撞器:Box Collider 盒碰撞器、Capsule Collider 胶囊碰撞器、Mesh Collider 网格碰撞器、Sphere Collider 球碰撞器  等等这一类组件。

触发器:以上这些碰撞器在检视面板中勾选IsTrigger属性就变成了触发器


区别:

(1)碰撞器有碰撞效果

(2)IsTrigger=false

(3)碰撞信息检测
MonoBehaviour.OnCollisionEnter(Collision collision) 
MonoBehaviour.OnCollisionExit(Collision collision) 
MonoBehaviour.OnCollisionStay(Collision collision) 

(1)触发器没有碰撞效果

(2)IsTrigger=true;

(3)触发信息检测:
MonoBehaviour.OnTriggerEnter(Collider collider)
MonoBehaviour.OnTriggerExit(Collider collider)
MonoBehaviour.OnTriggerStay(Collider collider)


要明白什么时候才会产生碰撞?或者说怎样才能触发以上那些函数?

刚体(Rigidbody)

刚体使物体能在物理控制下运动。刚体可通过接受力与扭矩,使物体像现实方式一样运动。任何物体想要受重力影响,受脚本施加的力的作用,或通过NVIDIA PhysX物理引擎来与其他物体交互,都必须包含一个刚体组件。

碰撞器(那些Collider,例如BoxCollider)和刚体(Rigidbody)要一起使用才会产生碰撞,才会触发以上那些函数,只是不同的组合方式触发的函数不同,例如是否勾选IsTrigger。




一些专业术语需要了解

1、Static Collider 静态碰撞器

指的是没有附加刚体而附加了碰撞器的游戏对象。这类对象会保持静止或者很轻微的移动。对于环境模型十分好用,当和刚体碰撞时而不会移动。

2、Rigidbody Collider 刚体碰撞器

指的是同时附加了刚体和碰撞器的游戏对象。通过脚本的力量和碰撞完全受物理引擎的影响。可以和只包含碰撞器的游戏对象碰撞。将会成为你游戏中使用物理效果的基本类型碰撞器。

3、Kinematic Rigidbody Collider 运动学刚体碰撞器

指的是同时包含碰撞器和刚体,并且激活IsKinematic的一类游戏对象,要移动这类游戏对象,要修改它的Transform组件,而不是用力。它们很像静态碰撞器不过对于想要不停地到处移动的碰撞器很好用。

如果有刚体有时候变得静止不动了,那么它们就是进入休眠了。意味着它们将不受物理变化影响,也就不会移动。如果你把一个运动学刚体从一个休眠的普通刚体下边移走,那休眠的刚体就会被唤醒并重新被物理变化时时影响。



举例:两个方块,Cube1和Cube2 ,移动一个方块去碰撞另外一个方块。

(1)如果这两个方块都只挂着碰撞器(例如BoxCollider)没有挂刚体(Rigidbody),不会触发消息

(2)两个方块都挂着碰撞器(例如BoxCollider)和 刚体(Rigidbody),IsTrigger=false的情况下响应碰撞检测函数,IsTrigger=true的情况下响应触发检测函数


仅提供以上两个思路,大家可以试着尝试各种组合,查看触发哪些函数。

0 0
原创粉丝点击