无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

unity教程:加載場景時(shí)過場界面實(shí)現(xiàn)

2023-07-20 12:28 作者:塵風(fēng)一枚  | 我要投稿

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SceneManagement;


public class UIManager : MonoBehaviour

{

public CanvasGroup UI;


private void Awake()

{

UI = FindObjectOfType<CanvasGroup>();

}


private void OnEnable()

{

SceneSwitchEventHandler.SwitchScenes += OnSwitchScenes;

}


private void OnDisable()

{

SceneSwitchEventHandler.SwitchScenes += OnSwitchScenes;

}


/// <summary>

/// 訂閱(場景切換)

/// </summary>

/// <param name="targetScene">目標(biāo)場景</param>

private void OnSwitchScenes(string targetScene)

{

StartCoroutine(SwitchScenes(targetScene));

}


/// <summary>

/// 切換場景方法

/// </summary>

/// <param name="targetScene">目標(biāo)場景</param>

private IEnumerator SwitchScenes(string targetScene)

{

//將加載顯示UI界面優(yōu)先級調(diào)高于其他場景的UI界面

UI.GetComponentInParent<Canvas>().sortingOrder = 1;

//調(diào)用方法 將加載顯示UI界面的透明度逐漸調(diào)高至完全不透明

yield return Fade(1);

//關(guān)閉當(dāng)前激活的場景 (異步)

yield return SceneManager.UnloadSceneAsync(SceneManager.GetActiveScene());

//加載需要的場景并設(shè)置為激活

yield return LoadSceneSetActive(targetScene);

//調(diào)用方法 將加載顯示UI界面的透明度逐漸調(diào)低至完全透明

yield return Fade(0);

//恢復(fù)加載顯示UI界面的優(yōu)先級

UI.GetComponentInParent<Canvas>().sortingOrder = -1;

}


/// <summary>

/// 加載場景并設(shè)置為激活

/// </summary>

/// <param name="sceneName">場景名</param>

/// <returns></returns>

private IEnumerator LoadSceneSetActive(string sceneName)

{

yield return SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);


Scene newScene = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);


SceneManager.SetActiveScene(newScene);

}


/// <summary>

/// 逐漸修改UI界面的透明度

/// </summary>

/// <param name="targetAlpha">修改值</param>

/// <returns></returns>

private IEnumerator Fade(float targetAlpha)

{

UI.blocksRaycasts = true;


float speed = Mathf.Abs(UI.alpha - targetAlpha) / 1.5f;


while (!Mathf.Approximately(UI.alpha, targetAlpha))

{

UI.alpha = Mathf.MoveTowards(UI.alpha, targetAlpha, speed * Time.deltaTime);

yield return null;

}


UI.blocksRaycasts = false;

}

}


using UnityEngine;


public class LoadScene : MonoBehaviour

{

/// <summary>

/// 加載場景

/// </summary>

/// <param name="sceneName">加載場景名字</param>

public void SwitchScene(string sceneName)

{

SceneSwitchEventHandler.CallSwitchScenes(sceneName);

}

}


using System;


public static class SceneSwitchEventHandler

{

/// <summary>

/// 事件(切換場景時(shí)調(diào)用)

/// </summary>

public static Action<string> SwitchScenes;

/// <summary>

/// 調(diào)用事件

/// </summary>

/// <param name="targetScene">目標(biāo)場景</param>

public static void CallSwitchScenes(string targetScene)

{

SwitchScenes?.Invoke(targetScene);

}

}

unity教程:加載場景時(shí)過場界面實(shí)現(xiàn)的評論 (共 條)

分享到微博請遵守國家法律
都安| 清涧县| 横山县| 英德市| 满城县| 阳城县| 定西市| 英德市| 内江市| 扬州市| 广灵县| 洛扎县| 汤阴县| 香格里拉县| 江门市| 白城市| 西安市| 兰考县| 门源| 大庆市| 城固县| 博爱县| 阳城县| 横山县| 隆回县| 普兰县| 石城县| 高州市| 积石山| 商丘市| 府谷县| 望江县| 蕉岭县| 凤翔县| 上杭县| 湘乡市| 泸定县| 遵义市| 木里| 临武县| 宁明县|