基础知识补全_物理相关

目录

物理模拟

物理模拟(SimulatePhysics)

勾选一个组件的 Simulate Physics 时,该组件就不再由你手动控制位置/旋转,而是交给UE的物理引擎(PhysX 或 Chaos)去驱动。

物理模拟的部分核心参数:

参数含义
Mass
(质量)
物体的“重量”。质量越大,越难被推动,下落时惯性越大,撞击力越强。
Linear Damping
(线性阻尼)
阻碍线性运动(移动)的“空气阻力”。值越大,物体移动时减速越快。
Angular Damping
(角阻尼)
阻碍旋转运动(转动)的“空气阻力”。值越大,旋转停止得越快。
Enable Gravity
(启用重力)
是否受重力影响。关闭后物体会飘在空中。
Simulation Generates Hit Events
(模拟生成命中事件)
是否在碰撞时生成事件(如 OnComponentHit),便于蓝图响应撞击。
Collision Presets
(碰撞预设)
预置的碰撞反应规则,比如 PhysicsActor 表示会与其他物理物体碰撞。
Restitution
(弹力)
碰撞后反弹的程度。0 = 完全不反弹,1 = 几乎完全弹性碰撞。
Friction
(摩擦力)
接触面之间的阻力。影响滑动停止的快慢。

实际用的时候,比如需要固定住物理模拟时不会有Roll的旋转,该怎么设置:在约束中锁定旋转就行。

角色移动物理交互(Physics Interaction)

Physics Interaction(物理交互)是角色移动组件(Character Movement Component)上的一个功能开关。它决定了角色在移动时,是否能对场景中开启了物理模拟(Simulate Physics)的物体施加物理影响,以及影响的程度。比如:
角色在移动时,能对物理物体施加多大的推动力。
角色在与物理物体碰撞时,自身会承受多大的反作用力。

另外,相比直接在蓝图里写逻辑,使用这个UE原生组件性能表现会更好,但与大量物理对象交互仍然会带来性能开销。对应的设置项:

物理动画组件(Physical Animation Component)

物理动画组件是让角色播放动画的同时,还能受到物理影响的组件。

它的典型用途有这几种:
角色被击中时,受击部位短暂地切换到物理模拟,产生自然的受击反应。
角色死亡或失去意识时,从关键帧动画平滑过渡到布娃娃状态。
为角色的某些部位(如头发、披风、悬挂的武器)添加物理效果,使其在运动时自然摆动。

物理形体

物体要参与物理模拟,还得有一个物理上的形状。

物理资产(PhysicsAsset)

PhysicsAsset可以理解为是参与物理模拟物体所必须定义的“身体形状”,专门用于骨骼网格体。UE里的碰撞形状通常分为两种:
简单碰撞(Primitive Collision):用盒子、球体、胶囊体等基本几何体或凸包(Convex)近似物体的外形,性能极佳,适合大多数道具、墙壁、角色。
复杂碰撞(Triangle Mesh):使用模型的精确形状生成碰撞,性能较差,仅在需要精确碰撞时使用(如复杂的石头、雕像)。
物理资产里的形体用的都是简单碰撞的形状。

而这个“身体形状”由两部分组成:
Body(刚体):为每一根(或选中的)骨骼生成一个碰撞体(通常是胶囊体、球体、盒体),决定了骨骼的物理形状。
Constraint(约束):定义相邻骨骼之间的连接关系,限制了它们的相对运动(旋转角度、位移范围)。

物理资产 UE官方文档

形状组件(ShapeComponent)

Shape Component是虚幻引擎中所有基础几何碰撞体的基类。它是一个不可见的体积,专门用于碰撞检测(Collision)和物理模拟(Physics),而不负责渲染视觉效果。角色蓝图里可添加的形状组件,则是ShapeComponent的子类实例。

形状组件 UE官方文档

在蓝图里添加组件时能看到的几种:

形状组件与物理资产的部分特性对比:

特性ShapeComponent (形状组件)PhysicsAsset (物理资产)
本质一个组件(Component)一个资产(Asset)
应用对象任何Actor(如角色、道具、环境物体)专门用于SkeletalMesh(骨架网格体)
复杂程度简单:单个几何形状(球、盒、胶囊等)复杂:由多个为不同骨骼定义的物理形体(Physics Bodies)和约束(Constraints)组成
主要用途为物体提供基础的碰撞检测或作为触发器(Trigger)为骨骼网格体(如角色、布娃娃)实现精细的、关节驱动的物理模拟
编辑方式在蓝图或关卡中直接添加和调整属性在专用的物理资产编辑器(Physics Asset Editor)中编辑
典型例子角色的胶囊体碰撞、子弹的球体碰撞、火球的触发器角色的布娃娃系统、带有悬挂和车轮的车辆物理

物理对象(Body Instance)

Body Instance可以理解为一个组件的物理配置,记录了各种物理相关配置:是否碰撞、是否模拟物理、是否受重力影响、质量等等。

一个普通的Shape Component,比如Box Component,对应的Body Instance,以及一个Skeletal Mesh Component对应的Body Instance,是不太一样的。Shape Component 通常对应一个 Body Instance,Body Instance 保存该碰撞体的物理和碰撞配置。而Skeletal Mesh Component通常不只有一个Body Instance,而是会为Physics Asset中的多个物理体分别维护Body Instance。比如说一个人物,会有头、身体、左右手等等,每个部位各对应一个Body Instance。

物理对象属性参数参考 UE官方文档

学习任务

这一节的任务是:给SKM_SphereCube添加一个PhysicsAsset,命名PA_SphereCube,满足一个圆柱碰撞包住整个模型的要求(似乎没有圆柱体的预设)。

碰撞规则

有了形状,接下来看两个物体之间会不会碰撞。

对象类型(Object Type)

Object Type本质是个标签,不会改变本身的物理属性。而另一个Actor的碰撞逻辑引用到这个标签时,这两个Actor之间的物理交互才会有实质性的影响。举个例子,就是一个Actor忽略所有Object Type是Pawn的Actor的碰撞,而你把Pawn改成了其他的Object Type,那这两个Actor就不会再因为这条规则忽略碰撞了。至于最后会不会碰撞,还要看两个Actor对彼此类型设的响应。

除了UE自带的类型,还可以自己添加类型。

碰撞相关配置

UE中自带一些碰撞预设,多数情况直接套用即可,也可以选择Custom来逐项自定义。参数相关可以直接细读一下官方文档里的碰撞响应参考部分:碰撞 UE官方文档。

UE中碰撞分为物理模拟(Physics)和空间查询(Query),前者用于物理效果模拟,后者常用于射线检测等。设置里还能看到Probe,这个Probe是啥(

碰撞响应Block、Overlap、Ignore类型概念,以及 Collision Enabled 的几个选项:

学习任务

这一节有两个任务:
一是在空场景中,让2.2(上一篇第二章)中制作的BP_SphereCube进行物理模拟,且玩家控制的角色碰到这个物理模拟角色时,可以踢开。
二是设置这个BP_SphereCube角色为:玩家控制的角色不能站上去。

两个任务的做法都是:骨骼网格体组件中,对Pawn设置为Overlap即可,这样角色碰到它时,它会响应物理模拟被踢飞,同时角色也只能穿过这个物体。

最后的效果:

其他

还有几个暂时没深入、留着往后再看的点:

一是物理子步(Physics Sub-stepping)与性能相关。部分物理“抖动”或“穿透”的BUG情况就和它有关:当帧率较低时,物理引擎计算步长变大,可能导致快速物体穿过薄墙。对此,引擎有个“子步 (Sub-stepping)”设置,用于在单帧内拆分多次计算。
物理子步

二是Tick与性能相关。通常UE里一帧会Tick一次,可以对特定Actor通过降低Tick频率的方式省性能。
Actor Ticking

相关的还有Actor生命周期。

三是角色移动组件联网相关:
角色移动组件

四是两个图元叠加在一起,似乎在场景中出现了抽搐或者自动移动的情况:
物理资产编辑器 UE官方文档

guest
0 评论
内联反馈
查看所有评论