GetOverlappingComponents()

在这一篇文章中,我们继续完善 Box 组件。我们获取与之重叠的 Actor,并将它们的名字打印出来。

我们可以通过调用 UPrimitiveComponent::GetOverlappingActors() 函数来实现。该函数会获取当前组件正在 重叠 的所有 Actor 对象。它有多个重载版本,以下是我们这篇文章中会使用到的版本:

  • void UPrimitiveComponent::GetOverlappingActors(
  •     TArray<AActor*>& OutOverlappingActors,
  •     TSubclassOf<AActor> ClassFilter) const;

其中,OutOverlappingActors 参数返回所有与该组件重叠的 Actor;ClassFilter 参数是可选的,指定一个 AActor 的子类作为过滤条件,只返回该类型的重叠对象。

代码清单 1 是逻辑的具体实现,在 Tick 函数中,我们调用 GetOverlappingActors() 函数,然后遍历打印所有重叠对象的名字。

代码清单 1 GetOverlappingActors
  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.         FString ActorName = Actors[i]->GetActorNameOrLabel();
  12.         UE_LOG(LogTemp, Display, TEXT("Overlapping: %s"), *ActorName);
  13.     }
  14. }

运行程序。如图 1 所示,当我们的人物角色拿着雕塑同时进入门的凹槽内部时,控制台中打印了人物角色的 Actor 名字和雕塑的 Actor 名字。

图1 日志打印