欢迎来到我的世界 - 碰撞对象

87 阅读3分钟

这里的世界是一个游戏引擎中的虚拟世界,是一个基于牛顿物理定律模拟各个碰撞对象运行碰撞时的物理世界。主要由以下几个部分组成:

  1. 碰撞对象:是在物理世界中可发生碰撞的,有物理属性(质量、摩擦系数、弹力等)的对象。碰撞对象也是让Game Object具有碰撞效果的组件。
  2. 碰撞形状:一个碰撞对象可由一个或多个简单或复杂的形状构成。
  3. 碰撞组:对碰撞对象进行分组,通过组在处理碰撞对象之间的碰撞关系。
  4. 碰撞消息:当两个碰撞对象发生接触时,引擎会自动向两个对象发送的消息。
  5. 关节:用于对碰撞对象进行物理约束或施加力。
  6. 射线:通过发出射线,检测碰撞对象在世界中的位置。

两个不同的物理世界不可能发生物理关联。就像两个人在不同的时间经过同一个点,这两个人是绝对不会产生物理上的碰撞。在游戏引擎也是一样的,可以把不同的Collection Proxy代理的对象看着是两个不同时间点世界,就算是基于同一个prototype对象也不可能产生碰撞。

本文只讲 碰撞对象 相关的内容,关于 碰撞消息关节射线再专门写文章进行讲解。

碰撞对象

碰撞对象组件为Game Object提供了可碰撞的物理效果,但是碰撞对象也分为不同的类型,如下表所示:

类型说明
Static静态对象,位置不可移动的,可以其他非静态对象发生碰撞,不可以运行时修改,多用于游戏中的地板或墙壁等固定场景的元素。
Dynamic动态对象,具有完整的物理属性,被物理引擎管理。用户只能向它施加力,影响它的位置与运动状态,但是不是直接控制它的物理状态,会依据设置的质量、摩擦系数、弹力系数、阻尼系数等,受到物理引擎的控制。
kinematic动画对象,具有完整的物理属性,但是不受物理引擎管理,可碰撞,适合用于脚本控制的游戏对象。
Trigger触发器,用于做碰撞检测,性能非常好。

可以一个碰撞对象中添加多个碰撞形状,比如对于一个人形的游戏角色,给四肢、躯干、头添加不同的碰撞形状,也可以比较粗放的给整个角色加一个凸多边形做为碰撞形状。这主要看我们的游戏控制精度。

碰撞对象的属性

碰撞对象具有的属性示例如下所示:

  1. Friction:表示摩擦系数,在0~1之间的值,0表示极度光滑,1表示极度粗糙。
  2. Mass:表示物体的质量。
  3. Restitution:表示物体的弹力系数,在0~1之间的值。
  4. Linear Damping:表示物体运动时的线性阻尼系数,在0~1之间的值,影响物体运动的线性速度,让线性速度越来越小。
  5. Angular Damping:表示物体运动时的角阻尼系数,在0~1之间的值,影响物体的旋转速度,让旋转速度越来越慢。
  6. Group:表示当前碰撞对象的分组名。
  7. Mask:表示能与当前分组碰撞的其他分组名,如果有多个分组名使用英文逗号间隔。