製作遊戲載入進度條

Jet清远發表於2024-10-30

首先,我們需要有一個背景進度條,然後在背景下面新增顯示百分比的進度條圖片,再建立一個Text,用於顯示具體的百分比數字

大致結構如下:

然後就是透過程式碼實現這個功能了:

[SerializeField]
private Image ProcessBar;
[SerializeField]
private Text ProcessText;
private float DefLoadTimes = 4.8f;//主體進度預設需要花的時間 單位:秒
private float DefPercent = 0.8f;//主體進度值 

private void UpdateLoadProcess()
{
    if (Time.timeSinceLevelLoad < DefLoadTimes)
    {
        ProcessBar.fillAmount = (Time.timeSinceLevelLoad / DefLoadTimes) * DefPercent;

    }
    else
    {
        ProcessBar.fillAmount = Mathf.Min(0.98f, DefPercent + (Time.timeSinceLevelLoad - DefLoadTimes) / (DefLoadTimes * 2.0f) * (0.98f - DefPercent));
    }
    ProcessText.text = (ProcessBar.fillAmount * 100) + "%";
}

將這個UpdateLoadProcess放入Unity的生命週期函式Update中即可實現進度條載入的效果,如果需要在某個時機呼叫,那麼在Udapte裡面做條件判斷即可。

上述程式碼用到的Time.timeSinceLevelLoad是Unity記錄場景時間的,如果我們想要自己控制,比如遊戲內某個不需要切換場景,但是要實現進度條的功能,我們可以直接用計時器的寫法來控制:

public static float start_Time = 0;
public static float UpdateLoadProcess()
{

    float elapsedTime = Time.time - start_Time;
    if (elapsedTime < 4.8f)
    {
        return (elapsedTime / 4.8f) * 0.8f;
    }
    else
    {
        return Mathf.Min(0.98f, 0.5f + (elapsedTime - 4.8f) / (4.8f * 2.0f) * (0.98f - 0.8f));
    }

}

下面的寫法就沒有使用各種變數代替引數了,具體調整可以結合兩個方法

相關文章