如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
How to fix "EnableInput can only be specified on a Pawn for its Controller" error in output log
我正在为我的第三人称射击游戏项目创建一个武器系统,但我在输入枪支时遇到了一些问题。
通过我设置课程的方式,我有 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(。
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 循环挂起迭代的 std::擦除 on std::list
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- std::bind on statd::array 的运算符 []
- 您将如何连接"on the fly"文本+整数并将其传递给函数?
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- C++ library with Tensorflow on Android
- SFML 交叉编译 for Windows on Linux.
- How to recover system gcc compiler on centos 6
- Cmake with Flex/Bison on windows
- 按原样保存用户输入 - Ruby on Rails
- OpenAL C++ on Linux
- Boost::process on Windows - with MinGW?
- thread_local "storage class specified"
- CMake on FindOpenGL.cmake 中的错误,当使用导入的目标 OpenGL::GLU?
- Utilization of atomic_flag on C++
- anaconda cythonize C++ on windows 10