如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误



我正在为我的第三人称射击游戏项目创建一个武器系统,但我在输入枪支时遇到了一些问题。

通过我设置课程的方式,我有 ACharacter 父级玩家类和 APawn 父级武器类。现在,我正在尝试为玩家持有的武器设置一些关键绑定(射击、替代射击、重新装填(,但我遇到了一个错误。我认为我的代码几乎就在那里,我只是在需要从哪个控制器获取输入时遇到了问题。

我的玩家职业只是一个基本的第三人称角色职业。我无法在玩家类中创建武器的实例作为组件,所以我使用了 SpawnActor<>((,并在游戏开始时将武器实例附加到玩家实例。我创建了一个名为 ALTWeapon 的父类,它父级我所有的武器类,我有一个名为 PlayerWeaponAtSpawnClass 的子类变量,它包含我想在玩家上生成的 ALTWeapon 子类。我在这里为播放器包含我的代码,并且省略了一些不需要包含在这篇文章中的代码。

// Called when the game starts or when spawned
void ALTPlayer::BeginPlay()
{
Super::BeginPlay();
UWorld* World = GetWorld();
if (World && PlayerWeaponAtSpawnClass != NULL)
{
// Creating default weapon
FAttachmentTransformRules* TransformRule;
ALTWeapon* Weapon = World->SpawnActor<ALTWeapon>(PlayerWeaponAtSpawnClass);
Weapon->AttachToComponent(GetMesh(), TransformRule->KeepRelativeTransform);
// Setting current held weapon
CurrentWeaponClass = PlayerWeaponAtSpawnClass;
}
}

进入生成武器的代码文件,我已经绑定了射击并重新加载输入事件,就像在玩家类中一样。我将在此处包含该代码。

void ALaserGun::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
// Binding input events
PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &ALaserGun::OnFire);
PlayerInputComponent->BindAction("Reload", IE_Pressed, this, &ALaserGun::OnReload);
}
void ALaserGun::OnFire()
{
UE_LOG(LogTemp, Warning, TEXT("Gun fired"));
}
void ALaserGun::OnReload()
{
UE_LOG(LogTemp, Warning, TEXT("Gun reloaded"));
}

现在,当我编译然后点击播放时,我在虚幻引擎的输出日志中收到此错误消息。

LogPawn:错误:只能在其控制器的Pawn上指定启用输入

根据我自己的研究,我试图通过施法等方式让拿着枪的玩家的控制者,但我在那里没有任何运气。我研究了 EnableInput 函数的定义,发现了一些有用的信息,但我不知道如何处理它。我将在此处包含函数定义。

void APawn::EnableInput(class APlayerController* PlayerController)
{
if (PlayerController == Controller || PlayerController == nullptr)
{
bInputEnabled = true;
}
else
{
UE_LOG(LogPawn, Error, TEXT("EnableInput can only be specified on a Pawn for its Controller"));
}
}

如果有人对如何解决此问题有一些见解,我将不胜感激。谢谢!

它只是发生在我身上。我以这种方式修复了它:

播放器控制器类中:

AMyPlayerController::AMyPlayerController()
{
AutoReceiveInput = EAutoReceiveInput::Player0;
}

角色类中:

AMyThirdPersonCharacter::AMyThirdPersonCharacter()
{
AutoPossessPlayer = EAutoReceiveInput::Player0;
}

我有 ACharacter 家长玩家类和 APawn 父级武器类。

我可能是错的,但我相信你的武器类应该从 AActor 而不是 APawn 继承,因为它已经由 ACharacter 控制(ACharacter 继承自 APawn(。

相关内容

最新更新