高彩度かつ高明度色をランダムに生成する関数を作ってみました。
「高彩度かつ高明度色」とは、要するにUnityのカラーピッカーにおける各色相の右上の色です。
鮮やかな色をランダムで取得することができます。
例えばこんな感じ。
作成した関数
Color GetRandomVividColor(float alpha){
Color c;
float rnd = Random.value;
if (rnd < 1f / 6f) {
c = new Color (0f, 1f, Random.value, alpha);
} else if (rnd < 2f / 6f) {
c = new Color (0f, Random.value, 1f, alpha);
} else if (rnd < 3f / 6f) {
c = new Color (1f, 0f, Random.value, alpha);
} else if (rnd < 4f / 6f) {
c = new Color (Random.value, 0f, 1f, alpha);
} else if (rnd < 5f / 6f) {
c = new Color (1f, Random.value, 0f, alpha);
} else {
c = new Color (Random.value, 1f, 0f, alpha);
}
return c;
}
解説
高彩度かつ高明度色になるには、RGBにおいてR、G、Bのうち
- どれか1つが0(最低値)
- どれか1つが255(最高値)
である必要があります。
これはカラーピッカーを表示して右上に固定し、色相を変えてみると納得してもらえると思います。
つまり、Unityのスクリプトでいうと「0」「1」「0〜1のランダム値」の3つをRGBにランダムに振り分ければいいということ。
組み合わせは全部で6パターンあるので、確率6分の1ずつで振り分けます。
今回アルファ値は引数として受け取り、固定にしました。
アルファ値もランダムにする場合は引数なしで new Color内の alpha を Random.value にすればオッケー。
コメント