Unreal
- 🛠️ Unreal Engine - UActorComponent
- 🏷 定义
- 🧩 类继承关系
- ⚙️ 关键特性
- 📝 使用方法
- 1. 创建组件
- 2. 生命周期回调
- 3. 附加到 Actor
- 📚 常见子类与用途
- 📦 小结
🛠️ 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;
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 架构的核心