Unreal Engine UPrimitiveComponent
Unreal
- 🎮 Unreal Engine - UPrimitiveComponent
- 🏛 定义
- 🧬 类继承
- ⚡ 关键特性
- ⚙️ 常见配置
- 📝 使用方法
- 🛠️ 添加组件到 Actor
- ⚡ 设置碰撞属性
- 🏋️ 启用物理模拟
- 🔗 可见性控制
- 🏊 典型应用场景
- 📚 常见子类与用途
- 📦 小结
🎮 Unreal Engine - UPrimitiveComponent
🏛 定义
UPrimitiveComponent 是 所有可见组件(Visible Components)和可碰撞组件(Collidable Components)的基类。
它负责处理 渲染、碰撞、物理模拟,是 Unreal Engine 中一切可见对象和物理对象的核心组件。
🧬 类继承
-
👤 继承关系:
UObject → UActorComponent → USceneComponent → UPrimitiveComponent
-
📝 子类示例:
UStaticMeshComponent
:用于静态网格渲染与碰撞USkeletalMeshComponent
:用于骨骼网格与动画UParticleSystemComponent
:用于粒子效果UShapeComponent
:基础几何体(如 Box、Sphere、Capsule)
⚡ 关键特性
- 🔗 渲染支持:提供渲染代理(Render Proxy),负责绘制到场景中
- 🛠️ 碰撞系统:内置碰撞检测和查询(Overlap、Hit)
- 🏋️ 物理模拟:支持刚体物理(Rigidbody)、重力、力与扭矩作用
- 📦 LOD 与可见性:支持裁剪(Culling)、LOD 渲染优化
- ⚙️ 移动与变换:继承自 USceneComponent,可直接设置位置、旋转、缩放
⚙️ 常见配置
- 🏷 CollisionEnabled:开启/禁用碰撞检测(NoCollision / QueryOnly / PhysicsOnly / QueryAndPhysics)
- 🏷 CollisionResponse:控制与不同对象的交互方式(Block、Overlap、Ignore)
- 🏷 SimulatePhysics:是否启用物理模拟
- 🏷 bVisible:是否可见
- 🏷 bCastDynamicShadow:是否投射阴影
- 🏷 Mobility:可移动性(Static / Stationary / Movable)
📝 使用方法
🛠️ 添加组件到 Actor
// 在 C++ 中创建静态网格组件并附加到 Root
UStaticMeshComponent* MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));
RootComponent = MeshComp;
⚡ 设置碰撞属性
MeshComp->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
MeshComp->SetCollisionResponseToAllChannels(ECR_Block);
🏋️ 启用物理模拟
MeshComp->SetSimulatePhysics(true);
MeshComp->AddForce(FVector(0,0,500)); // 给物体施加向上的力
🔗 可见性控制
MeshComp->SetVisibility(false); // 隐藏组件
🏊 典型应用场景
- 🤖 静态物体渲染:墙壁、地板、建筑物(UStaticMeshComponent)
- 🪂 动态角色:骨骼动画角色(USkeletalMeshComponent)
- ⚙️ 物理交互:可推动、受力、模拟刚体的物体
- 📦 触发区域:通过
UShapeComponent
(如 Box/Sphere)设置触发体积 - 🔗 特效显示:粒子、光效、特效组件
📚 常见子类与用途
- 🏛 UStaticMeshComponent:显示静态网格
- 🏋️ USkeletalMeshComponent:骨骼网格与动画
- 📦 UShapeComponent(如 Box、Sphere):碰撞体与触发区域
- 🔥 UParticleSystemComponent:粒子效果
- 🎮 UDecalComponent:贴花效果
📦 小结
- ✅
UPrimitiveComponent
是 可见性 + 碰撞 + 物理模拟 的核心组件基类 - ✅ 几乎所有游戏世界中 能看见或能交互的对象 都是它的子类
- ✅ 提供了 渲染代理、碰撞检测、物理接口,是游戏表现与交互的基础
- ✅ 开发时通常不会直接使用它,而是通过其子类(
UStaticMeshComponent
、USkeletalMeshComponent
等)来完成具体需求