这里的一些代码是从别的大神那拷贝下来学习的,感谢这些大神们,写这篇东西主要是给自己留个备忘,也是给大家分享下我在学习之中的一些心得,以下是鄙人的粗略见解,有太多学识浅薄之处还望诸君不吝指正。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class NewBehaviourScript : MonoBehaviour
{
private AsyncOperation aync;
public GameObject sprite;
private int loadcount = 0;
public Text loadtext; //这里用文本显示进度值的变量
public UISprite ui_sprite;
public UISlider ui_slider;
public GameObject ui_root;
public GameObject slider;
关于这个ngui的组件slider 我是从 ngui 自带案例里拷贝的,具体制作方法可以翻翻我其他的博客
private void Start()
{
ui_root = GameObject.Find("Control 1");
slider = ui_root.transform.Find("Slider").gameObject;
ui_slider = slider.GetComponent<UISlider>();
// load = slider.GetComponent<UISlider>();
}
public void Back() //back是我自定义的方法各位爱叫啥叫啥
{
ui_sprite = sprite.GetComponent<UISprite>();
ui_sprite.depth = 0; //这里是让按钮点击后其权值后退一位,注意!这不是隐藏所以还是可以点击的
slider.SetActive(true); //按钮隐身后,隐藏的进度条现身!
// sprite.SetActive(false);
StartCoroutine("LoadScence");
}
IEnumerator LoadScence()
{
aync = SceneManager.LoadSceneAsync("LoadScence"); //LoadScence为要跳转的场景
aync.allowSceneActivation = false; //等同于isDone==false,意思是如果加载完成场景不会自动跳转
yield return aync; //这里会返回一个0或1
}
void Update()
{
if (aync ==null )
{
return;
}
int progrssvalue = 0;
if (aync.progress < 0.9f)
{
progrssvalue = (int)aync.progress * 100;
}
else
{
progrssvalue = 100;
}
if (loadcount<progrssvalue)
{
loadcount++;
ui_slider.value+ =loadcount/100f ; //这里要注意!!一开始我复制那位大神的代码后调试时发现进度条只会在最后一刻直接拉满,后来我才发现要加多个100后面f,但之前的程序没报错,我猜应该是和value是double类型有关
loadtext.text = loadcount.ToString() + "%";
}
if (loadcount==100)
{
aync.allowSceneActivation = true ; //如果loadcount拉满就立刻跳转场景
}
}
}
做出来的效果是当你按下某个键时键的可见度为0(被背景板挡住)然后显示进度条(注意:并不是跳转到一个专门的场景来显示进度条)