gpt4 book ai didi

c++ - Unreal - 在 cpp 中创建对象时如何避免硬编码路径

转载 作者:行者123 更新时间:2023-12-04 08:00:21 24 4
gpt4 key购买 nike

下面的代码一直困扰着我:

ARollingBall::ARollingBall()
{
UStaticMeshComponent* sphere;
sphere = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("ball"));
static ConstructorHelpers::FObjectFinder<UStaticMesh> SphereVisualAsset(TEXT("/Engine/BasicShapes/Sphere"));
sphere->SetupAttachment(RootComponent);
if (SphereVisualAsset.Succeeded()) {
sphere->SetStaticMesh(SphereVisualAsset.Object);
}
}

也就是说,我正在对路径进行硬编码。如果我决定以后要使用不同的对象怎么办?想象一下,我有多个 pawn 都被硬编码为使用此 Assets 。在 cpp 中,没有简单的方法来更改所有这些引用。我有一个绝妙的主意,就是将我的网格选择暴露给蓝图,以像这样利用 Unreal 的引用处理:

UPROPERTY(EditDefaultsOnly, Category = "References")
UStaticMesh * m_staticMesh;

但是,当我使用蓝图从此类继承并设置默认网格 (m_staticMesh) 时,以下内容不会创建网格:

ARollingBall::ARollingBall()
{
UStaticMeshComponent* sphere;
sphere = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("ball"));
sphere->SetupAttachment(RootComponent);
if (m_staticMesh) {
sphere->SetStaticMesh(m_staticMesh);
}
}

我正在使用 Unreal 4.21.2 两种方法编译,但后者无法工作。

如有任何关于如何正确实现上述功能的建议,我们将不胜感激。如果您知道避免硬编码路径的更好方法,请告诉我。

最佳答案

通常根本不推荐使用静态构造函数助手。

组成组件的 Actor 并利用 Unreals 反射系统将这些组件及其属性公开给编辑器以在蓝图中进行修改是理想的模式。

/* Weapon Mesh. */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Weapons")
UStaticMeshComponent* Mesh;

使用 VisibleAnywhere 标记在构造期间创建的组件将导致它在创建该 Actor 的子蓝图后出现在 Actors 组件 View 的组件层次结构中。

Component Hierarchy

然后您将可以修改其属性,例如 StaticMesh。

在使用 UPROPERTY 以及所有函数和类说明符及其元数据时,了解什么是有效的属性说明符很有用。

Property Specifiers

关于c++ - Unreal - 在 cpp 中创建对象时如何避免硬编码路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66508931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com