Unreal Engine UActorComponent
UActorComponent是Unreal Engine中Actor的组件基类,通过组合式设计为Actor提供模块化功能(如渲染、物理、音效等)。继承自UObject,关键子类包括UPrimitiveComponent(含静态/骨骼网格组件)、UCameraComponent等。核心特性包含生命周期管理(InitializeComponent/BeginPlay/Tick)、网络复制、属性序列化
·
Unreal
🛠️ Unreal Engine - UActorComponent
🏷 定义
- UActorComponent 是 Actor 的组件基类。
- 不能直接出现在世界中,而是附加到 AActor 上,为 Actor 提供功能和行为。
- 用于实现 可复用逻辑或功能模块,如渲染、物理、音效、输入等。
- 是 组合式设计的核心,允许 Actor 通过组件扩展功能而无需继承。
🧩 类继承关系
UObject
└── UActorComponent
├── UPrimitiveComponent
│ ├── UStaticMeshComponent
│ ├── USkeletalMeshComponent
│ └── UAudioComponent
├── UCameraComponent
└── ULightComponent
- UObject:基础对象类
- UActorComponent:Actor 可附加组件基类
- UPrimitiveComponent:带渲染和碰撞的组件基类
- UStaticMeshComponent:静态网格渲染
- USkeletalMeshComponent:骨骼网格渲染
- UAudioComponent:声音播放组件
- UCameraComponent:摄像机组件
- ULightComponent:灯光组件
⚙️ 关键特性
- 可附加到 Actor
- Actor 可以有多个组件,每个组件负责特定功能
- 通过
CreateDefaultSubobject<>()
或蓝图添加
- 生命周期管理
- 核心回调:
InitializeComponent()
:组件初始化BeginPlay()
:Actor 开始游戏时调用TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
:每帧更新EndPlay(const EEndPlayReason::Type EndPlayReason)
:结束时调用
- 核心回调:
- 可复用与模块化
- 一个组件可以被多个 Actor 重用
- 支持自定义逻辑和状态
- Tick 支持
- 可设置
PrimaryComponentTick.bCanEverTick = true
- 实现每帧逻辑,如 AI、移动、动画更新
- 可设置
- 网络复制支持
- 可通过
bReplicates
和bReplicateMovement
在客户端/服务器同步状态
- 可通过
- 属性可编辑与序列化
- 使用
UPROPERTY()
暴露属性给蓝图或编辑器 - 可序列化、保存游戏、支持 GC
- 使用
📝 使用方法
1. 创建组件
// 头文件
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* MeshComponent;
// CPP构造函数
MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent"));
RootComponent = MeshComponent;
2. 生命周期回调
void UMyComponent::InitializeComponent()
{
Super::InitializeComponent();
UE_LOG(LogTemp, Warning, TEXT("Component initialized"));
}
void UMyComponent::BeginPlay()
{
Super::BeginPlay();
UE_LOG(LogTemp, Warning, TEXT("Component BeginPlay"));
}
void UMyComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
// 每帧逻辑
}
3. 附加到 Actor
AMyActor::AMyActor()
{
MyComponent = CreateDefaultSubobject<UMyComponent>(TEXT("MyComponent"));
RootComponent = MyComponent;
}
📚 常见子类与用途
类 | 用途 |
---|---|
UPrimitiveComponent |
带渲染和碰撞的组件基类 |
UStaticMeshComponent |
静态网格渲染和碰撞 |
USkeletalMeshComponent |
骨骼网格动画渲染 |
UAudioComponent |
播放声音和音效 |
UCameraComponent |
摄像机功能 |
ULightComponent |
灯光功能 |
USceneComponent |
提供位置、旋转、缩放变换支持的基础组件 |
📦 小结
- UActorComponent = Actor 的功能模块化基类
- ✅ 不能单独出现在世界中,需要附加到 Actor
- ✅ 提供生命周期回调、Tick、网络同步
- ✅ 可复用、可扩展、可序列化
- ✅ 是实现组合式 Actor 架构的核心
更多推荐
所有评论(0)