まゆたまガジェット開発逆引き辞典

電子工作やプログラミングのHowtoを逆引き形式で掲載しています。作りたいモノを決めて学んでいくスタイル。プログラマではないので、コードの汚さはお許しを。参照していないものに関しては、コピペ改変まったく問いません

Unityで一定時間ごとに色(色相)を変える

OSCアプリやMIDIのフェーダでオブジェクトの色を変えようとしてた過程でできたので、忘れずにメモ。
Unityの公式リファレンスで「一定時間ごとにライトが明るくなったり暗くなったりする」というサンプルがありますが、それを改良した形です。
RGBで計算するとややこしいことになるので、色相(色味)のみを変えることにしました。
RGBからHSVへの正確な計算式もあるようですが、かなりややこしいのと使うのは照明程度なので今回はパスしました。
f:id:prince9:20181016055356g:plain

オブジェクトを設置する

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);
		
	}
}