[Unity] スプライトをフェードアウトさせる

Unity上でスプライトを徐々にフェードアウトさせる方法についてのメモ書きです。
これは簡単な爆発エフェクトなどに使えます。

スプライト描画を行うコンポーネントはSpriteRendererであり、この中にColorフィールドがあります。
Colorフィールドはスプライトの絵を貼り付ける下地となる紙のようなもので、この紙の色を自由に設定できます。
デフォルトは白色なので、スプライトの絵がそのままの色で貼り付けられるようになります。

Colorには透明度(=αチャネル)も指定することができます。
したがって、このαチャネルの値を変更ことで半透明のスプライトを表示したり、透明度を変化させることも可能です。

今回はこの機能を利用してスプライトをフェードアウトするスクリプトを書いてみました。

using UnityEngine;
using System.Collections;

public class Fadeout : MonoBehaviour {
	public float fadeTime = 1f;

	private float currentRemainTime;
	private SpriteRenderer spRenderer;

	// Use this for initialization
	void Start () {
		// 初期化
		currentRemainTime = fadeTime;
		spRenderer = GetComponent<SpriteRenderer>();
	}

	// Update is called once per frame
	void Update () {
		// 残り時間を更新
		currentRemainTime -= Time.deltaTime;

		if ( currentRemainTime <= 0f ) {
			// 残り時間が無くなったら自分自身を消滅
			GameObject.Destroy(gameObject);
			return;
		}

		// フェードアウト
		float alpha = currentRemainTime / fadeTime;
		var color = spRenderer.color;
		color.a = alpha;
		spRenderer.color = color;
	}
}

上記スクリプトをフェードアウトさせたいGameObjectに追加すると、指定された時間でフェードアウトして最後には消滅します。

まずSpriteRendererコンポーネントを取得し、

	spRenderer = GetComponent<SpriteRenderer>();

Update()メソッドの中でSpriteRendererのαチャネルを更新します。

	// フェードアウト
	float alpha = currentRemainTime / remainTime;
	var color = spRenderer.color;
	color.a = alpha;
	spRenderer.color = color;

αチャネルを含め、色の各成分の取り得る範囲は0~1です。

完全にフェードアウトしきったら、自身をDestroyしてシーンから消滅させます。

	if ( currentRemainTime <= 0f ) {
		// 残り時間が無くなったら自分自身を消滅
		GameObject.Destroy(gameObject);
		return;
	}

これで冒頭で述べた動作を実現できます。

今回はSpriteRenderer限定ですが、この処理を少し応用すればマテリアルなどのフェードアウト処理も実現できます。

COMMENTS & TRACKBACKS

  • Comments ( 0 )
  • Trackbacks ( 1 )

コメントはまだありません。

  1. […] ftvlog [Unity]スプライトをフェードアウトさせる  […]