【Unity】 Random.Rangeに気をつけろ!
目次
概要
UnityのRandom.Rangeが引数intとfloatのオーバーロードで挙動が違うので、「気をつけろ!」といった内容の記事になります。
散々痛い目にあったので、忘れないようにこの記事を書くことにしました。
Random.Rangeとは?
// float Random.Range(float min, float max); // int Random.Range(int min, int max);
「minからmaxの間の値をランダムに返す」といった機能の関数です。
何に気を付ける?
Random.Rangeですが、floatとintの比較をしながら説明したいと思います。
floatの場合
下記の「_ranNum」には0.0〜1.0の間のランダムな少数が入る
float _ranNum = Random.Range(0.0f, 1.0f);
intの場合
下記の「_ranNum」には0〜9の間のランダムな値が入る
int _ranNum = Random.Range(0, 10);
「んっ?0~10で指定したのに0~9が返ってくるだと?」
これが今回のRandom.Rangeの気を付けなければいけないところです!
floatだとmaxの値までが返ってくるのに対して
intは「max - 1」が返ってきます。
なぜmax - 1?
これは個人的な解釈ですが、配列などのLengthやListのCountの値を直接使用するためではないかと思います。
int[] _array = { 0, 1, 2, 3, 4, 5 }; int _index = Random.Range(0, _array.Length); // _array.Length - 1と書かなくて良い int _value = _array[_index];
誰かの参考になれば幸いです。