为什么我无法创建 TSubclassOf<> 以在 SpawnActor() 函数中使用?

2023-12-26

我正在 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

我很困惑,因为我明确指定了我想要生成的类。如果有人能提供一些见解那就太好了。


TSubclassOf只是一个UClass*。在您的代码中,您永远不会分配它。所以总是LaserClass == nullptr.

为了让 actor 正确生成,您需要指定LaserClass变量到您打算使用的类。例如,如果你想生成一个ALaserTagLaser call LaserClass = ALaserTagLaser::Static_Class()在你之前SpawnActor.

如果您想将 BP 类别分配给LaserClass,然后在虚幻编辑器中进行设置。为此,您需要将其设置为set LaserClass蓝图图中的节点,目标是ALaserTagCharacter,或者通过在子类中选择默认值ALaserTagCharacter在下拉列表的详细信息面板中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我无法创建 TSubclassOf<> 以在 SpawnActor() 函数中使用? 的相关文章

随机推荐