配列の中身をランダムに取り出す(Randomが返す範囲)
「そういえば、こないだブループリント見てて気になったんだけど、これって配列の中身からランダムにGETしてるんだよね?」
妹「そーだよ」
「でもこれだと最後の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にすればいい」
妹「そっちは含まれてるの!? わけがわからない……」