C++ Actor 组件
现在我们想实现一个功能,让一个 Actor 有自定义的移动功能。我们可以在原先的 Actor 里增加逻辑,但这样耦合性太大了,而且我们希望这个移动功能可以复用,任何指定的 Actor 都能使用。
以上需求可以基于 Unreal 的组件功能实现。创建的流程和之前学习的创建 C++ 类相似。
我们在一个 Actor 的细节窗体中,找到带有加号的添加按钮,点击选择其中的 新建C++组件。在弹出的引导界面中,我们选择 Actor 组件,然后填写好组件名称(此处命名为 Mover)之后,点击创建。
创建好组件后,VS 工程项目会自动打开。从代码中可以看到,Actor 组件的生命周期设计和 Actor 类似,都有 BeginPlay()。Actor 中的 Tick(),在组件中变成了 TickComponent()。如代码清单 1 所示,我们在组件的 TickComponent 中增加打印信息,用于流程测试。
- // Called when the game starts
- void UMover::BeginPlay()
- {
- Super::BeginPlay();
- // ...
- }
- // Called every frame
- void UMover::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
- {
- Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
- UE_LOG(LogTemp, Display, TEXT("UMover::TickComponent"))
- }
接着我们回到 Unreal 编辑器,添加 SM_Dungeon_Wall_Decorative_D 素材。这是一面墙,我们希望它具有移动功能。同样点击细节窗体中的添加按钮,搜索找到创建的 Mover 组件,点击添加。如图 1 所示,在添加好组件之后,细节窗体中也显示了 Mover 组件。

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