1. 程式人生 > >Unity3D中通用改變Text文字顏色與還原方法

Unity3D中通用改變Text文字顏色與還原方法

一、建立一個通用的改變文字顏色與還原指令碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace Global
{
	public class Global_TxtMgr : MonoBehaviour
	{
        public static Global_TxtMgr Instance;                                   //本指令碼例項
        public Color32 _TextOriginalColor;                                     //文字原來的顏色
        private bool _IsChangeColor=true;                                      //改變顏色的標誌



        private void Awake()
        {
            Instance = this;
        }

    
        /// <summary>
        /// 文字顏色的改變
        /// </summary>
        /// <param name="text">Text文字</param>
        /// <param name="r">自定義三原色的r</param>
        /// <param name="g">自定義三元色的g</param>
        /// <param name="b">自定義三元色的b</param>
        /// <param name="a">自定義文字顏色透明度</param>
        public void TextColorChangeAndRestore(Text text, byte r, byte g, byte b, byte a)
        {
           
            if (_IsChangeColor == true)
            {
                ChangeTextColor(text, r, g, b, a);
            }
            else
            {
                BackOriginalColor(text);
            }
            _IsChangeColor = !_IsChangeColor;
        }


        /// <summary>
        /// 改變文字的顏色
        /// </summary>
        /// <param name="text">文字本身</param>
        /// <param name="r"></param>
        /// <param name="g"></param>
        /// <param name="b"></param>
        /// <param name="a"></param>
        public void ChangeTextColor(Text text,byte r,byte g,byte b,byte a)
        {
            if (text!=null)
            {
                text.color = new Color32(r, g, b, a);
            }
            
        }

        /// <summary>
        ///  還原文字的顏色
        /// </summary>
        /// <param name="text">文字本身</param>
        public void BackOriginalColor(Text text)
        {
            if (text != null)
            {
                text.color = _TextOriginalColor;
            }
        }


        /// <summary>
        ///指定時間恢復文字顏色
        /// </summary>
        /// <param name="text">文字本身</param>
        /// <param name="time">指定恢復的時間</param>
        /// <returns></returns>
        public IEnumerator BackOriginalColorByTime(Text text,float time)
        {
            yield return new WaitForSeconds(time);
            if (text!=null)
            {
                text.color = _TextOriginalColor;
            }
        }

       


	}//class_end
}
二、建立一個需要改變、還原指定Text顏色的指令碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Global;

namespace SimpleUIFrame
{
	public class Test_TextChangeColor : MonoBehaviour
	{
        public Text text;                                                       //文字
        private Color32 _textcolor;


		void Start()
		{
            //獲取文字原來的顏色
            _textcolor = text.color;
        }

        //改變文字的顏色
        public void ChangeTextColor()
        {
            Global_TxtMgr.Instance._TextOriginalColor = _textcolor;
            //Global_TxtMgr.Instance.TextColorChangeAndRestore(text,38,185,154,255);
            Global_TxtMgr.Instance.ChangeTextColor(text, 38, 185, 154, 255);
            //Global_TxtMgr.Instance.BackOriginalColor(text);
            StartCoroutine(Global_TxtMgr.Instance.BackOriginalColorByTime(text,Global_Parameter.INTERVAL_TIME_2));

           
        }
      

	}//class_end
}

三、將這兩個指令碼掛載到場景的指令碼管理器上(或者按鈕上),然後指定需要改變顏色的Text,最後在給按鈕指定ChangeTextColor()方法即可四、執行場景,點選按鈕就會改變顏色,2秒之後就會還原文字顏色