在上一篇的博客中,我主要介绍了一些Loading界面制作上的理论知识,比如比较基础的场景制作中所需要的屏幕分辨率自适应效果,以及异步加载游戏场景中所需要的协同程序和异步加载关卡方法。
本篇博客中,我们将继续上一次的步骤,讲述Loading界面制作过程中的一些具体的代码部分。
由于Loading的脚本需要知道下一个加载的场景是什么,而这是需要上一个场景告诉它的,在场景切换之间,数据会丢失,而单例类的数据会一直保留,所以这里我们要用单例类来记录场景名称。
所谓的单例类,就是要保证一个类只有一个实例,并提供访问他的全局访问点。因为单例类的数据是全局访问的,所将要加载的场景的名称会一直保留,方便我们进行场景的切换。
public class Global {
public string loadName;
private static Global instance;
public static Global GetInstance()
{
if (instance == null)
instance = new Global();
return instance;
}
}
这里有一个字符串的变量loadname,就代表着场景的名称。
记录完下一个场景的名称后,就需要进行场景的过渡,在本游戏中,需要从登录界面过渡到加载界面,具体的方法是通过触摸屏幕,表示登录成功后,从登陆场景切换到Loading场景,然后在通过协同程序等待后台的资源加载完成以后,再自动地过渡到新手引导的场景。
public class OnPress : MonoBehaviour {
// Use this for initialization
public UICamera nguiCamera;
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButton(0)) {
Ray ray = nguiCamera.camera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) {
Global.GetInstance().loadName = "GameScene";
Application.LoadLevel("LoadingScene");
}
}
}
}
此处的 Global.GetInstance().loadName="GameScene",用于表示在Loading界面的下一个要加载的界面为名为GameScene的界面。
Application.LoadLevel("LoadingScene")表示切换界面到加载界面。
然后在后台进行新界面的加载。
public class Loading : MonoBehaviour {
void Start () {
StartCoroutine(loadScene());
}
IEnumerator loadScene()
{
AsyncOperation async = Application.LoadLevelAsync(Global.GetInstance().loadName);
yield return async;
}
}
要进行场景的切换,还需要再Unity里进行场景的注册。
选File->Build Settings...,上面有个Scenes In Build,你要把你用到的场景都加到这个框里,程序才能正常调用,否则程序写了也无效。
右下角有个Add Current的按钮,这是加载当前场景用的,你也可以直接把所有场景拖到这里。
后面的数字是关卡ID,0是第一个要加载的场景。
然后再对前台的工作进行处理,就可制作出最简单的Loading界面了。