妹でもわかるUnrealEngine4

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

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

配列の中身をランダムに取り出す(Randomが返す範囲)

「そういえば、こないだブループリント見てて気になったんだけど、これって配列の中身からランダムにGETしてるんだよね?」

f:id:una_unagi:20150923213618p:plain

妹「そーだよ」

「でもこれだと最後の1個が絶対に選ばれないと思うんだけど。何度やっても絶対選ばれないアクターがあるはず。ここはLASTINDEXじゃなくてLENGTHノードに変えないと」

妹「そうなの? 配列って、0しか無い時の長さって1でしょ? その状態だとLENGTHが1になって、RandomIntegerの結果0か1かって話になるから、そこで1になったら配列の存在しないとこからGETしちゃうと思うんだけど」

「RandomIntegerノードは、0からMAX-1の範囲の数字がかえってくるから、LENGTHが1だと0固定になるんだよ。ノードのポップアップにも書いてある」

妹「えっMaxなのにMaxにはならないの!? なんだそれ……」

「Maxまでいくプログラム言語もあったような気がするけど、伝統的にMaxを含まない方が多いと思う」

妹「Maxまで入ってる方が自然だと思うんだけどな。必要なら1引いた数字をMaxにすればいいだけだし」

「そう言われても乱数を作る時の原理の問題とかあるし、Max100で0~99だから合計100種類の数字が出るということにもなる。それにRandomFloatの場合Maxを1にすると、0~0.99999999…になるから、Maxに0.99999999…って指定するよりも自然なんだよ」

妹「うーん、そしたらここLENGTHに変えるか」

「それかもしくはRandomIntegerInRangeノードを使う。これはMinとMaxを含む範囲になってるから、Minを0に、MaxをLastIndexにすればいい」

妹「そっちは含まれてるの!? わけがわからない……」