レベルブループリントを参照する方法を考える
妹「レベルブループリントからアクターを参照出来るけど、アクターからレベルブループリントを参照するって出来ないのかな? レベルブループリントにあるカスタムイベントとか使いたいんだけど」
「参照してどうこうするのは難しそう。レベルブループリントの中でSelfノードを使えばレベル自体のデータは取得出来るけど、その型の変数を別のアクターに作れない。キャストして保存しても、キャストしなおして元に戻せない」
妹「GetGameModeみたいかんじで、GetLevelBluePrintみたいなノードはないの?」
「GetCurrentLevelNameで名前はわかるけど、それ以外は無理。C++ならもっと細かく色々出来そうな気がするけど。名前もちょっとまえまではブループリントから取得できなかったみたいだし、今度方法が出来るかもしれない」
妹「名前わからなかったらすごく困るのでは」
「各レベルブループリントからGameModeの中の変数とかに名前を保存すれば、名前を調べること自体は出来る。ただレベルごとに設定したり、名前変わった時に自分で書きなおしたりしなきゃいけないけど」
妹「ひょっとしてカスタムイベントの呼び出しにもなんかそういう裏技ある?」
「裏技というか一応方法はあるよ。Tickイベントで、"あるフラグがオンの時にカスタムイベントを呼び出して、その後フラグをオフにする"というブループリントを組めば、結果的にカスタムイベントを呼び出すのと同じことが出来る。ただTickだからその時すぐじゃなくて、若干遅れはあるけど」
妹「そのフラグをオンにする時にレベルブループリントにアクセス出来ないから駄目なのでは?」
「もちろんフラグ用の変数はどっか別の場所に置く。やっぱりGameModeが自然かな。そんなことするぐらいならイベント自体をGameModeに置いた方が早そうな気もするけど」
妹「GameModeはまだちょっとよくわからないんだよ」
「他のアクターにイベントを作ってもいいんだけど、レベル上のアクターをほいほい参照出来ないのは一緒だからね。レベル自体が型として扱えるようにアップデートされないとむずかしそう」