基础知识补全_物理相关
物理模拟(SimulatePhysics)
—————懒得写副标题了zzz
勾选一个组件的 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原生组件性能表现会更好,但与大量物理对象交互仍然会带来性能开销。
物理资产(PhysicsAsset)
PhysicsAsset可以理解为是参与物理模拟物体所必须定义的“身体形状”,专门用于骨骼网格体,通常分为两种:
简单碰撞:(Primitive Collision):用盒子、球体、胶囊体等基本几何体近似物体的外形,性能极佳,适合大多数道具、墙壁、角色。
复杂碰撞:(Convex / Triangle Mesh):使用模型的精确形状生成碰撞,性能较差,仅在需要精确碰撞时使用(如复杂的石头、雕像)。
而这个“身体形状”由两部分组成:
Body(刚体):为每一根(或选中的)骨骼生成一个碰撞体(通常是胶囊体、球体、盒体),决定了骨骼的物理形状。
Constraint(约束):定义相邻骨骼之间的连接关系,限制了它们的相对运动(旋转角度、位移范围)。
形状组件(ShapeComponent)
Shape Component是虚幻引擎中所有基础几何碰撞体的基类 。是一个不可见的体积,专门用于碰撞检测(Collision)和物理模拟(Physics),而不负责渲染视觉效果。
角色蓝图里可添加的形状组件,则是ShapeComponent的子类实例。
形状组件与物理资产的部分特性对比:
特性 | ShapeComponent (形状组件) | PhysicsAsset (物理资产) |
本质 | 一个组件(Component) | 一个资产(Asset) |
应用对象 | 任何Actor(如角色、道具、环境物体) | 专门用于SkeletalMesh(骨架网格体) |
复杂程度 | 简单:单个几何形状(球、盒、胶囊等) | 复杂:由多个为不同骨骼定义的物理形体(Physics Bodies)和约束(Constraints)组成 |
主要用途 | 为物体提供基础的碰撞检测或作为触发器(Trigger) | 为骨骼网格体(如角色、布娃娃)实现精细的、关节驱动的物理模拟 |
编辑方式 | 在蓝图或关卡中直接添加和调整属性 | 在专用的物理资产编辑器(Physics Asset Editor)中编辑 |
典型例子 | 角色的胶囊体碰撞、子弹的球体碰撞、火球的触发器 | 角色的布娃娃系统、带有悬挂和车轮的车辆物理 |
物理对象(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。
物理动画组件(Physical Animation Component)
让角色播放动画的同时,还能受到物理影响的组件。
典型用途:
角色被击中时,受击部位短暂地切换到物理模拟,产生自然的受击反应
角色死亡或失去意识时,从关键帧动画平滑过渡到布娃娃状态。
为角色的某些部位(如头发、披风、悬挂的武器)添加物理效果,使其在运动时自然摆动。
对象类型(Object Type)
本质是个标签,不会改变本身的物理属性。
而另一个Actor的碰撞逻辑引用到这个标签时,这两Actor之间的物理交互才会有实质性的影响。
举个粒子就是一个Acotr忽略所有Object Type是Pawn的Actor的碰撞,而你把Pawn改成了其他的Object Type,那着两就不会忽略碰撞了。
除了UE自带的类型,还可以自己添加类型。
碰撞相关配置
UE中自带一些碰撞预设,多数情况直接套用即可,也可以选择Custom来逐项自定义。
参数相关可以直接细读一下官方文档里的碰撞响应参考部分:碰撞 UE官方文档
UE中碰撞分为物理模拟(Physics)和空间查询(Query),前者用于物理效果模拟,后者常用于射线检测等。
这个Probe是啥(
碰撞响应Block、Overlap、Ingore类型概念:
学习任务
给SKM_SphereCube添加一个PhysicsAsset,命名PA_SphereCube,满足一个圆柱碰撞包住整个模型的要求(似乎没有圆柱体的预设)
空场景中,让2.2中制作的BP_SphereCube进行物理模拟,且玩家控制的角色碰到这个物理模拟角色时,可以踢开
设置这个BP_SphereCube角色为,玩家控制的角色不能站上去
骨骼网格体组件中,对Pawn设置为Overlap即可,这样物理会对角色响应物理模拟被踢飞,同时角色也只能穿过这个物体。
其他
—————往后再看吧
物理子步(Physics Sub-stepping)与性能相关
部分物理“抖动”或“穿透”的BUG情况:
当帧率较低时,物理引擎计算步长变大,可能导致快速物体穿过薄墙。
引擎有个“子步 (Sub-stepping)”设置,用于在单帧内拆分多次计算。
Tick与性能相关
通常UE里一帧会Tick一次
可以通过对特定Actor通过降低Tick频率的方式省性能
角色移动组件联网相关
两个图元叠加在一起,似乎在场景中出现了抽搐或者自动移动的情况