首页 > 其他分享 >Unity框架(场景切换模块)

Unity框架(场景切换模块)

时间:2024-09-09 16:51:58浏览次数:13  
标签:场景 name callBack Unity 切换 模块 using 加载

1、为什么要制作场景切换模块

在游戏开发中很多时候可能需要进行场景切换
只要存在场景切换,我们往往需要在 切换场景时 和 切换场景结束后 进行一些操作

2、实现场景切换模块的主要思路

1.制作SceneMgr单例模式管理器
2.实现同步加载场景 的公共方法
3.实现异步加载场景 的公共方法
4.实现外部获取异步加载场景进度

具体实现

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;

/// <summary>
/// 场景切换管理器 主要用于切换场景
/// </summary>
public class SceneMgr : BaseManager<SceneMgr>
{
    private SceneMgr() { }

    //同步切换场景的方法
    public void LoadScene(string name, UnityAction callBack = null)
    {
        //切换场景
        SceneManager.LoadScene(name);
        //调用回调
        callBack?.Invoke();
        callBack = null;
    }

    //异步切换场景的方法
    public void LoadSceneAsyn(string name, UnityAction callBack = null)
    {
        MonoMgr.Instance.StartCoroutine(ReallyLoadSceneAsyn(name, callBack));
    }

    private IEnumerator ReallyLoadSceneAsyn(string name, UnityAction callBack)
    {
        AsyncOperation ao = SceneManager.LoadSceneAsync(name);
        //不停的在协同程序中每帧检测是否加载结束 如果加载结束就不会进这个循环每帧执行了
        while (!ao.isDone)
        {
            //可以在这里利用事件中心 每一帧将进度发送给想要得到的地方
            EventCenter.Instance.EventTrigger<float>(E_EventType.E_SceneLoadChange, ao.progress);
            yield return 0;
        }
        //避免最后一帧直接结束了 没有同步1出去
        EventCenter.Instance.EventTrigger<float>(E_EventType.E_SceneLoadChange, 1);

        callBack?.Invoke();
        callBack = null;
    }
}

标签:场景,name,callBack,Unity,切换,模块,using,加载
From: https://blog.csdn.net/weixin_62613770/article/details/142063423

相关文章

  • 推荐一个Python流式JSON处理模块:streaming-json-py
    每天,我们的设备、应用程序和服务都在生成大量的数据流,这些数据往往大多是以JSON格式存在的。如何高效地解析和处理这些JSON数据流是一大挑战。今天,我要为大家介绍一个能极大简化这一过程的利器:streaming-json-pystreaming-json-py介绍streaming-json-py是一个专为实时......
  • vue打印模版模块,使用vue-plugin-hiprint插件搭建过程
    文章目录概要安装插件引入全局样式引入字体图标库完整demo解析-保存模版解析-左侧的自定义组件解析-视图容器解析-打印文件地址概要项目中,我们可能需要实现打印的需求功能,而打印时,用户可以先去编辑打印模版,这样再其他模版,只需要提供数据,就可以使用模......
  • 模块化IoT平台助力自动售货机大规模部署
    上半年全球知名的自动售货机供应商找到SECO赛柯寻求大批量的智能人机界面(HMI)解决方案。客户希望这些售货机不仅能够提供饮料,还能具备更多智能化功能。面对客户复杂的需求,SECO赛柯交出了一份满分答卷,不仅满足了客户独特的需求,还为其带来了显著的运营效率提升。客户需求● 大......
  • FastAPI模块化:为复杂应用程序提供清晰的结构
    开题描述:在现代软件开发中,随着应用程序规模的扩大和功能的增加,传统的单体架构逐渐暴露出其局限性。FastAPI,作为一款高性能的现代Web框架,通过其模块化设计提供了一种解决方案。本文将探讨FastAPI模块化如何为构建复杂应用程序提供清晰的结构,从而提高代码的可维护性、可扩展性和团队......
  • 构建模块化的FastAPI应用: 从用户认证到角色控制
    实现了用户身份验证及角色授权的基本功能。具体来说,当用户尝试访问某些资源时,系统会首先验证用户的身份,然后根据用户的角色来决定是否允许访问特定资源。例如,普通用户只能访问自己的信息,而管理员可以访问额外的管理界面。这种机制保证了系统的安全性,并且可以根据需要灵活地扩展不同......
  • (计算机论文)基于C#、Unity的先行者技能熟练度游戏系统的设计与实现
    毕业设计(论文)                    ​​​​​          ​博主可接毕设论文!!!论文题目:基于C#、Unity的先行者技能熟练度游戏系统的设计与实现 摘 要随着数字娱乐产业的蓬勃发展,独立游戏因其创新性和独特的游戏体验而受到越来越......
  • yum安装nginx没有某一模块,该如何添加第三方模块
    本文将以添加--with-stream模块为例,演示如何去添加新的模块进去。需求:生产有个接口是通过socket通信。nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信。实现方法:Centos7.5下yum直接安装的nginx,添加新模块支持tcp转发;重新编译Nginx并添加--with-stream参数。......
  • 【redis】redis的特性和主要应用场景
    文章目录redis的特性在内存中存储数据可编程的扩展能力持久化集群高可用快redis的应用场景实时数据存储缓存消息队列redis的特性redis的一些特性(优点)成就了它在内存中存储数据In-memorydatastructuresMySQL主要是通过“表”的方式来存储组织数据的“关系......
  • `match()`和`search()`在Python的`re`模块中的区别
    在Python的re模块中,match()和search()是两个非常重要的函数,它们都用于在字符串中搜索正则表达式的匹配项,但它们在搜索的起始位置和返回结果方面存在关键区别。一、match()函数match()函数尝试从字符串的起始位置匹配一个模式,如果不是从起始位置开始匹配的话,match()将不会成功......
  • Python中的`map()`函数和`filter()`函数及其应用场景
    在Python中,map()和filter()是两个内置的高阶函数,它们接受函数作为参数,并对序列(如列表、元组等)中的每个元素应用该函数。这两个函数虽然功能相似,但在使用目的和返回结果上有所不同。下面,我将分别详细解释map()和filter()函数的工作原理、应用场景,并探讨它们的异同点。1. map()......