GONZNOTE ゆるゆる備忘録

227月/114

UnityのC#で乱数を生成する。

.NETのC#で乱数を表示させようとする場合、Randomクラスを使うのが一番カンタンそうだけど、
(それでもシード値を変えなきゃいけなかったりとか、厳密さを求めだしたら面倒だ。。。)
UnityではRandomクラスは当然.NET FrameworkのSystemではなく、UnityEngineの中にあるため、
.NET用のサンプルコードをコピペしても、「"Next"なんて知らないわよ!!」等と怒られてしまう。

じゃあUnityではいったいどうすればいいのかとリファレンスを読んだら、
あまりにも簡単過ぎて腰を抜かしそうになったので、メモとばかりに残しておきます。

Random.value

…これだけ。
これだけで0から1.0までのfloat型の数値が返却されます。

配列の中身をランダムに取り出す…とか、ランダムな数値の範囲を絞りたい場合は

Random.Range (x, y)

と書けば、xからyまでの数値が返却されます。

※7.26 訂正
上記の書き方だと、xは含まれていても、yは含まれないみたいです。。
なので、x~yの数値に絞りたい場合は (x,y+1) と指定してやる必要があります。
余談ですが、1000回ループを何度か回してみたところ、0が平均120回前後なのに対し、
y+1はどういうわけか、70~80回前後でした。 まぁ、感覚ですけど。

※13.02.18 以下コメントを頂いたので追記
Rangeの引数はfloatもintもあります。
intのときはMAX値が含まれない(exclusive)ですが、
floatのときはMAX値が含まれます(inclusive)。

コメントありがとうございます。
ご指摘の通り、引数にはint、floatともに指定でき、
それぞれfloatの場合はmaxが含まれ、intの場合は含まれない範囲で
ランダムな値が返却されます。

リファレンスにはRangeの引数・返却される数値の型はどちらもfloatと書いてあったけど、
x・yを整数で指定すれば、返却される値も整数になるみたいです。

.NETもこれくらいシンプルならいいのに!

Filed under: Unity Leave a comment
Comments (4) Trackbacks (0)
  1. http://docs-jp.unity3d.com/Documentation/ScriptReference/Random.Range.html
    はじめまして。
    Rangeの引数はfloatもintもあります。
    intのときはMAX値が含まれない(exclusive)ですが、
    floatのときはMAX値が含まれます(inclusive)。

  2. はじめまして。
    参考にさせていただきましたが、スペルミスがありましたので報告させていただきます。
    >Rondam.Range (x, y)

    Random.Range (x, y)

    • 本当だ…4年半もそのままだったのですね…お恥ずかしい。。
      ご指摘ありがとうございました!


Leave a comment

No trackbacks yet.