3、场景操作

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);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容