标签

在 Unreal Engine 中 Tag 是一种轻量级的标签系统,用于给对象打标记,类似于“关键字”。

在这篇文章中,我们把标签用于触发器过滤。

如图 1 所示,我们选中雕塑 Actor,然后在细节窗体中,找到 标签 属性。可以看到每个 Actor 可以拥有多个标签。此处这个雕塑用于解锁第一道门,所以我们为其添加 “Unlock1” 标签。

图1 标签

在 C++ 侧,我们可以使用 AActor::ActorHasTag() 函数,判断当前 Actor 是否拥有指定的标签。

  • bool AActor::ActorHasTag(FName Tag) const;

我们回到 Box 组件中,修改重叠检测的逻辑。如代码清单 1 所示,现在只有重叠的 Actor 下有指定标签,才会触发日志打印。

AcceptableActorTag 变量是使用 UPROPERTY() 宏、可以在编辑器中指定的变量。目的是为了此 Box 组件具有复用性,因为后续我们会将其附加到别的 Actor 上,并使用别的 Actor 解锁。

代码清单 1 过滤
  1. // Called every frame
  2. void UTriggerComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
  3. {
  4.     Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
  5.  
  6.     TArray<AActor*> Actors;
  7.     GetOverlappingActors(Actors);
  8.  
  9.     for (int32 i = 0; i < Actors.Num(); i++)
  10.     {
  11.         if (Actors[i]->ActorHasTag(AcceptableActorTag))
  12.             UE_LOG(LogTemp, Display, TEXT("Unlocking"));
  13.     }
  14. }