Unity で色を徐々に変更させる

シェアする

Unity でカメラの背景色を変えてみるテスト。色変えるだけなら color 型を突っ込めば良いだけなんだけど、だんだん変化させるような時にはちょっと考えないとなーと思って C# でスクリプト書いてみた。

// 赤 -> 緑 -> 青 -> の順に変化させる
IEnumerator ChangeCameraColor() {
	while (true) {
		yield return StartCoroutine(ChangeColor(Color.red, 1f));
		yield return StartCoroutine(ChangeColor(Color.green, 1f));
		yield return StartCoroutine(ChangeColor(Color.blue, 1f));
	}
	yield break;
}

IEnumerator ChangeColor(Color toColor, float duration) {
	Color fromColor = Camera.main.camera.backgroundColor;
	float startTime = Time.time;
	float endTime = Time.time + duration;
	float marginR = toColor.r - fromColor.r;
	float marginG = toColor.g - fromColor.g;
	float marginB = toColor.b - fromColor.b;

	while (Time.time < endTime) {
		fromColor.r = fromColor.r + (Time.deltaTime / duration) * marginR;
		fromColor.g = fromColor.g + (Time.deltaTime / duration) * marginG;
		fromColor.b = fromColor.b + (Time.deltaTime / duration) * marginB;
		Camera.main.camera.backgroundColor = fromColor;
		yield return 0;
	}

	Camera.main.camera.backgroundColor = toColor;
	yield break;
}

ChangeColor の第一引数にどの色に変化させるか、第二引数に何秒で変化させるか、をそれぞれ入れて StartCoroutine で呼ぶと良い感じに色を変化させれます。今気づいたけどアルファ値考慮してないっすね...。

この例だとカメラの背景色にしてるけど目的に応じて適当に変えちゃってください。

Sponsored Link

シェアする

フォローする