へなちょこプログラマ blog

ゲーム制作・プログラミング・趣味について記載するブログ

【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の間の値をランダムに返す」といった機能の関数です。

docs.unity3d.com

何に気を付ける?

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];

誰かの参考になれば幸いです。