制作游戏加载进度条
首先,我们需要有一个背景进度条,然后在背景下面添加显示百分比的进度条图片,再创建一个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)); } }
下面的写法就没有使用各种变量代替参数了,具体调整可以结合两个方法