高彩度かつ高明度色をランダムに生成する

高彩度かつ高明度色をランダムに生成する関数を作ってみました。
「高彩度かつ高明度色」とは、要するに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 にすればオッケー。

コメント