C++ “如何修复”;EnableInput只能在其控制器的典当上指定;输出日志中出现错误

C++ “如何修复”;EnableInput只能在其控制器的典当上指定;输出日志中出现错误,c++,unreal-engine4,C++,Unreal Engine4,我正在为我的第三人称射击项目创建一个武器系统,我在获取枪的输入时遇到了一些问题 按照我设置类的方式,我有一个角色为父的玩家类和一个角色为父的武器类。现在,我正在尝试为玩家持有的武器设置一些键绑定(开火、alt开火、重新加载),但我遇到了一个错误。我想我的代码就快到了,我只是遇到了需要从哪个控制器获取输入的问题 我的玩家类只是一个基本的第三人称角色类。我无法在玩家类中创建武器实例作为组件,因此我使用了SpawnActor()并在游戏开始时将武器实例附加到玩家实例。我已经创建了一个名为Alt武器的父

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

按照我设置类的方式,我有一个角色为父的玩家类和一个角色为父的武器类。现在,我正在尝试为玩家持有的武器设置一些键绑定(开火、alt开火、重新加载),但我遇到了一个错误。我想我的代码就快到了,我只是遇到了需要从哪个控制器获取输入的问题

我的玩家类只是一个基本的第三人称角色类。我无法在玩家类中创建武器实例作为组件,因此我使用了SpawnActor()并在游戏开始时将武器实例附加到玩家实例。我已经创建了一个名为Alt武器的父类,它是我所有武器类的父类,我还有一个名为PlayerWeaponAtSpawnClass的子类变量,它保存了我想在玩家身上生成的Alt武器子类。我在这里包含了我的玩家代码,我省略了一些不需要包含在本文中的代码

// 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;
    }
}
现在,当我编译并点击play时,我在输出日志中得到了这个错误消息

LogPawn:错误:只能在控制器的Pawn上指定EnableInput

根据我自己的研究,我试着让持枪玩家的控制器通过施放等方式来控制,但我没有任何运气。我研究了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;
}
在您的角色类中:

AMyPlayerController::AMyPlayerController()
{
    AutoReceiveInput = EAutoReceiveInput::Player0;
}
AMyThirdPersonCharacter::AMyThirdPersonCharacter()
{
    AutoPossessPlayer = EAutoReceiveInput::Player0;
}
我有一个角色出身的玩家职业和一个角色出身的武器职业

我可能错了,但我相信你的武器类应该从AActor而不是Apown继承,因为它已经被ACharacter控制(ACharacter从Apown继承)