🛠️ Unreal Engine - UActorComponent


🏷 定义

  • UActorComponentActor 的组件基类
  • 不能直接出现在世界中,而是附加到 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、移动、动画更新
  • 网络复制支持
    • 可通过 bReplicatesbReplicateMovement 在客户端/服务器同步状态
  • 属性可编辑与序列化
    • 使用 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 架构的核心

Logo

惟楚有才,于斯为盛。欢迎来到长沙!!! 茶颜悦色、臭豆腐、CSDN和你一个都不能少~

更多推荐