虚幻ARPG:为什么要首先尝试从控制器获取字符

时间:2018-10-06 13:31:10

标签: unreal-engine4 unreal-gameplay-ability-system

Unreal Action RPG Game(虚幻Gameplay Ability System的示例项目)中,在URPGAttributeSet::PostGameplayEffectExecute()中修改了角色(玩家或AI)的健康属性。

在那里,AActor* SourceActor是通过FGameplayAbilityActorInfo::AvatarActor设置的。

SourceActor = Source->AbilityActorInfo->AvatarActor.Get()

此变量用于获取字符 ARPGCharacterBase* SourceCharacter,派生类AActor的源),这是施加伤害所必需的。

现在-获取字符-而不是直接从SourceActor向下转换,代码尝试通过其 controller 预先获取 character ;并且即使失败,它也会直接使用SourceActor

SourceActor = Source->AbilityActorInfo->AvatarActor.Get();
SourceController = Source->AbilityActorInfo->PlayerController.Get();
if (SourceController == nullptr && SourceActor != nullptr)
{
    if (APawn* Pawn = Cast<APawn>(SourceActor))
    {
        SourceController = Pawn->GetController();
    }
}

// Use the controller to find the source pawn
if (SourceController)
{
    SourceCharacter = Cast<ARPGCharacterBase>(SourceController->GetPawn());
}
else
{
    SourceCharacter = Cast<ARPGCharacterBase>(SourceActor);
}

为什么使用控制器绕行?

  1. 是否可以处理弹丸SourceActor的情况?由于弹丸不是ARPGCharacterBase类,因此降落将失败。但是,在生成 projectile 的控制器时,我看不到它的设置位置: SpawnProjectileActor 此外,投射物角色已经知道具有Instigator成员变量的角色
  2. 如果不是,那么首先尝试通过其控制器查找字符而不是仅向下转换SourceActor的好处是什么?

0 个答案:

没有答案