unity中场景加载中有:同步加载和异步加载
首先需要在File->Building Setting中设置添加场景,把需要的场景托到Scenes In Build里
然后设置触发条件,比如点击一个button响应一个方法,这个方法就是跳转到下一个场景
public void NextScene()
{
//也可以加载索引
Application.LoadLevel("yourScene");//:同步加载,加载后,前一个场景的东西都将被销毁
}
下面说说场景加载的几个方法:4种
//异步:也就是加载新场景的行为是在一个后台线程中进行的,不影响主线程的运行,
这样在加载B的时候当前场景A不受影响,可以继续运行,即使场景B很大也不会感觉到卡顿。
Application.LoadLevelAsync ("yourScene");//异步加载,加载后,前一个场景的东西都将被销毁
Application.LoadLevelAdditive ("yourScene");//同步附加式加载 ,不会销毁前一个场景的东西
Application.LoadLevelAdditiveAsync ("yourScene");//异步附加式加载 ,不会销毁前一个场景的东西
下面是一个协同程序:可以用来给进度条场景,用来读取下一个场景的加载进度,
public void NextScene()
{
//也可以加载索引
Application.LoadLevel("进度条场景");
}
进度条场景,脚本可以挂在,摄像机上
void Start()//自动执行的方法
{
StartCoroutine (loadScene ());//开启一个协同程序,需要传一个IEnumerator类型的方法
或者是字符串(方法的名字)
}
IEnumerator loadScene()//被调用的方法,
{
async = Application.LoadLevelAsync ("Loading1");
//这里在方法里开启一个异步加载页面,
//异步加载返回一个异步对象,可以用来读取加载进度 async.progress
//利用这个返回的值可以在Update里写读取进度,当然也的用到(NGUI)
yield return async ;
}
下面是一个完整的进度条脚本
using UnityEngine;
using System.Collections;
public class Loading1 : MonoBehaviour {
private AsyncOperation asy;
public UIProgressBar pro;
// Use this for initialization
void Start () {
if (pro) {
pro.value = 0;
}
StartCoroutine (jumpscene ());
}
// Update is called once per frame
void Update () {
// if (asy.progress < 0.9f) {
// pro.value = asy.progress;
// } else {
// pro.value = 1;
// }
pro.value += 0.01f;
if (pro.value.Equals(1)) {
Application.LoadLevel ("HeroChoose");
}
}
IEnumerator jumpscene(){
//asy = Application.LoadLevelAsync ("HeroChoose");
yield return asy;
}
}