兽人永不为奴!!!联盟狗们,拔剑吧!!!
那个啥,言归正传。
首先看一下Unity的两个加载函数
同步加载
:加载完毕新场景才会继续执行别的事
异步加载
:在后台加载新的场景,在此过程中还可以执行其他的事情
值得注意的是:异步加载虽然在后台加载,但是,因为程序对内存进行大量的操作,所以依然会有一定的卡顿(例如:我叫MT2进入画面)
同步加载比较简单
调用函数即可
Application.LoadLevel("SceneName");
Application.LoadLevel("SceneIndex");
异步加载相对比较麻烦
首先,利用NGUI建立一个UISlider组件,将其前景预制件UISlider和显示加载百分比的UILabel
其次,添加如下代码:
using UnityEngine;
using System.Collections;
public class LoadingScene : MonoBehaviour {
//静态字符串保存要加载的场景名字
public static string LoadingName;
//静态int类型保存要加载的场景索引
public static int LoadIndex;
//引用UI组件
public UISlider slider;
public UILabel lable;
//声明一个异步进度变量
AsyncOperation asyn;
// Use this for initialization
void Start () {
if (slider == null || lable == null)
{
Debug.Log("Error");
}
else
{
Debug.Log("Successful");
}
//进入这个场景就立即协程加载新场景
StartCoroutine("BeginLoading");
}
// Update is called once per frame
void Update () {
//更新UI
slider.value = asyn.progress;
//加载进度
lable.text = (slider.value * 100).ToString(".00");
}
//加载目标场景的函数
IEnumerator BeginLoading()
{
if (LoadingName == null)
{
asyn = Application.LoadLevelAsync(LoadIndex);
}
else
{
asyn = Application.LoadLevelAsync(LoadingName);
}
yield return asyn;
}
//设计一个封装好的静态函数,为了和Unity一致
//设计以场景名称和场景索引的静态函数
/// <summary>
/// 异步加载函数
/// </summary>
/// <param name="value">场景名称</param>
public static void LoadNewScene(string value)
{
LoadingName = value;
Application.LoadLevel(LoadingName);
}
/// <summary>
/// 异步加载函数
/// </summary>
/// <param name="value">场景索引</param>
public static void LoadNewScene(int value)
{
LoadIndex = value;
Application.LoadLevel(LoadIndex);
}
}
欢迎关注我的微信个人订阅号
每天多学一点0.0