Unityでオブジェクトの色をランダムに変えるとき、単純にRandom.valueを使うと似た色になってしまうことがあります。この記事では、元の色と大きく異なるランダムカラーを生成する方法を紹介します。
色の差を計算する
まず、現在のオブジェクトの色を取得します。Color.Distance関数はありませんが、RGBの差を計算することで距離を求めることができます。
Color originalColor = renderer.material.color;
Color newColor;
do {
newColor = new Color(Random.value, Random.value, Random.value);
} while ((newColor - originalColor).grayscale < 0.5f);
renderer.material.color = newColor;
この例では、grayscaleで差を簡易的に判定し、0.5以上離れている場合にのみ色を採用しています。距離の閾値を調整することで、より強いコントラストの色を選べます。
HSVを使ったランダムカラー生成
RGBよりもHSV空間で色相の差を使うと、元の色と違う色を選びやすくなります。
Color.RGBToHSV(originalColor, out float h, out float s, out float v);
float newH;
do {
newH = Random.value;
} while (Mathf.Abs(newH - h) < 0.3f); // 色相が0.3以上離れるまでループ
Color newColor = Color.HSVToRGB(newH, s, v);
renderer.material.color = newColor;
この方法では、元の色相と一定の差を持つ色を生成できます。彩度や明度を変化させても、元の色との差をコントロール可能です。
まとめ
元の色と全く違うランダムカラーをUnityで作るには、RGBの差やHSV空間で色相の差を利用する方法があります。単純なRandom.valueよりも、これらの方法を使うことで視覚的に差のある色を効率よく生成できます。


コメント