1、场景的基本操作
1、创建新场景
Ctrl+N快捷键可以快速创建出新场景,创建出来的是一个临时的场景,需要保存起来后续才能使用(三种场景可供选择创建)
创建场景
2、修改和保存场景
修改:打开场景后直接对里面的物体进行修改,比如添加物体、删除物体,给物体添加组件等。
保存:修改完毕后需要保存才能生效,保存的快捷键是Ctrl+S.
3、删除场景
右键选择要删除的场景,直接点击删除即可。
2、场景加载
1、场景同步加载
1、把场景添加到可加载的场景里面
左上角文件-Bulid Settings然后把要使用的场景拖动进Bulid Scene中
场景拖入
2、同步加载API
1、SceneManager .LoadScene()
参数可以传递场景名称或者场景的索引
2、如果加载场景需要保持旧场景不被销毁,可以第一重参数填写完之后输入“,”填写第二重参数,填写LoadSceneMode.Additive即可。
void Start() {
// , LoadSceneMode.Additive 附加,不删除前一个场景
SceneManager.LoadScene(1, LoadSceneMode.Additive);
}
2、场景异步加载
1、和同步加载区别
1、同步加载的过程线程是阻塞住的
2、异步是不会阻塞线程的,可以在加载的过程中继续去执行一些代码,比如说去同步每个玩家的加载进度。
2、异步加载API
SceneManager.LoadSceneAsync()
,参数和同步加载的一样,有返回值,返回一个AsyncOperation
3、AsyncOperation作用
1、AsyncOperation.isDone可以用来判断是否加载完成,实际上用到比较少,较多的还是用进度,因为这个属性呢是要加载完毕且开启跳转后,跳转成功了才会变为完成
2、AsyncOperation.allowSceneActivation加载完成后是否允许跳转,当我们不允许的时候,他即使加载完成了也不会跳转过去
3、AsyncOperation.progress是他的加载进度,实际上呢到0.9就已经是加载完了的,所以如果要根据这个进度做加载进度条呢,需要做一些处理。
void Start() {
// 开启协成
StartCoroutine(Load());
}
private IEnumerator Load() {
AsyncOperation asyncOperation = SceneManager.LoadSceneAsync("Scenes/Scenes3", LoadSceneMode.Additive);
asyncOperation.allowSceneActivation = false;
while (asyncOperation.progress < 0.9f) {
Debug.Log("当前进度" + asyncOperation.progress);
yield return null;
}
Debug.Log("当前进度" + asyncOperation.progress);
asyncOperation.allowSceneActivation = true;
yield return null;
if (asyncOperation.isDone) {
Debug.Log("加载完成");
} else {
Debug.Log("加载失败");
}
}
3、保留物体到下个场景中
使用的API:DontDestroyOnLoad();
void Start() {
GameObject gameObject = GameObject.Find("Capsule");
DontDestroyOnLoad(gameObject);
SceneManager.LoadScene(1, LoadSceneMode.Additive);
}