妹でもわかるUnrealEngine4

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

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

BeginPlayイベントは、同じクラスのアクターをたくさん置くと置いた数だけ起きる

妹「Randomって、どれか1個の数字が出るだけだよね? たくさんの数字が出てくるわけじゃないよね?」

「たくさんの数字はでてこないです」

妹「ランダムでどこか1箇所だけ変化させたいんだけど、ランダムにすると複数箇所変わっちゃうんだよ。0とか1とか入れればそこだけなんだけど。ひょっとしてRandomのバグ?」

「その症状を聞く限りだと、同じプログラムを複数回実行してて、同じ数字だと同じ場所が変わるから気付かなかっただけってパターンだと思うんだけど」

妹「そうかもなあとは思ったんだけど、でもブレークポイント付けても1回しか通ってないんだよ。やっぱりRandomのバグなんじゃ……」

「とりあえず困った時のPrintString。Randomから返ってきた数字を出力してみる」

f:id:una_unagi:20150918180024p:plain

妹「1回だけはずなのになんかいっぱい出てくる」

「数字を固定しても同じだね。沢山出てくる。やっぱり同じタイミングで何回も実行されてる感じ。ログを見ると22回……あれ? ひょっとしてこのブループリント、画面上に置いてある三角形のやつだったりする?」

妹「そりゃそうだよ。だって三角形を変化させるんだから、三角形のとこに書くでしょ」

「いやたぶんそれが原因で、22回イベントが実行されちゃってるんだよ。レベル上に三角形が22個あるから。もう1個増やすと23回になるはず」

f:id:una_unagi:20150918215629p:plain

妹「えー? だってこうやってイベントをバインドしてるから、この1個だけになると思うんだけど」

「そのBeginPlayをそれぞれの三角でやってるから、22個のイベントがバインドされた状態になってるんだよ」

妹「じゃあブレークポイントに1回しか引っかからなかったのは?」

「それと同じことが前にもあったじゃん。同じ種類のアクターがたくさんあっても、デバッグの時にかかるのは1個だけだって」

妹「そういえばそんなこともあったような気がする……じゃあこれどうしたらいいの? どれか1個の三角だけにバインドすればいい?」

「このばあい三角のやつにはバインドしない方がいいと思う。レベルブループリントか、もしくは全然関係ないアクターでもいいんだけど、とにかく同じ種類のが1個しか存在してないやつが良い。GetAllActorsOfClassを使ってて、それ以外は作業用の変数しかないから、どこに書いても同じ様に動くはずだよ」

妹「そうかあ、そういうものなのかあ。またしても無駄な時間を……」