天天看点

Unity中的刚体

在移动或旋转一个物体时,我们往往会直接使用Transform来执行这些操作。这种方法对于不具物理特性的GameObject来说,是可行的。但是一旦GameObject上附带有刚体组件,这种方式就会带来性能的损失。对于有刚体的游戏物体官方强烈建议使用物理方式使其移动

一:Rigibody2D

Unity中的刚体

——BodyType:刚体类型

1.Dynaimc:动态类型,默认此类型

2.Kinematic:动力学类型(开启后游戏对象则不再受到物理引擎的影响从而只能通过Transform属性来对其操作)

3.Static:静态类型

——Material:物理材质(本文章第三节)

——Use Auto Mass:使用自动计算的质量

——Mass:质量(建议同一场景中的游戏对象之间的质量差值不要大于100倍)

——Linear Drag:运动方向的空气阻力

——Angular Drag:旋转时受到的空气阻力

——Gravity Scale:重力缩放

——Collision Detection:碰撞检测类型,是为了避免高速运动的碰撞体进行检测时的穿模现象,例如赛车游戏

1.Discrete:离散碰撞检测,正常速度下可以使用离散碰撞检测

2.Continuous:连续碰撞检测,适用于可能会被高速移动物体撞上的物体

注意使用Continuous这种类型进行检测会产生性能的消耗

——Sleeping Mode:休眠模式

1.Never Sleep:永不休眠

2.Start Awake:在程序启动时唤醒

3.Start Asleep:在碰撞检测时唤醒,其余时间处在休眠状态

——Interpolate:插值(基本上使用不到)

——Constraints:约束,可以冻结受到物理的力所改变的位置与旋转,使用Translate进行移动并不会被影响

二:Rigibody

Unity中的刚体

——Drag:运动方向的空气阻力

——Use Gravity:是否使用重力

——IsKinematic:是否开启动力学(开启后游戏对象则不再受到物理引擎的影响从而只能通过Transform属性来对其操作)

3.Continuous Dynamic:动态连续碰撞检测,适用于高速移动的物体

4.Continuous Speculative:推测式连续碰撞检测,这是唯一的CDD模式

注意Continuous和Continuous Dynamic类型只支持使用Box,Sphere和Capusle碰撞器的刚体,而且使用这两种类型进行检测会产生性能的消耗

Unity中的刚体

三:物理材质

Unity中的刚体
Unity中的刚体

不设置物理材质的物体默认为infinity

——Dynamic Friction:动态摩擦力

——Static Friction:静态摩擦力

——Bounciness:弹力

——Friction Combine:组合摩擦力

1.Average:平均(取两个碰撞物体的摩擦力平均值)

2.Mininum:最小值(取两个物体的摩擦力最小值)

3.Multiply:乘数(取两个物体的摩擦力的乘积)

4.Maximum:最大值(取两个物体的摩擦力最大值)

——Bonce Combine:组合弹力

例如很多物体在同一个场景中挤着很卡,如下图所示
Unity中的刚体
这是因为Unity默认碰撞物体有个Physc Material,Friction摩擦力为0.4,可以把Friction设置为0赋给碰撞的物体

四:几点需要注意的

——两个质量不同的物体从同一高度落地,时间是一样的。

例如两个物体质量分别为1和1000,在同一高度落下,落地的时间是相同的。

Unity中的刚体

由公式可知,落地的时间与质量无关。

但是在现实生活中结果却不是这样,因为现实中有空气阻力的存在,而在虚拟世界或者在真空中可以完全忽略空气阻力

——两个物体发生碰撞的条件:两个物体都有碰撞器并且其中一个有刚体组件

上一篇: Unity中的Time