Unityで一定時間ごとに色(色相)を変える
OSCアプリやMIDIのフェーダでオブジェクトの色を変えようとしてた過程でできたので、忘れずにメモ。
Unityの公式リファレンスで「一定時間ごとにライトが明るくなったり暗くなったりする」というサンプルがありますが、それを改良した形です。
RGBで計算するとややこしいことになるので、色相(色味)のみを変えることにしました。
RGBからHSVへの正確な計算式もあるようですが、かなりややこしいのと使うのは照明程度なので今回はパスしました。
オブジェクトを設置する
1.「GameObject」メニュー→「3D Object」→「Cube」で適当にキューブを作る
スクリプトを書く
1.「Assets」を右クリックし、「Create」→「C# Script」を選択する
2.「HSVTestScript」等、名前をつける
3.Hierarchyにある「Cube」に「HSVTestScript」をドラッグ&ドロップする
4.Hierarchyにある「Cube」をクリックし、Inspectorの「HSVTestScript(script)」の中にある「Cube 1」を探す
5.「Cube 1」に、Hierarchyにある「Cube」ドラッグする
6.「HSVTestScript」をダブルクリックして、下記のスクリプトを入力する
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ColorHSVrScript : MonoBehaviour { //色が変わるタイミング(時間)を「Cube」のInspector(Duration)で指定、初期値は1.0F public float duration = 1.0F; //Hierarchyにある「Cube」を「Cube 1」にドラッグする(「Cube」のInspectorにあり) public GameObject cube1; // Use this for initialization void Start () { } // Update is called once per frame void Update () { //durationの時間ごとに色が変わる float phi = Time.time / duration * 2 * Mathf.PI; float amplitude = Mathf.Cos(phi) * 0.5F + 0.5F; //色をRGBではなくHSVで指定 cube1.GetComponent<Renderer>().material.color = Color.HSVToRGB(amplitude, 1,1); } }