2017-03-06 7 views
1

をキャストします。問題は、C++基本クラスAOnlinePawnから継承するOnlinePawn Blueprintがあることです。プレーヤーが試合に参加するたびに、私はこのBlueprintを作成し、それを常にデータを受け取るアレイにキャストします。UnrealのエンジンC++ SpawnActorは、私がUnrealのエンジン4.15.0にマルチプレイヤーゲームをコーディングすることだし、それはほとんど私がそれの挙動を把握することはできませんコードのおかしく行を除いて働いて

問題は、関数によって返されたAActor *をAOnlinePawn *にキャストしようとすると次のコードが失敗し、nullを返します。実際に生成されたのでキャストの問題です。

キャスト:

playersInstances[i] = Cast<AOnlinePawn>(GetWorld()->SpawnActor(OnlinePlayer->GeneratedClass, &position, &rotator)); 

青写真を参照:

static ConstructorHelpers::FObjectFinder<UBlueprint> OnlinePlayerBP(TEXT("Blueprint'/Game/Blueprints/OnlinePawn.OnlinePawn'")); 
OnlinePlayer = OnlinePlayerBP.Object; 

青写真の説明、親クラスを記述:

The Blueprint description, stating the parent class.

ので、ここでの問題は何でしょうか。とにかくワークフローを改善できますか?回避策がありますか?

答えて

2

あなたのキャストラインが正しくないと思います。 SpawnActorはテンプレート関数ですが、あなたは手動でそのようにキャストするはずがありません。代わりに、使用したいタイプを与えるだけです。このようにそれを試してみてください。

AOnlinePawn* NewActor = GetWorld()->SpawnActor<AOnlinePawn>(GetClass(), &position, &rotator); 

EDIT:

どういたしまして。あなたが実際に望むならあなたのコードで青写真を参照するには、コンストラクタヘルパーまたはクラスファインダを使うことができます。

static ConstructorHelpers::FObjectFinder<UBlueprint> onlineSpawnBP(TEXT("Blueprint'/Game/FirstPersonCPP/Blueprints/OnlineSpawn'")); //replace with the right path to your blueprint in your project 
    if (onlineSpawnBP) 
    { 
     AOnlinePawn* NewActor = GetWorld()->SpawnActor<AOnlinePawn>(GetClass(), &position, &rotator); 
    } 
+0

ドキュメントによれば関数の非テンプレートバージョン]がある(https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Engine/UWorld/SpawnActor/6/ GetClass()は動作しませんので、index.htmlを)それが推奨される方法 – UnholySheep

+0

ちょうど1つのより多くの事がありますあるように見えるので、そこにも例は、テンプレートのバージョンを使用して、この行は、AOnlinePawnクラスのスペースではありません(たとえそれがあったとしても、AOnlinePawn自体を継承するのではなく、AOnlinePawnを継承する青写真を生成したい)。この関数の署名と一致するOnlinePawn青写真クラスへの参照を取得するにはどうすればよいですか?ちなみに@Moumsに感謝! –

+0

@GabrielGarcia私は自分の投稿を編集しました。助けてくれることを願っています。 – Moums

関連する問題