为什么我不能创建要在SpawnActor()函数中使用的TSubclassOf <>?

问题描述 投票:1回答:1

[我正在用UE4制作激光标签游戏,使用TSubclassOf <>时遇到很多困难。

首先,我在这样的LaserTagCharacter.h文件中声明LaserClass。我还创建了一个名为OnFire()的函数,当播放器使用“ Fire”动作绑定时会调用该函数。

#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "LaserTagCharacter.generated.h"

UCLASS()
class LASERTAG_API ALaserTagCharacter : public ACharacter
{
    GENERATED_BODY()

public:
    // Sets default values
    ALaserTagCharacter();

    UPROPERTY(VisibleAnywhere, Category = "Laser")
    TSubclassOf<class ALaserTagLaser> LaserClass;

protected:
    // Called when player fires a laser beam
    void OnFire();
};

现在,我想实现我的OnFire()函数,以使用SpawnActor <>函数从我的ALaserTagLaser类创建激光器。我正在这样做。

#include "LaserTagCharacter.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
#include "Components/InputComponent.h"
#include "LaserTagLaser.h"
#include "Engine/World.h"

// Sets default values
ALaserTagCharacter::ALaserTagCharacter()
{

}

// Called when player uses fire action binding
void ALaserTagCharacter::OnFire()
{
    UWorld* World = GetWorld();
    FVector SpawnLocation = GetActorLocation();
    FRotator SpawnRotation = GetControlRotation();
    FActorSpawnParameters SpawnParameters;
    SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;

    World->SpawnActor<ALaserTagLaser>(LaserClass, GetActorLocation(), GetActorRotation(), SpawnParameters);
}

所有这些代码都已编译,但是当我单击播放时,打开输出日志,并使用我的“ Fire”操作绑定,会出现此错误。

LogSpawn: Warning: SpawnActor failed because no class was specified

我很困惑,因为我清楚地指定了我想生成的类。如果有人可以提供一些很棒的见解。

c++ unreal-engine4
1个回答
0
投票

您需要为LaserClass分配一个有效的类或子类。在您的BP中,您可以在详细信息面板中进行设置。如果您不想像在BP中那样使用它,并且始终希望生成ALaserTagLaser,则可以给SpawnActor一个类引用。

World->SpawnActor<ALaserTagLaser>(ALaserTagLaser::StaticClass(), GetActorLocation(), GetActorRotation(), SpawnParameters);
© www.soinside.com 2019 - 2024. All rights reserved.