刚体 RigidBody

Author : Charley

LayaAir引擎中的2D刚体组件类是 Laya.RigidBody ,继承自碰撞器基类 ColliderBase

一、添加刚体组件

1.1 什么是刚体

大家都知道,自然界一切有形体的物质,都可以叫物体。

刚体是力学中为了体现物体特性的一种科学抽象概念,也是一种理想状态的力学表达模型,是指在运动中和受到力的作用后,形状和大小不变,而且内部各点的相对位置不变的物体。

现实中不可能存在这种理想模型,物体在受力之后,会根据力、材料、弹性、 塑性等综合因素,决定是否改变或改变多少。 如果物体本身的变化不影响整个运动过程,为使被研究的问题简化,仍将该物体当作刚体来处理而忽略物体的体积和形状,这样所得结果仍与实际情况相当符合。

1.2 如何添加刚体组件

在LayaAirIDE中,我们可以直接为2D节点添加刚体组件。如动图1-1所示。

体现出完整的添加刚体组件的流程

(动图1-1)

二、刚体类型 type

RigidBody 的刚体类型type支持两种:

动态刚体dynamic、运动学刚体kinematic,默认为动态刚体dynamic。 如图2-1所示。

(图2-1)

注意:静态物理对象推荐使用独立的 StaticCollider(静态碰撞器)组件来实现,而非通过 RigidBody 设置 static 类型。详见 静态碰撞器 文档。

2.1 动态刚体dynamic

动态刚体是最常见的刚体类型,用于表示可以移动并受到外部力影响的物体,如角色、球体等。动态刚体具有质量和惯性,会根据外部力和扭矩的作用而移动和旋转。

动态刚体的特点是:会根据受到的力进行运动会受到重力的影响,可设置速度。

2.2 运动学刚体kinematic

运动学刚体是介于静态和动态之间的类型。它们不受外部力的影响,但可以通过设置线性速度和角速度来移动,而不是受到外力的直接作用。运动学刚体通常用于控制关节、平台等。

运动学刚体的特点是:不会根据受到的力进行移动不受重力影响,可设置速度。与静态碰撞器的主要区别就是,通常会通过设置速度(线速度和角速度)使其移动。

2.3 刚体类型与静态碰撞器特点对比表格

静态碰撞器 StaticCollider 动态刚体 dynamic 运动学刚体 kinematic
是否受外部力影响 静止不动,且不受外部力影响 受外部力影响 不受外部力影响
是否受重力影响 不受重力影响 受重力影响 不受重力影响
是否可设置速度 速度为零,且不可设置 可设置速度 可设置速度

三、重力

3.1 什么是重力

重力是一种基本的自然力,是物体之间由于质量而产生的相互吸引力。根据万有引力定律,两个物体之间的引力与它们的质量成正比,与它们之间的距离的平方成反比。在地球表面附近,地球的质量导致物体朝向地心方向受到重力的作用,使其具有向下的加速度,通常被定义为9.8米/秒²。

在物理引擎中,重力是模拟现实世界中物体受到的引力效应的关键因素之一。物理引擎通过模拟重力可以使物体在仿真环境中按照自然规律受到牵引,落地,或者在斜面上滚动。引擎通常使用物体的质量和一个预定义的重力加速度值来计算物体所受的重力。这些计算可以基于经典力学的牛顿定律,通过使用离散的时间步长来模拟物体的运动。

物理引擎中的重力概念涉及到力的计算、运动的数学模型和仿真的时间步进。通过逼真地模拟重力,物理引擎能够提供更真实的虚拟环境,使开发者能够更容易地创建具有自然物理特性的游戏或其他应用。

3.2 全局的重力参数设置gravity

重力的表达式为 :F = m ⋅ g  (其中 F 是物体所受的重力,m 是物体的质量,g 是重力加速度。)

在LayaAir3-IDE项目设置里,2D物理分组下的重力加速度是用于整个2D物理重力的全局参数设置,该设置支持X、Y两个方向的重力设置,默认是Y轴正方向(垂直向下)的重力加速度值为9.8米/秒²(m/s²)。如图3-1所示:

(图3-1)

在同等情况下,重力加速度的值越大,受重力影响的物体下落速度越快。

除了在项目设置面板中设置重力加速度,开发者也可以在代码中设置,示例代码如下:

Physics2D.I.gravity= new Vector2(0,9.8)

3.3 重力缩放系数 gravity Scale

除了全局的重力加速度参数设置外,刚体的重力缩放系数属性,是用于独立影响单个动态刚体重力效果的参数。

该值乘以重力值,得到当前刚体最终受重力影响的值。该数值可以为正数或负数,也包括了正负小数。默认值为1,即正常的全局重力,如图3-2所示。

(图3-2)

如果数值为0则表示没有重力。大于1的数值表示正常重力的倍数,数值越大则重力越大。数值为负数,则表示反方向重力,数值越小则反方向的重力越大。如动图3-3所示。

这里放重力效果不同参数的对比动图:小数、倍数、正与反方向重力

(动图3-3)

四、角速度 angularVelocity

角速度即物体围绕其质心的自旋转速度,是表示单位时间内的角位移物理量,标准国际单位是弧度每秒。

LayaAir3.1开始,为了用户更容易直观的理解和设置,该处直接设置为角度值即可。例如设置为90,如图4-1所示,表示每秒的速度为90度角对应的弧度值。

(图4-1)

当我们设置角速度属性为正值的时候,则按顺时针旋转。角速度属性为负值的时候,则按逆时针旋转。属性值的绝对值越大,旋转速度越快。角速度属性的默认值为0,此时不会旋转。效果如动图4-2所示。

体现正和负值的不同角度的不同效果

(动图4-2)

五、角阻尼 angularDamping

在现实中,旋转的物体通常会由于外部阻力而逐渐减速。

角阻尼正是用来模拟刚体在旋转运动中逐渐减速的参数,它用于表示外界作用或自身原因引起逐渐下降的衰减特性。

具体而言,刚体的角阻尼则是相对于角速度的旋转阻尼系数,这意味着角阻尼会导致刚体的旋转速度逐渐减小。通过调整该值,可以控制刚体在旋转过程中的减速程度。默认值为0,表示没有阻尼。

有无角阻尼的对比效果,如动图5所示。

有无阻尼的对比效果

(动图5)

六、线性速度 linearVelocity

线性速度也可简称为线速度,是指刚体在运动中沿着直线路径的速度,而不考虑其旋转。

该属性用二维向量来表示,分别描述了刚体沿着X(水平方向)和Y轴(垂直方向)的线性速度分量。

并且,该向量值同时也是矢量值,包含大小和方向。

从3.1开始,这两个分量的单位为像素/秒。

线速度的实际大小通过勾股定理(X平方加Y平方的根)计算得到,其大小表示物体运动的快慢。例如,X为3,Y为4,则线速度的实际大小为5,即5像素/秒。计算公式如图6-1所示。

(图6-1)

线速度的方向代表物体沿直线运动的方向,运动方向在坐标系统中理解起来就非常直观了,还是以3和4为例,表示了从坐标原点0,0到坐标3,4的直线运动方向。

默认值为0,0,在不受力的作用时,表示不进行线性运动。线速度效果如动图6-2所示。

不同方向不同速度的线速度效果

(动图6-2)

七、线性阻尼 linearDamping

线性阻尼通常与刚体(RigidBody)的运动有关。刚体在运动过程中,除了受到外部的力之外,还可能受到一种与其速度成正比的阻尼力,该阻尼力被称为线性阻尼力。线性阻尼的引入可以模拟物体在流体或空气中运动时由于介质的阻碍而逐渐减缓速度并最终停止的现象。

开发者可以通过设置刚体的线性阻尼属性来调整刚体在运动过程中受到的线性阻尼力的强度。范围从0到无穷大。默认值为0,表示没有阻尼。有无阻尼的效果如动图7所示。

有无阻尼的对比效果

(动图7)

通常情况下,阻尼的值设置在0到1之间

八、子弹 bullet

当物体运动速度非常高时,传统的碰撞检测可能无法准确捕捉到碰撞的发生,导致隧穿等问题的出现。这是由于在碰撞检测的两个时间步之间,物体可能已经移动了一个较大的距离,离开了检测范围。这种情况下子弹属性的启用变得十分重要。

如动图8所示,启用子弹属性后,物理引擎采用更为精确的碰撞检测算法(连续碰撞检测CCD),即使在高速运动的情况下,也能够准确地检测到碰撞。而未开启弹属性的刚体在高速运动时出现了隧穿现象。

是否启用子弹属性的高速碰撞对比效果

(动图8)

除了避免隧穿现象,子弹属性还可以用于避免高速移动的物体碰撞时可能产生的误差(如反弹或转动发生错误),以及避免高速刚体可能会对物理世界中的其他动态刚体造成剧烈冲击,从而影响整个物理世界的稳定性等问题的发生。

然而,需要注意的是,勾选启用子弹属性会增加物理引擎的计算负担。因为更为精确的碰撞检测需要更多的计算资源。因此,建议仅对确实需要进行高速运动的刚体启用该属性,以避免不必要的性能开销。

九、刚体休眠

物理引擎进行运动模拟时,是存在性能消耗的。当刚体停止运动时,其实我们可以不去模拟它。刚体设置为休眠状态就会跳过该刚体的模拟,直到被其它刚体解除才会醒来(关节被破坏或者手动唤醒也可以),从而节省性能的消耗。

9.1 允许休眠 allowSleep

如图9-1所示,勾选允许休眠,当刚体长时间没有发生运动或受到外力时,物理引擎会将其置于休眠状态。允许刚体休眠可以减少不必要的计算,提高性能。

(图9-1)

但是从休眠恢复到计算,也可能会导致无法即时响应。是否启用休眠取决于具体需求和对性能的权衡。在大多数情况下,启用休眠通常是合理的选择。

9.2 全局的刚体休眠功能开关

除了在刚体组件的休眠属性外,全局(项目设置面板)也有一个刚体功能的开关,如图9-2所示。

(图9-2)

需要注意的是,只有全局的刚体休眠功能开关勾选启用的,单个的刚体才可以设置是否允许休眠

否则,全局去掉勾选,则表示所有的刚体都不得休眠。这里建议保持全局的默认开启。

十、允许旋转 allowRotation

刚体的允许旋转是指当力或者冲击作用于该刚体时,它会按照物理规则进行自然旋转。这种旋转能够提供更加逼真的物理交互效果,比如当车辆碰撞或者物体掉落时的自然翻滚。如动图10-1所示。

设置允许旋转后,物体掉落翻滚的动图

(动图10-1)

如果把允许旋转的默认勾选去掉,则强制该刚体在整个物理模拟过程中保持不旋转,无论何种力学作用其上。这样的设置在某些游戏设计中也是有用的。例如,在一些需要刚体仅沿着特定轴移动或保持特别姿态的场景,禁用旋转能够简化物理响应,让游戏体验更加直接和可控。如动图10-2所示。不过,需要注意的是,这种非自然的物理限制可能会使碰撞的结果看起来不那么真实。

去掉允许旋转勾选的受力效果,与上面的示例相同,效果形成对比

(动图10-2)

此外,在性能需求较高的情形下,关闭不必要的物体旋转也可能有助于提升物理模拟的效率,特别是在处理大量物体时。

十一、质量相关属性(ColliderBase)

ColliderBase 基类中提供了质量相关属性,RigidBodyStaticCollider 均继承了这些属性。

11.1 自动计算质量 useAutoMass

勾选后,刚体的质量将根据碰撞形状(shapes)的密度和面积自动计算。默认开启自动计算。

当关闭自动计算质量时,可以手动设置以下属性:

11.2 质量 mass

刚体的质量。仅在未使用自动计算质量时有效。质量影响刚体受力后的加速度(F=ma),质量越大,同样的力产生的加速度越小。

11.3 质心 centerOfMass

刚体的质心位置。仅在未使用自动计算质量时有效。质心是刚体质量分布的中心点,以节点的(0,0)点为基准的偏移值表示。修改质心会影响刚体的旋转行为。

11.4 转动惯量 inertia

刚体对角速度(旋转)变化的阻力。仅在未使用自动计算质量时有效。转动惯量越大,刚体越难被旋转。

Copyright ©Layabox 2026 all right reserved,powered by LayaAir Engine更新时间: 2026-06-02 11:29:27

results matching ""

    No results matching ""