为什么委托构造函数不能按预期 UE4 工作
Why delegated constructor doesn't work as expected UE4
我在为游戏中的几种武器(例如 AK 47、M11 等)加载资产时遇到问题,这里的问题是我创建了一个 c++ class 来完成这项工作将
header
UCLASS()
AWeapon_core : public AActor
{
private:
USkeletalMeshComponent* m_skeletal_mesh;
public:
AWeapon_core(FString);
protected:
const FString mk_default_path;
};
cpp
AWeapon_core::AWeapon_core(FString _path)
{
m_skeletal_mesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Weapon_mesh"));
static ConstructorHelpers::FObjectFinder<USkeletalMesh> WEAPON_MESH(*(mk_weapon_mesh_path + _path));
if (WEAPON_MESH.Succeeded())
m_skeletal_mesh->SetSkeletalMesh(WEAPON_MESH.Object);
}
还有武器,例如 AK-47
header
class AAK47 : public AWeapon_core
{
public:
AAK47();
}
cpp
AAK47::AAK47() : AWeapon_core("The path of the AK47 mesh file")
{
}
对所有其他武器都做了同样的操作,但它使用相同的网格创建,这里可能有什么问题?
你知道你在这里做了什么吗?
static ConstructorHelpers::FObjectFinder<USkeletalMesh>
WEAPON_MESH(*(mk_weapon_mesh_path + _path));
这是一个 STATIC LOCAL 变量。它被初始化一次。只有一次,因为 AWeapon_core::AWeapon_core()
函数只有一个实例。所有对该构造函数的后续调用都将使用已经初始化的值。
我在为游戏中的几种武器(例如 AK 47、M11 等)加载资产时遇到问题,这里的问题是我创建了一个 c++ class 来完成这项工作将
header
UCLASS()
AWeapon_core : public AActor
{
private:
USkeletalMeshComponent* m_skeletal_mesh;
public:
AWeapon_core(FString);
protected:
const FString mk_default_path;
};
cpp
AWeapon_core::AWeapon_core(FString _path)
{
m_skeletal_mesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Weapon_mesh"));
static ConstructorHelpers::FObjectFinder<USkeletalMesh> WEAPON_MESH(*(mk_weapon_mesh_path + _path));
if (WEAPON_MESH.Succeeded())
m_skeletal_mesh->SetSkeletalMesh(WEAPON_MESH.Object);
}
还有武器,例如 AK-47
header
class AAK47 : public AWeapon_core
{
public:
AAK47();
}
cpp
AAK47::AAK47() : AWeapon_core("The path of the AK47 mesh file")
{
}
对所有其他武器都做了同样的操作,但它使用相同的网格创建,这里可能有什么问题?
你知道你在这里做了什么吗?
static ConstructorHelpers::FObjectFinder<USkeletalMesh>
WEAPON_MESH(*(mk_weapon_mesh_path + _path));
这是一个 STATIC LOCAL 变量。它被初始化一次。只有一次,因为 AWeapon_core::AWeapon_core()
函数只有一个实例。所有对该构造函数的后续调用都将使用已经初始化的值。