Unreal – So vermeiden Sie hartcodierte Pfade beim Erstellen eines Objekts in CPP

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Unreal – So vermeiden Sie hartcodierte Pfade beim Erstellen eines Objekts in CPP

by Guest » 17 Jan 2025, 06:49

Der folgende Code hat mich ein wenig gestört:

Code: Select all

ARollingBall::ARollingBall()
{
UStaticMeshComponent* sphere;
sphere = CreateDefaultSubobject(TEXT("ball"));
static ConstructorHelpers::FObjectFinder SphereVisualAsset(TEXT("/Engine/BasicShapes/Sphere"));
sphere->SetupAttachment(RootComponent);
if (SphereVisualAsset.Succeeded()) {
sphere->SetStaticMesh(SphereVisualAsset.Object);
}
}
Nämlich, dass ich einen Pfad hart codiere. Was wäre, wenn ich mich entschließen würde, später ein anderes Objekt zu verwenden? Stellen Sie sich vor, ich hätte mehrere Bauern, die alle fest programmiert sind, um diesen Vermögenswert zu nutzen. In cpp gibt es keine einfache Möglichkeit, alle diese Referenzen zu ändern. Ich hatte die gute Idee, meine Netzauswahl anhand von Blaupausen zu prüfen, um die Referenzverarbeitung von Unreal wie folgt zu nutzen:

Code: Select all

UPROPERTY(EditDefaultsOnly, Category = "References")
UStaticMesh * m_staticMesh;
Das Folgende erstellt jedoch kein Netz, wenn ich von dieser Klasse mit einem Blueprint erbe und das Standardnetz (m_staticMesh) festlege:

Code: Select all

ARollingBall::ARollingBall()
{
UStaticMeshComponent* sphere;
sphere = CreateDefaultSubobject(TEXT("ball"));
sphere->SetupAttachment(RootComponent);
if (m_staticMesh) {
sphere->SetStaticMesh(m_staticMesh);
}
}
Ich verwende beide Kompilierungsmethoden für Unreal 4.21.2, aber letztere funktioniert nicht.
Irgendwelche Vorschläge, wie die obige Funktion erstellt werden kann richtig geschätzt werden. Wenn Sie einen besseren Weg kennen, um Hardcodierungspfade zu vermeiden, lassen Sie es mich bitte wissen.

Top