C++ Actor 组件

现在我们想实现一个功能,让一个 Actor 有自定义的移动功能。我们可以在原先的 Actor 里增加逻辑,但这样耦合性太大了,而且我们希望这个移动功能可以复用,任何指定的 Actor 都能使用。

以上需求可以基于 Unreal 的组件功能实现。创建的流程和之前学习的创建 C++ 类相似。

我们在一个 Actor 的细节窗体中,找到带有加号的添加按钮,点击选择其中的 新建C++组件。在弹出的引导界面中,我们选择 Actor 组件,然后填写好组件名称(此处命名为 Mover)之后,点击创建。

创建好组件后,VS 工程项目会自动打开。从代码中可以看到,Actor 组件的生命周期设计和 Actor 类似,都有 BeginPlay()。Actor 中的 Tick(),在组件中变成了 TickComponent()。如代码清单 1 所示,我们在组件的 TickComponent 中增加打印信息,用于流程测试。

代码清单 1 测试
  1. // Called when the game starts
  2. void UMover::BeginPlay()
  3. {
  4.     Super::BeginPlay();
  5.  
  6.     // ...
  7.    
  8. }
  9.  
  10. // Called every frame
  11. void UMover::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
  12. {
  13.     Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
  14.  
  15.     UE_LOG(LogTemp, Display, TEXT("UMover::TickComponent"))
  16. }

接着我们回到 Unreal 编辑器,添加 SM_Dungeon_Wall_Decorative_D 素材。这是一面墙,我们希望它具有移动功能。同样点击细节窗体中的添加按钮,搜索找到创建的 Mover 组件,点击添加。如图 1 所示,在添加好组件之后,细节窗体中也显示了 Mover 组件。

图1 组件

最后我们运行程序,并查看控制台输出。可以看到在控制台中,的确打印了我们在组件中添加的日志。