妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

ConstructionScriptから別のアクターをスポーン出来ない

妹「……というわけで大きさを調べようとしたんだけど、ConstructionScriptからActorがスポーン出来なくて、スポーン出来ないとGetActorBoundsが使えないから大きさが測れないよ」

「そういえばそうだったかも」

togetter.com

「ということで、ConstructioScriptから別のアクターをSpawn出来ない」

妹「なんで出来ないの?」

「基本的にアクターのConstructionScriptって、それ自身についてのこと以外は書かない方がいい物なんだよ」

妹「それ自身というと……」

「例えば白いアクターだから白いマテリアルを設定するのはいいけど、他のアクターが白だから赤にするとかはよろしくない。Constructionはエディタに表示してるだけでも呼び出されるし、呼び出しのタイミングもまちまち。想定外のアクシデントの原因になる。他との関連性が必要な物は実際に動き出した後のBeginPlayあたりでやればいいと。それにさっきのまとめ記事にもあったけど、SpawnしてConstructionScriptを実行してるのに、そこでまたSpawnすると、ConstructionScriptの無限ループがありえる」

妹「でもChildActorコンポーネントは作れるんだから、無限ループは起こせるのでは? ChildにChildを作って孫たちを増やしていけば……」

「それがChildActorのConstructionScriptはちゃんと機能してないみたいで、上手く孫アクターが作れなかった。これが無限ループ対策かもしれない。他にもGetPlayer系のノードとかも使えない」

妹「そうすると大きさを調べる用のアクターはどうやって用意すればいいんだろう? やっぱりChildActorコンポーネント?」

f:id:una_unagi:20160613224627p:plain
f:id:una_unagi:20160613225042p:plain

「いったんChildActorとして作って、そこからアクターの情報を取り出して、GetActorBoundsするっていう方法なら出来そうだった」