いんでぃーづ

ゲームいろいろ、いろいろ自由

Unity : 配列の要素を Random.Range で取得するときに最後の要素だけなぜか出てこない

うっかりやってしまったのでおさらい...

Transform[] TransformList;

TransformList[Random.Range(0, TransformList.Length - 1)];

みたいに Length - 1 をつかってランダム値を取得しようとするとちゃんと取得できませんよって話。

基本的な仕様の理解

Unity でランダム値を取得する関数の Random.Range ですが、
整数バージョン小数バージョン の二種類があります。

そして整数バージョンで取得できる数値は 第二引数未満の数字 です。

つまり

Random.Range(0, 5);

とすると取得できるのは 0 ~ 4 までの数字になります。

気をつけたいのは、小数バージョンの場合は 第二引数を含む 数字が出てきます。

つまり

Random.Range(0.0f, 1.0f);

とすると取得できる数値は 0.0 ~ 1.0の少数 ということになります。

Random.Range で配列からランダムな要素を取得する場合

冒頭のソースの件になりますが、

TransformList[Random.Range(0, TransformList.Length)];

のように、第二引数には Length の値をそのまま入れましょう、って話。

たぶん他の言語でこういうクセがついている人は、すぐ忘れてハマってしまうと思われ...


ていうかこの仕様なら

Random.Range(0, 0);

はExceptionとか投げるべきじゃないすかね...(0が出る)

docs.unity3d.com


“Unity” and Unity logos are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere, and are used under license.


免責事項

当サイトの広告バナー、リンクによって提供される情報、サービス内容について、当サイトは一切の責任を負いません。

また、当サイトの情報を元にユーザ様が不利益を被った場合にも、当サイトは一切の責任を負いません。

すべて自己責任でお願いします。