UnityのRandomクラスは地味に色々できることに気づいたので、機能を軽く紹介します。
- floatやintをランダムで取得するRandom.Range
- 円の中の一点をランダムに取得するRandom.insideUnitCircle
- ランダムな色を取得するRandom.ColorHSV
- 球の内部の一点を取得できるRandom.insideUnitSphere
- 球の表面上の座標をランダムに取得するRandom.onUnitSphere
- ランダムな回転値を取得するRandom.rotation
- 参考
Unity2019.1.0
floatやintをランダムで取得するRandom.Range
まずは一番スタンダードなRandom.Rangeです。
これを使うとintやfloat型でランダムな値が得られます。
using UnityEngine; public class Example : MonoBehaviour { void Start() { for (int i = 0; i < 50; i++) { var rand = Random.Range(0.0f, 10.0f); var obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); obj.transform.position = new Vector3(rand, 0, 0); obj.transform.localScale = Vector3.one * 0.3f; } } }
円の中の一点をランダムに取得するRandom.insideUnitCircle
Random.insideUnitCircleを使うと円の中のランダムな一点を取得できます。
この時の円の半径は1です。
using UnityEngine; public class Example : MonoBehaviour { void Start() { for (int i = 0; i < 150; i++) { var rand = Random.insideUnitCircle * 3; var obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); obj.transform.position = new Vector3(rand.x, 0, rand.y); obj.transform.localScale = Vector3.one * 0.3f; } } }
ランダムな色を取得するRandom.ColorHSV
Random.ColorHSVを使うと色をランダムで取得できます。
今回は使っていませんが、色相や彩度などの範囲を指定するオーバーロードも充実しています。
using UnityEngine; public class Example : MonoBehaviour { void Start() { for (int i = 0; i < 150; i++) { var rand = Random.insideUnitCircle * 3; var randColor = Random.ColorHSV(); var obj = GameObject.CreatePrimitive(PrimitiveType.Sphere); obj.transform.position = new Vector3(rand.x, 0, rand.y); obj.transform.localScale = Vector3.one * 0.3f; obj.GetComponent<Renderer>().material.color = randColor; } } }
球の内部の一点を取得できるRandom.insideUnitSphere
Random.insideUnitSphereを使うと球の内部の一点をランダムに取得できます。
この球の半径は1です。
using UnityEngine; public class Example : MonoBehaviour { void Start() { for (int i = 0; i < 150; i++) { var rand = Random.insideUnitSphere * 3; var randColor = Random.ColorHSV(); var obj = GameObject.CreatePrimitive(PrimitiveType.Cube); obj.transform.position = rand; obj.transform.localScale = Vector3.one * 0.3f; obj.GetComponent<Renderer>().material.color = randColor; } } }
球の表面上の座標をランダムに取得するRandom.onUnitSphere
Random.onUnitSphereを使うと球の表面上の一点をランダムに取得できます。
この球の半径は1です。
using UnityEngine; public class Example : MonoBehaviour { void Start() { for (int i = 0; i < 150; i++) { var rand = Random.onUnitSphere * 3; var randColor = Random.ColorHSV(); var obj = GameObject.CreatePrimitive(PrimitiveType.Cube); obj.transform.position = rand; obj.transform.localScale = Vector3.one * 0.3f; obj.GetComponent<Renderer>().material.color = randColor; } } }
ランダムな回転値を取得するRandom.rotation
Random.rotationを使うとランダムな回転値を取得できます。
using UnityEngine; public class Example : MonoBehaviour { void Start() { for (int i = 0; i < 200; i++) { var randPos = Random.onUnitSphere * 3; var randRot = Random.rotationUniform; var randColor = Random.ColorHSV(); var obj = GameObject.CreatePrimitive(PrimitiveType.Cube); obj.transform.position = randPos; obj.transform.rotation = randRot; obj.transform.localScale = Vector3.one * 0.3f; obj.GetComponent<Renderer>().material.color = randColor; } } }
ちなみにRandom.rotationUniformというプロパティも用意されていて、こちらは分布が均一になるとのことです。