以下のようなことをしたいです。
①データテーブルからSpawn対象のクラスを取得して変数に格納。
②SpawnActorFromClassで①のクラスを指定し、クラスを生成する。
③生成の際には「スポーン時に公開」に設定されている変数に値を渡したい。
しかし、下の画像のようにクラスの変数ノードを繋ぐと
「スポーン時に公開」のノードが消えてしまって初期値を渡すことができません。
※これがUnrealEngineの仕様だとは理解しています
クラスを直接指定するとクラスの公開変数「SkillStatus」を設定できますが、
クラスノードを繋ぐと「SkillStatus」渡せなくなってしまいます。
①~③のような引数を渡して動的にクラスを生成することがしたい場合、
どのような実装方法があるでしょうか?SpawnActorFromClass以外の方法でも大丈夫です。
可能であればC++を使用しない方法を教えて頂きたいです。
解決しました。
画像でいうと公開変数に渡しているクラスの変数型をActorではなくBP_MyClasssする必要がありました。
回答して頂いた方々ありがとうございました。
T_Sumisaki
(T_Sumisaki)
2
ClassReferenceの対象クラスを適切に指定してください
「Actor」にはSpawn時公開に設定されているユーザー変数がないためです
任意に作成したクラスであれば、ClassReferenceで接続してもSpawn時公開された変数が現れます
kogetasY
(kogetasY)
3
Blueprint Interfaceを使用する方法はどうでしょうか。
自分が質問側の投稿で恐縮ですが、下記投稿の3枚目の画像のようにSpawn Actor from ClassノードのReturnValueからインターフェースで値を送る方法です。
↓3枚目の画像
今回だと、Load Class Asset BlockingノードとCast To Actor Classノードを削除して、①に変更し、Row NumをSkill Statusに変更すればいいと思います。
T_Sumisakiさん、回答ありがとうございます。
T_Sumisakiさんの画像の通りにやっても何故か上手くいきません。
ClassReferenceでノードを繋ぐと公開された変数が消えてしまいます。
v4.27.2、v.5.0.3、v5.1.0の全てのversionで試しましたが同じ結果でした。
何故なのか😭
kogetasYさん。ありがとうございます。
教えて頂きたいた方法+αでなんとかできそうです。
「初期値を設定してSpawn⇒BeginPlayで初期化処理」ということをしたいのですが、
画像の方法だと「Spawn⇒BeginPlayで初期化処理⇒BP Interfaceで初期値設定」の順番で処理されてしまっていました。
そのため、Spawn対象クラスのBeginPlayの先頭にDelayUntilNextTickを入れることで上手くいきました。
無理やりかも知れないですが、なんとかできそうです。ありがとうございました。
でもT_Sumisakiさんは上手く動作しているようなのでそこだけは気になります…
T_Sumisaki
(T_Sumisaki)
6
ClassReferenceでノードを繋ぐと公開された変数が消えてしまいます。
画像から分かる通り「Actor」の「ClassReference」だからです
「Actor」はEngine側のクラスであるため、設定したい変数は実装されていませんよね?
なのでClassReferenceの「変数の型」は、自分が作ったクラスである必要があります
T_Sumisakisさん
なるほど、理解しました!!
クラスの変数の型をActorではなくBP_MyClasssにする必要があるということですね。
言われてみればその通りですね。ありがとうございます!!