首先,我們需要有一個背景進度條,然後在背景下面新增顯示百分比的進度條圖片,再建立一個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)); } }
下面的寫法就沒有使用各種變數代替引數了,具體調整可以結合兩個方法