以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2025/03/04/233236より取得しました。


UnityのGradient型で色のグラデーションを利用する その2(スクリプトからグラデーションを変更する)

本日はUnityの小ネタ枠です。
UnityのGradient型で色のグラデーションを利用する方法です。
今回はスクリプトからグラデーションを変更する方法についてです。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

Gradient

Gradient型は0~1の任意の位置にカラーキーを打ち込んでグラデーションを設定します。
カラーキーは複数個設定できます。
docs.unity3d.com

var gradient = new Gradient();
// カラーキーを作成する
var colors = new GradientColorKey[2];
colors[0] = new GradientColorKey(Color.red, 0.0f);
colors[1] = new GradientColorKey(Color.blue, 1.0f);
// 透明度キーを作成する
var alphas = new GradientAlphaKey[2];
alphas[0] = new GradientAlphaKey(1.0f, 0.0f);
alphas[1] = new GradientAlphaKey(0.0f, 1.0f);
// キーをグラデーションに設定する
gradient.SetKeys(colors, alphas);

サンプルスクリプト

前回記事のスクリプトを改良し、ループごとにカラーキーを変更することで連続してグラデーションが変化し続けるサンプルスクリプトを作成しました。
・GradientTest2.cs

using UnityEngine;
using UnityEngine.UI;
using Random = UnityEngine.Random;

public class GradientTest2 : MonoBehaviour
{
    [SerializeField, Tooltip("グラデーション")]
    private Gradient _gradient;
    
    
    [SerializeField, Tooltip("何秒周期でグラデーションを0~1に変化させるか")]
    private float _period = 3.0f;
    
    [SerializeField, Tooltip("グラデーションを適用するImage")]
    private Image _image;

    private float _beforeTime = 0.0f;

    private void Start()
    {
        // 初期のグラデーションを設定する
        CreateRandomGradation();
    }

    void Update()
    {
        // 現在のアプリ内経過時間を参照し、Gradient型を0~1の範囲でループさせる
        float time = Mathf.Repeat(Time.time, _period) / _period;
        _image.color = _gradient.Evaluate(time);
        
        // 1周期が過ぎるごとにグラデーションを変化させる
        if (time < _beforeTime) CreateRandomGradation();
        _beforeTime = time;
    }

    /// <summary>
    /// ランダムに変化していくグラデーションを作成する
    /// </summary>
    private void CreateRandomGradation()
    {
        // カラーキーを作成する
        var colors = new GradientColorKey[2];
        // 1つ目のキーは現在の2つ目のキーと同じ色にして連続して色が変化しているような見た目にする
        colors[0] = new GradientColorKey(_gradient.colorKeys[1].color, 0.0f);
        // 2つ目のキーはランダムな色にする
        colors[1] = new GradientColorKey(new Color(Random.value, Random.value, Random.value), 1.0f);
        // 透明度キーを作成する
        var alphas = new GradientAlphaKey[2];
        alphas[0] = new GradientAlphaKey(1.0f, 0.0f);
        alphas[1] = new GradientAlphaKey(1.0f, 1.0f);
        // キーをグラデーションに設定する
        _gradient.SetKeys(colors, alphas);
    }
}

シーンを再生して動作を確認します。
スクリプトでグラデーションが更新されることで、連続して変化し続けるグラデーションを作成できました。




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2025/03/04/233236より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14