ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Unity程序基础框架(四) 场景切换模块

2021-09-20 16:33:26  阅读:199  来源: 互联网

标签:sceneName 场景 模块 ao Unity 切换 func 加载


场景切换模块

一般来说, 进入场景前默认都是场景加载的时候就已经人物等这些都是原本存在的。
那为什么需要专门有一个场景切换模块呢?
因为在实际的游戏中,游戏场景其实是空的,是通过配置文件去加载游戏场景,通过玩家的信息、选择等,动态创建玩家相应的游戏场景,因此我们需要有一个场景切换的模块,用于传递场景切换的信息给下一个游戏场景。所以场景切换模块是用于提供给外部一个场景切换的接口。

实现

① 同步加载

在场景加载的过程中,不可以继续进行其余操作,要等到场景切换完成才可以。

/// <summary>
/// 场景切换管理类
/// </summary>
public class SceneLoadManager : Singleton<SceneLoadManager>
{
    /// <summary>
    /// 场景切换 同步加载(场景加载完之后,再执行其余相关的方法)
    /// </summary>
    /// <param name="sceneName">加载的场景</param>
    /// <param name="func">切换场景要执行的方法</param>
    public void LoadScene(string sceneName, UnityAction func)
    {
        // 切换场景
        SceneManager.LoadScene(sceneName);
        // 场景切换之后再执行相应的其余的加载
        func();
    }

② 异步加载
在切换场景的时候,通过为切换场景的方法开启协程,可以实现 场景切换的过程中 继续实现其余方法的加载。
在这个过程中,我们还可以利用加载进度 来让玩家知道场景加载时画面并不是卡死的,而且可以在加载过程中 开启协程,向外派发事件供外部监听。

    /// <summary>
    /// 场景切换异步加载的封装
    /// </summary>
    /// <param name="sceneName">加载的场景</param>
    /// <param name="func">切换场景要执行的方法</param>
    public void LoadSceneAsync(string sceneName, UnityAction func)
    {
        // 利用Mono管理器实现没有继承MonoBehavior开启协程
        MonoManeger.GetInstance().StartCoroutine(LoadingSceneAsync(sceneName, func));

    }

    /// <summary>
    /// 场景切换 异步加载(场景加载的过程中,可以同时执行其余相关的方法)
    /// </summary>
    /// <param name="sceneName">加载的场景</param>
    /// <param name="func">切换场景要执行的方法</param>
    public IEnumerator LoadingSceneAsync(string sceneName, UnityAction func)
    {
        AsyncOperation ao = SceneManager.LoadSceneAsync(sceneName);
        // 如果没有场景加载完成,通过协程实现进度的更新,可以用于事件分发,供外部监听
        while (!ao.isDone)
        {
            //EventCenter.GetInstance().EventAddListener("LoadScenePorgress", ao.progress);
            yield return ao.progress;
        }
        yield return ao;
        
        func();
    }

func方法就是进行动态加载的方法,想写什么都可以写。

转载链接 Unity游戏框架学习笔记——05场景切换模块

标签:sceneName,场景,模块,ao,Unity,切换,func,加载
来源: https://www.cnblogs.com/MinervaZhang/p/15314523.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有