うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】Gradient で色相関パターンの色を設定する

ランダムで色がほしいときに、色相環から色を取得すると便利だと思ったので

Gradient の Color Key をよしなに設定してランダムに色を取得できるようにしてみました

スクリプト

using UnityEngine;

public static class GradientExtension
{
    /// <summary>
    /// 色相環になるように色をセット
    /// </summary>
    public static void Hue(this Gradient self)
    {
        var start = 0f;
        var colors = new[]
        {
            Color.red,
            Color.yellow,
            Color.green,
            Color.cyan,
            Color.blue,
            Color.magenta,
            Color.red,
        };
        var colorKeys = new GradientColorKey[colors.Length];
        for (var i = 0; i < colors.Length; i++)
        {
            colorKeys[i] = new GradientColorKey(colors[i], start);
            start += 1f / (colors.Length - 2);
        }

        self.mode = GradientMode.Blend;
        self.SetKeys(colorKeys, new GradientAlphaKey[0]);
    }
 
    public static Color GetRandomColor(this Gradient self)
    {
        var random = UnityEngine.Random.Range(0, 1f);
        return self.Evaluate(random);
    }
}

使い方

インスタンスを作成して メソッドを呼び出すだけで、色相環の色にできます

f:id:hacchi_man:20211122184144p:plain

f:id:hacchi_man:20211122184159p:plain

var gradient = new Gradient();
// 色相環をセット
gradient.Hue();
 
// ランダムな色を取得
gradient.GetRandomColor();

色を白っぽくしたり、黒っぽくしたい場合は、更に乱数乗算もしくは加算すればそれっぽくできると思います