游戲進度條
Slider
這個也是我們經(jīng)常用的組件筐钟,拖動條捡硅,我們可以用來做進度條,血條盗棵,調(diào)節(jié)音量壮韭,下邊我們介紹下他的核心組件
- Value 進度值
- Alpha 透明度
- Steps 每次變動步伐的大小,0表示無限制纹因。
- Foreground 進度條上層表示進度的圖片
- Background 底槽圖片
- Thumb 拖動塊
- Direction 填充方向
- OnValueChange 當我們進度發(fā)生變化時的一個回調(diào)函數(shù)
- Boxcollider 這個可有可無喷屋,假如我們在需要用鼠標對這個進度條進行拖動設(shè)置的時候,我們就必須把Boxcollider附加在底槽上瞭恰。(我們只是想通過拖動塊來進行移動屯曹,那我們也應(yīng)該在拖動塊上加個Boxcollider,這個大家可以去測試下)
大家可以看到我在Splid下邊加了2個Sprite和一個Label,分別是前后背景照片恶耽,還有一個是顯示當前進度的Label密任,大家可以把這個圖和上圖對比一下,就知道了偷俭。
這個就是制作出來的進度條浪讳。
異步加載 SceneManager.LoadSceneAsync
當我們需要加載下一 個場景的時候我們經(jīng)常會用到異步加載,異步加載就是在不阻塞主線程的情況下涌萤,還會加載場景淹遵。假如我們直接跳轉(zhuǎn)的話,有的時候場景很大负溪,我們跳到下一個場景需要卡頓一會才會加載完全透揣,這樣就會給玩家造成不流暢的感覺。
這里的第二行代碼就是讓他加載完成以后先不顯示川抡,等到我們想讓他顯示的時候再把他設(shè)置為True就好辐真。上圖中的next還有一個progress這個屬性,這是表示當前加載的進度崖堤。我們下邊會用到侍咱。
我們現(xiàn)在好多游戲的進度條都是假的,一般都是前邊和末尾是假的倘感,而只有中間才是真的放坏,(商家可以在此時宣傳一些活動,讓我們多看幾眼)老玛。我們看下代碼
void StartJDT()
{
//剛開始我的進度條是隱藏的淤年,執(zhí)行這個方法,讓進度條顯示出來
JDTPanel.SetActive(true);
//開啟協(xié)程蜡豹,讓他去執(zhí)行進度條加載麸粮,0.55f是進度條第一次的目標值為55%
StartCoroutine("St", 0.55f);
}
IEnumerator St(float tar)
{
//當進度條沒有到達tar點位的時候,他就會進入到下邊的循環(huán)
while (!IsEnd)
{
JDT.GetComponent<UISlider>().value = Mathf.MoveTowards(JDT.GetComponent<UISlider>().value, tar, Random.Range(0.001f, 0.05f));
if (JDT.GetComponent<UISlider>().value >= tar) { IsEnd = true; }
yield return new WaitForSeconds(Random.Range(0f, 0.2f));
}
}
void Update()
{
if (IsEnd)
{
if (next.progress<0.9f)
{
//當異步場景資源沒有加載加載完畢的時候镜廉,一般都是當progress為90%的時候就是加載完畢了
JDT.GetComponent<UISlider>().value = 0.55f + next.progress * 0.2f;
}
else
{
//當異步場景資源加載加載完畢的時候弄诲,我在開啟協(xié)程,然后讓進度條的目標位置為1
IsEnd = false;
StartCoroutine("St", 1f);
}
}
//當進度條進度為100%的時候娇唯,讓異步加載進來的場景顯示
if (JDT.GetComponent<UISlider>().value == 1)
{
next.allowSceneActivation = true;
}
}
這就是他顯示出來的效果
這個就是整體流程