UActorComponent
🛠️ 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. 创建组件
1
2
3
4
5
6
7
| // 头文件
UPROPERTY(VisibleAnywhere)
UStaticMeshComponent* MeshComponent;
// CPP构造函数
MeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComponent"));
RootComponent = MeshComponent;
|
2. 生命周期回调
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| 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
1
2
3
4
5
| AMyActor::AMyActor()
{
MyComponent = CreateDefaultSubobject<UMyComponent>(TEXT("MyComponent"));
RootComponent = MyComponent;
}
|
📚 常见子类与用途
| 类 | 用途 |
|---|
UPrimitiveComponent | 带渲染和碰撞的组件基类 |
UStaticMeshComponent | 静态网格渲染和碰撞 |
USkeletalMeshComponent | 骨骼网格动画渲染 |
UAudioComponent | 播放声音和音效 |
UCameraComponent | 摄像机功能 |
ULightComponent | 灯光功能 |
USceneComponent | 提供位置、旋转、缩放变换支持的基础组件 |
📦 小结
- UActorComponent = Actor 的功能模块化基类
- ✅ 不能单独出现在世界中,需要附加到 Actor
- ✅ 提供生命周期回调、Tick、网络同步
- ✅ 可复用、可扩展、可序列化
- ✅ 是实现组合式 Actor 架构的核心