読者です 読者をやめる 読者になる 読者になる

妹でもわかるUnrealEngine4

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

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

配列の中からランダムで1つ取り出す

ブループリント アルゴリズム UE4.11

「昨日の記事で出てきた、敵配列の中からランダムで1つ選ぶというやつ、あれって他の方法が速いんじゃないかと気になったので、今日はその動作速度を比較する実験をやった」

SHUFFLEノードを使うパターン
f:id:una_unagi:20160510233626p:plain

RandomIntegerInRangeノードを使うパターン
f:id:una_unagi:20160510233632p:plain

「実験に使ったのはこの2つのノード。1つはSHUFFLEは昨日のパターンを元に調整した物。もう1つは乱数を使った物。どちらも機能的には同じ、配列の中から1つ取り出してPrintString、その後配列から除外する。これを指定した回数だけ繰り返す」

妹「どっちが速かったの?」

「それは条件によって違う。具体的にはSHUFFLEの回数なんだけど。どちらも1000個の数字を含んだ配列で試した結果……」

・Countを1に設定して、それを1000回繰り返す
シャッフル 44ミリ秒
ランダム 31ミリ秒

・Countを1000に設定して実行
シャッフル 20ミリ秒
ランダム 21ミリ秒

「要するにSHUFFLEっていうのは結構時間のかかる処理だから、何度もやるようだったらランダムを使った方がずっと速い。ただカードゲームとかでも最初にシャッフルするだけで毎回はやらないわけで、ランダムと0固定では0固定の方がちょっとだけ速いから、回数が多くなるとシャッフル有利になる」

妹「昨日の爆弾だとどうなのかな?」

「昨日のは1個投げるたびにSHUFFLEしてたから、そこはイベントの最初で1度シャッフルするように変えるとしても、それでも数が多くないからやっぱりランダムの方が速い。1000回レベルじゃないとシャッフル有利にならないから、普通に使う分にはランダムが良さそう」