Unity切換場景淡入淡出效果

在製作遊戲時,我們在切換場景時經常需要增加一個淡入淡出的效果。這裏,我們利用Unity自帶的動畫系統製作一個場景的淡入淡出的效果。步驟如下:
1.在遊戲中新建一個遊戲對象,給遊戲添加一個GUITexture組件,並設置好相關的參數後,製作成prefab。如下圖:

![這裏寫圖片描述](https://img-blog.csdn.net/20170503163347320?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcTU2ODM2MDQ0Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

2.給這個prefab製作1個動作文件Animation,這個動作一會持續2秒,動畫的持續過程會改變此prefab中GUITexture裏的Color.a的值。在第0幀處,color.a的值爲0,在動畫的第1秒處color.a的值爲0.5,在動畫第2秒處color.a的值又變化爲0.此時就完成了一個alpha值的漸變動畫。

3.加控制代碼。
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagerment;

public class LoadLevelFadeEffect : MonoBehaviour {
    [HideInInspector]
    public int levelIndex;

    // Use this for initialization
    void Awake () {
        //這個腳本不會在切換場景時被銷燬
        DontDestroyOnLoad(this.gameObject);
    }

    // Update is called once per frame
    void Update () {


    }

    /// <summary>
    /// 注:這個方法在unity引擎中的動畫系統中利用事件調用。下面的DestroySelf同樣在Unity中調用
    /// </summary>
    public void Test()
    {
        //這裏是場景切換的邏輯。
        SceneManager.LoadScene(levelIndex);
        ……
    }

    public void DestroySelf()
    {
        Destroy(this.gameObject);
    }
}
4.將上面的腳本添加給我們製作的prefab中,並在該prefab的動畫的第1秒處的關鍵幀上添加事件,執行Test()函數。在動畫播放完畢後的關鍵幀上再添加事件,執行DestroySelf()函數。表示銷燬自身。

至此,整個切換場景的淡入淡出效果實現完畢。但是這樣做有幾點是需要注意的:
1、在需要切換場景的時候只需要生成這個Prefab即可,生成代碼如下:
        //在場景中生成該Prefab
        GameObject go = UIManager.Instance.LoadGameObject("Others/Fade");
        GUITexture gt = go.GetComponent<GUITexture>();
        //保證GUITexture可以覆蓋整個遊戲屏幕
        gt.pixelInset = new Rect(-100, -100, Screen.width, Screen.height);
2.這個淡入淡出只針對遊戲內的場景有效,無法將遊戲中的UI也淡入淡出。
3.這樣做會讓遊戲中的很多代碼在工程外調用,由引擎調用,因此後期在維護時會增加成本。因此必須在調用代碼時做好註釋,表明這一段代碼是由引擎調用的。
發佈了36 篇原創文章 · 獲贊 29 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章