本日は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); } }

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

