常用物理属性
相关组件
对象名 | 说明 |
---|---|
LModelComponent | 模型组件,用于向游戏对象添加一个模型。小到各种物品,大到各种建筑,都可以通过模型组件添加到场景中。 |
LBoxComponent | 盒子组件,用于向游戏对象添加一个盒子碰撞体。 |
LSphereComponent | 球形组件,用于向游戏对象添加一个球碰撞体。 |
LCapsuleComponent | 胶囊体组件,用于向游戏对象添加一个胶囊体碰撞体。 |
LSkeletalMeshComponent | 骨骼动画组件,用于向游戏对象添加一个骨骼动画模型。各种角色、怪物,都可以通过骨骼动画组件添加到场景中。 |
各组件的物理(Physics) 属性内容会存在略微的差异,但碰撞(Collision) 属性内容基本相同。
组件属性
变换
属性 | 说明 |
---|---|
移动性(Mobility) | 该属性决定组件是否可移动,同时决定组件创建的物理对象为静态还是动态类型。
|
物理
属性 | 说明 |
---|---|
覆写物理文件(Override Physics File) | 是否使用自定义物理资源。 如果覆写物理文件( Override Physics File) = false,则组件会自动寻找并加载与当前模型匹配的物理资源文件。 如果覆写物理文件( Override Physics File) = true,则组件仅加载用户指定的物理资源文件。 如果此时用户指定的文件为空或者不存在,则组件会尝试创建默认的碰撞。 |
刚体文件(Rigid File) | 用户指定的物理资源文件路径。 根据组件类型的分类,这个属性的名称也会发生变化。如: 模型组件(LModelComponent)对应的属性名为刚体文件(Rigid File)。 骨骼动画组件(LSkeletalMeshComponent)对应的属性名为布娃娃(Ragdoll File)。 破碎组件(LDestructibleComponent)对应的属性名为可破坏文件(Destructible File)。 注:对于模型组件(LModelComponent),如果刚体文件(Rigid File)属性设置的资源文件为空或者无效,则组件会尝试创建默认的碰撞。 参与物理模拟的组件会默认创建凸包碰撞,其他默认创建网格体(Mesh)碰撞。 注意:尽量通过刚体编辑器为模型组件制作碰撞资源,因为组件的默认碰撞是在编辑器运行时通过模型顶点实时生成的。 同时应尽量使用简单的碰撞形状(比如球/胶囊体/盒子),代替凸包或者网格体(Mesh)碰撞(如果可以的话),因为简单的碰撞形状效率更高。 |
模拟物理(Simulate Physics) | 组件是否参与物理模拟。 当模拟物理(Simulate Physics) = true 时,开始游戏后组件会自动开始物理模拟。 当移动性(Mobility)被设置为静态(Static)时,模拟物理(Simulate Physics)属性会自动设置为false。 当模拟物理(Simulate Physics)属性设置为true时,移动性(Mobility)会自动被设置为可移动(Movable)。 |
初始唤醒(Start Awake) | 游戏开始后是否唤醒组件。 当组件参与物理模拟,但又希望组件初始静止,直到被其他物体碰撞之后再激活模拟时。 此时可将初始唤醒(Start Awake)属性设置为false以得到上述效果。 |
自动焊接(Auto Weld) | 是否自动焊接到父组件。 当自动焊接(Auto Weld) = true时,当前组件会自动焊接到其父组件上,与父组件的碰撞组合成为一个整体。 |
质量(Mass) | 质量相关的属性设置。 |
材质(Material) | 物理材质相关的属性设置。 |
重力(Gravity) | 重力相关的属性设置。 |
质量
属性 | 说明 |
---|---|
质量覆盖(Mass Override) | 是否覆盖当前组件的质量。 当覆写默认质量(Mass Override) = true时,组件的质量为质量(Kg)(Mass In Kg)属性的值。 当覆写默认质量(Mass Override) = false时,组件的质量为刚体文件(Rigid File)属性指定的物理资源文件中设置的质量。 如果此时未指定刚体文件(Rigid File)或者不存在对应的物理资源文件,则组件的质量默认为1。 |
质量(Kg)(Mass In Kg) | 指定的质量值(Kg)。 |
材质
属性 | 说明 |
---|---|
材质覆盖(Material Override) | 物理材质文件。 材质覆盖(Material Override)指定的材质文件中的属性会默认设置给组件包含的每一个碰撞体。 |
赋予碰撞体材质(Apply Material To Colliders) | 为组件的某个特定的碰撞体指定一个材质文件,会覆盖材质覆盖(Material Override)指定的材质文件中的属性。 当一个模型拥有不同的材质时,可通过赋予碰撞体材质(Apply Material To Colliders)来设置特定的材质。 |
重力
属性 | 说明 |
---|---|
启用重力(Enable Gravity) | 是否启用重力。 该属性需要在组件成功加载物理并且模拟物理(Simulate Physics) = true时才生效。 |
重力类型(Gravity Type) | 选择不同的重力类型,可获得不同的重力效果,重力类型是可通过程序扩展的。 内置的重力类型如下:
|
向量重力
属性 | 说明 |
---|---|
地形组件(Terrain Component) | 场景中任意的模型或者地形组件。 |
地形重力轴(Gravity Axis Of Terrain) | 根据地形组件(Terrain Component)指定的组件,选择组件任意坐标轴方向为重力方向。 |
重力加速度(Gravity Acceleration) | 重力加速度。 |
球形重力
属性 | 说明 |
---|---|
地形组件(Terrain Component) | 场景中任意的模型或者地形组件。 组件的位置为球心位置。 |
重力加速度(Gravity Acceleration) | 重力加速度。 |
体素盒子重力
属性 | 说明 |
---|---|
体素地形组件(Voxel Terrain Component) | 场景中任意的体素地形组件。 |
重力加速度(Gravity Acceleration) | 重力加速度。 |
进阶
属性 | 说明 |
---|---|
默认激活动态模拟(Start Active Dynamic) | 开始游戏后是否激活组件的物理模拟。 该属性在模拟物理(Simulate Physics) = true时生效。 当默认激活动态模拟(Start Active Dynamic) = false 时,开始游戏后,组件不会自动开始物理模拟,而是以运动学刚体的状态被创建。 运动学刚体需要通过外部设置来改变位置。 |
最大角速度(Max Angular Velocity) | 限制组件在参与物理模拟时,最大的旋转角速度。 |
线性阻尼 (Linear Damping) | 影响组件在参与物理模拟时,线性速度衰减的速率。 |
角阻尼(Angular Damping) | 影响组件在参与物理模拟时,角速度衰减的速率。 |
睡眠阈值(Sleep Threshold) | 设定组件在参与物理模拟时,进入Sleep状态的最小能量阈值。 陷入Sleep状态的组件不会参与模拟,直到被其他物体碰撞或者被强制唤醒,才会退出Sleep状态并重新参与物理模拟。 |
唤醒计数(Wake Counter) | 决定组件刚体进入睡眠状态的最小时间。在物体动能还没有低于睡眠阈值(Sleep Threshold)之前,物体是不会进入唤醒计数的。唤醒计数结束后物体进入睡眠状态。 |
稳定阈值(Stable Threshold) | 当组件刚体的质量归一化动能(mass-normalized kinetic energy)低于该阈值时,物体将趋于稳定。这里的稳定指的是场景中大量物体间相互作用的稳定性。 |
最小位置迭代(Position Solver Iteration) | 位置迭代次数。 该属性可用于提高约束模拟的质量。 例如,组件与约束组件链接,并且在模拟时发生抖动等不稳定的情况,可增大该属性的值,使模拟趋于稳定。 注意:该属性值越大性能消耗就越大。 |
最小速度迭代(Velocity Solver Iteration) | 速度迭代次数。 该属性可用于提高物理模拟碰撞点的准确性。 当你发现两个相互碰撞的物体发生严重陷入时,可尝试增大该属性值,让两个物体的碰撞位置更加准确。 注意:该属性值越大性能消耗就越大。 |
质心偏移(Center Of Mass Offset) | 用于在组件刚体原本质心的基础上,偏移组件刚体质心位置。 |
惯性张量缩放系数(Inertia Tensor Scale) | 用于在组件刚体原本的惯性张量基础上,缩放组件刚体的惯性张量系数。 |
支配组(Dominance Group) | 每个组件可以被指定到索引为1到10的支配组中,索引越大支配等级越高。 处于支配地位的组件相对于被支配的组件质量是无限大的。 比如物体A的支配组(Dominance Group) = 1,物体B的支配组(Dominance Group) = 2,在物理模拟中,物体A是撞不动物体B的。 当支配组(Dominance Group) = None时,组件不属于任何支配组,与索引为1到10的支配组都不存在支配关系。 这个属性经常被用于解决一些动态物体,非常容易受运动学物体碰撞挤压后弹飞的情况。 |
碰撞
碰撞是最常用的物理属性,这组属性被同时应用于物理模拟和场景碰撞检测。
属性 | 说明 |
---|---|
碰撞预设(Collision Presets) | 选择碰撞预设。碰撞预设通常包含一个碰撞通道(Collision Channel)类型以及一组碰撞响应(Collision Response)参数。 碰撞预设可以通过碰撞预设编辑器 (Collision Preset Editor )进行添加/删除/编辑等操作。 引擎提供的碰撞预设:
|
启用碰撞(Collision Enabled) | 决定组件的碰撞体,是否参与到物理模拟或者场景碰撞检测中。 碰撞类型:
|
通道名称(Channel Name) | 决定组件自身的碰撞通道类型;在被碰撞物体的碰撞响应(Collision Responses)属性中索引碰撞结果的类型。 可通过碰撞预设编辑器编辑添加自己所需的通道类型。 引擎定义的通道类型如下:
|
碰撞响应(Collision Responses) | 碰撞响应本身代表的是一种碰撞结果。一般会与通道类型结合使用,决定某个物体对某种通道类型是否会产生碰撞。 可选碰撞响应值:
|
关于碰撞的判定方式
上述演示的是一颗飞行中的子弹,在穿透玩家以及与摄像机碰撞后,打在玩家背后岩石上的碰撞判定过程:
- Step 1. 摄像机/玩家/石头组件用自己的通道(Channel)属性,与子弹响应(Responses)属性中对应的通道类型比对,并获得碰撞响应类型。
- Step 2. 子弹组件用自己的通道(Channel)属性,分别与摄像机/玩家/石头组件响应(Responses)属性中对应的通道类型比对,并获得碰撞响应类型。
- Step 3. 两次的碰撞响应类型组合获得最终碰撞结果。
Step 1 | 子弹 | Step 2 | 子弹 | Step 3 | |
---|---|---|---|---|---|
石头 | 阻挡(Block) | + | 阻挡(Block) | = | 阻挡(Block) |
玩家 | 重叠(Overlap) | + | 阻挡(Block) | = | 重叠(Overlap) |
摄像机 | 忽略(Ignore) | + | 阻挡(Block) | = | 忽略(Ignore) |
总结 |
---|
阻挡(Block) + Any = Any |
忽略(Ignore) + Any = 忽略(Ignore) |
重叠(Overlap) + 阻挡(Block)/重叠(Overlap) = 重叠(Overlap) |
事件回调
属性 | 说明 |
---|---|
通知接触事件(Notify Contact Event) | 物理模拟碰撞事件回调。
|
通知重叠事件(Notify Overlap Event) | 物理模拟穿透事件回调。
|
通知睡眠事件(Notify Sleep Event) | 物理模拟睡眠事件回调。
|
进阶
属性 | 说明 |
---|---|
使用CCD(Use CCD) | 连续碰撞检测功能。仅对参与物理模拟的组件生效。 建议仅在需要解决速度过快,穿透其他物体的组件上开启。 注意:该属性会带来一定性能消耗。 |
是否总是创建物理状态(Always Create Physics State) | 始终创建组件物理标志。 是否总是创建物理状态(Always Create Physics State) = true时,即使启用碰撞(Collision Enable) = 无碰撞(No Collision),组件也会创建物理碰撞。 |
生成重叠事件(Generate Overlap Events) | 组件移动时是否生成重叠事件。 如果生成重叠事件(Generate Overlap Events) = true,且当前组件是游戏对象(Game Object)的根组件,那么在组件每次移动时会做扫描碰撞(Sweep Collision)检测,并且与其他同样开启生成重叠事件(Generate Overlap Events)属性的组件做碰撞判定,并产生一个重叠(Overlap)事件回调。 注意:当场景中有许多可移动角色都开启该功能时,则会带来较大的性能消耗。因此当需要判断角色周围是否有物体进入一定范围内时,可以考虑使用物理触发器。 |
角色是否可以上楼(Can Character Step Up On) |
|