BeginPlayイベントは、同じクラスのアクターをたくさん置くと置いた数だけ起きる
妹「Randomって、どれか1個の数字が出るだけだよね? たくさんの数字が出てくるわけじゃないよね?」
「たくさんの数字はでてこないです」
妹「ランダムでどこか1箇所だけ変化させたいんだけど、ランダムにすると複数箇所変わっちゃうんだよ。0とか1とか入れればそこだけなんだけど。ひょっとしてRandomのバグ?」
「その症状を聞く限りだと、同じプログラムを複数回実行してて、同じ数字だと同じ場所が変わるから気付かなかっただけってパターンだと思うんだけど」
妹「そうかもなあとは思ったんだけど、でもブレークポイント付けても1回しか通ってないんだよ。やっぱりRandomのバグなんじゃ……」
「とりあえず困った時のPrintString。Randomから返ってきた数字を出力してみる」
妹「1回だけはずなのになんかいっぱい出てくる」
「数字を固定しても同じだね。沢山出てくる。やっぱり同じタイミングで何回も実行されてる感じ。ログを見ると22回……あれ? ひょっとしてこのブループリント、画面上に置いてある三角形のやつだったりする?」
妹「そりゃそうだよ。だって三角形を変化させるんだから、三角形のとこに書くでしょ」
「いやたぶんそれが原因で、22回イベントが実行されちゃってるんだよ。レベル上に三角形が22個あるから。もう1個増やすと23回になるはず」
妹「えー? だってこうやってイベントをバインドしてるから、この1個だけになると思うんだけど」
「そのBeginPlayをそれぞれの三角でやってるから、22個のイベントがバインドされた状態になってるんだよ」
妹「じゃあブレークポイントに1回しか引っかからなかったのは?」
「それと同じことが前にもあったじゃん。同じ種類のアクターがたくさんあっても、デバッグの時にかかるのは1個だけだって」
妹「そういえばそんなこともあったような気がする……じゃあこれどうしたらいいの? どれか1個の三角だけにバインドすればいい?」
「このばあい三角のやつにはバインドしない方がいいと思う。レベルブループリントか、もしくは全然関係ないアクターでもいいんだけど、とにかく同じ種類のが1個しか存在してないやつが良い。GetAllActorsOfClassを使ってて、それ以外は作業用の変数しかないから、どこに書いても同じ様に動くはずだよ」
妹「そうかあ、そういうものなのかあ。またしても無駄な時間を……」