Unity跳轉場景進度條制作教程(異步加載)


Unity跳轉場景進度條制作


本文提供全流程,中文翻譯。

Chinar 堅持將簡單的生活方式,帶給世人!

(擁有更好的閱讀體驗 —— 高分辨率用戶請根據需求調整網頁縮放比例)



Chinar —— 心分享、心創新!

助力快速完成跳轉場景進度條的制作

為新手節省寶貴的時間,避免采坑!


Chinar 教程效果:
這里寫圖片描述



全文高清圖片,點擊即可放大觀看 (很多人竟然不知道)


1

Loading Scene —— 加載場景


游戲開發中,我們經常會遇到需要做一個進度條

用來告訴玩家,進行場景切換時,等待加載的進度或者時間等等

那么在Unity開發中,我們就需要用到異步加載,來實現此類功能了
舉個栗子黑白88
例如:市面常見這樣的例子
這里寫圖片描述


2

Loading Scripts —— 加載腳本


把一下腳本掛載前場景

然后指定需要跳轉到的場景的 名稱 / 下標

UI 上創建一個 Slider 滑動條

然后 我在這里是用 動態獲取的方式獲得的 名稱為“ Slider
這里寫圖片描述
舉個栗子黑白88

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;


/// <summary>
/// 加載場景 —— 腳本掛載前場景
/// </summary>
public class ChinarLoadScene : MonoBehaviour
{
    private Slider slider;          //滑動條
    int            currentProgress; //當前進度
    int            targetProgress;  //目標進度


    private void Start()
    {
        currentProgress = 0;
        targetProgress  = 0;
        slider          = GameObject.Find("Slider").GetComponent<Slider>();
        StartCoroutine(LoadingScene()); //開啟協成
    }


    /// <summary>
    /// 異步加載場景
    /// </summary>
    /// <returns>協成</returns>
    private IEnumerator LoadingScene()
    {
        AsyncOperation asyncOperation       = SceneManager.LoadSceneAsync(1); //異步加載1號場景
        asyncOperation.allowSceneActivation = false;                          //不允許場景立即激活//異步進度在 allowSceneActivation= false時,會卡在0.89999的一個值,這里乘以100轉整形
        while (asyncOperation.progress < 0.9f)                                //當異步加載小於0.9f的時候
        {
            targetProgress = (int) (asyncOperation.progress * 100); //異步進度在 allowSceneActivation= false時,會卡在0.89999的一個值,這里乘以100轉整形
            yield return LoadProgress();
        }
        targetProgress = 100; //循環后,當前進度已經為90了,所以需要設置目標進度到100;繼續循環
        yield return LoadProgress();
        asyncOperation.allowSceneActivation = true; //加載完畢,這里激活場景 —— 跳轉場景成功
    }


    /// <summary>
    /// 由於需要兩次調用,在這里進行簡單封裝
    /// </summary>
    /// <returns>等一幀</returns>
    private IEnumerator<WaitForEndOfFrame> LoadProgress()
    {
        while (currentProgress < targetProgress) //當前進度 < 目標進度時
        {
            ++currentProgress;                            //當前進度不斷累加 (Chinar溫馨提示,如果場景很小,可以調整這里的值 例如:+=10 +=20,來調節加載速度)
            slider.value = (float) currentProgress / 100; //給UI進度條賦值
            yield return new WaitForEndOfFrame();         //等一幀
        }
    }
}

效果如下:
這里寫圖片描述


3

Warm Prompt —— 溫馨提示


Chinar 溫馨提示:

如果需要跳轉的場景很小,資源很少

可以通過代碼中的++currentProgress;//當前進度不斷累加

調整++currentProgress的值 例如:+=10 +=20,來調節加載速度
舉個栗子黑白88
加載速度明顯提升:
這里寫圖片描述


4

Project —— 項目文件


項目文件為 unitypackage 文件包:

下載導入 Unity 即可使用
舉個栗子黑白88
免費下載 —— 項目資源


支持

May Be —— 搞開發,總有一天要做的事!


擁有自己的服務器,無需再找攻略!

Chinar 提供一站式教程,閉眼式創建!

為新手節省寶貴時間,避免采坑!


先點擊領取 —— 阿里全產品優惠券 (享受最低優惠)


1 —— 雲服務器超全購買流程 (新手必備!)

2 —— 阿里ECS雲服務器自定義配置 - 購買教程(新手必備!)

3—— Windows 服務器配置、運行、建站一條龍 !

4 —— Linux 服務器配置、運行、建站一條龍 !





技術交流群:806091680 ! Chinar 歡迎你的加入


END

本博客為非營利性個人原創,除部分有明確署名的作品外,所刊登的所有作品的著作權均為本人所擁有,本人保留所有法定權利。違者必究

對於需要復制、轉載、鏈接和傳播博客文章或內容的,請及時和本博主進行聯系,留言,Email: ichinar@icloud.com

對於經本博主明確授權和許可使用文章及內容的,使用時請注明文章或內容出處並注明網址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM