sinocof
(sinocof)
June 1, 2014, 7:39am
1
ClassBlueprintを2つ作成し、異なるレベル間で変数を受け取りたいと考えています。
Direct Blueprint Communicationsを使った場合、
以下の方法であれば同じレベル間で変数を受け取ることができるのは確認できました。
しかし、異なるレベルに配置した場合、コンテキストメニューからBPを参照することができなくなるため、変数を受け取ることができません。
なので、Castで受け取る方法で試しているのですが、正しくつなぐことができていないためか変数を取得できません。
(実行もCast To BP_Base01で止まってしまいます。)
赤い枠で囲った箇所はどのように組んだら正しく変数を受け取ることができるか教えていただけますか?
異なるレベルに置かれたActorを参照する一番簡単な方法として、全レベルの全ActorからTagで検索してActorの参照を取得するという方法があります。
ちょうど近いうちに書こうと思っていた記事だったので、”Get All Actors of Class”と”Tag”を使う方法を下記のブログにまとめました。本題は途中からなので、ぜひ見ていただけると~!
sinocof
(sinocof)
June 4, 2014, 1:05pm
3
回答有難うございます。
試してみたところうまく取得することが出来ました!
一つ気になるのは全Actor Classから検索をかけているので処理が重くなっているのでは…?
というところなのですが、レベルに配置している数自体があまり多くない場合はそれほど問題にはならないのでしょうか?
それとも、ブログに書かれているように要素数のチェックは必須で行った方がよいのでしょうか?
出来たようでよかったです!
処理の重さに関しては、毎フレーム行うなどの頻繁に行う処理であれば、確かに少し気になる処理です。その場合は初回に1回だけ全Actorから検索をかけ、見つけたActorを変数に格納してあげれば解決できます。
また、検索結果の要素数チェックは処理の重さとは関係ありません。ブログ内で「全レベルからクラスを指定して参照を取得する」と書かれた直下のBlueprintだと、GetAllActorsOfClassの結果、一つも無かった場合のエラー処理がされていないため、要素数が1つ以上あることを確認した方が良い、という意味の文言でした。
その下のタグを使う方法では、ForEachを使っているので要素数チェックは必要ありません。