UnityEngine.UI.Textをフェードイン・アウトする時のメモリ消費


概要

Unityで文字をフェードイン・アウトする方法についてです。

環境

Windows 10
Unity 2017.1.1f1

方法1

一番最初に試した方法がこちらです。

using UnityEngine;
using UnityEngine.UI;

public class Sample : MonoBehaviour
{
    public Text text;

    void Update()
    {
        Color color = text.color;
        color.a = color.a <= 0 ? 1 : color.a - 0.01f;
        text.color = color;
    }
}

これでもやりたい事はできましたが、メモリ消費がどんどん増えます。
※秒間200Kbyte程度

方法2

長時間この効果を連続させたく、メモリ消費を抑えたかったので以下の方法にしました。

using UnityEngine;
using UnityEngine.UI;

public class Sample : MonoBehaviour
{
    public Text text;

    void Update()
    {
        Color color = text.material.GetColor("_Color");
        color.a = color.a <= 0 ? 1 : color.a - 0.01f;
        text.material.SetColor("_Color", color);
    }
}

マテリアルを作成し、ShaderをUI/Unlit/Textを設定します。
作成したマテリアルをTextのMaterialに設定します。
スクリプトではText.colorの代わりにマテリアルの"_Color"を変更します。

備考

実行形式については未確認です。

参考

http://tsubakit1.hateblo.jp/entry/2015/03/24/062102
http://kan-kikuchi.hatenablog.com/entry/Material