Unity 3D开发--SceneManager场景管理(异步使用同一个过渡场景)

这篇具有很好参考价值的文章主要介绍了Unity 3D开发--SceneManager场景管理(异步使用同一个过渡场景)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在U3D开发过程中经常使用到多场景的切换,有同步SceneManager.LoadScene()和异步SceneManager.LoadSceneAsync()两种方法,同步的话一般就会卡住界面直到加载完成,使用异步的话一般都做一个加载的进度条,每次切换的时候都需要一个加载动画,所以需要建一个专门的过渡加载场景来进行统一加载,也可以避免场景直接切换出现的黑屏。

一、建立一个单例进行切换,在项目代码的任何位置都可以调用


public class LoadSceneManager 
{
    private static LoadSceneManager instance;
    public static LoadSceneManager Instance
    {
        get {
            if (instance == null)
            {
                instance = new LoadSceneManager();
            }
            return instance;
        }
    }

    public string nextSceneName;

    //异步加载
    public void LoadSceneAsync(string sceneName)
    {
        Debug.Log("LoadSceneAsync:" + sceneName);
        nextSceneName = sceneName;
        SceneManager.LoadScene("LoadingScene");
    }
    public void LoadScene(string sceneName)
    {
        Debug.Log("LoadScene:" + sceneName);
        SceneManager.LoadScene(sceneName);
    }

}

使用的时候直接使用LoadSceneManager.Instance.LoadSceneAsync("SecondScene");

二、异步加载的过程

要做个进度条然后进行管理,代码很简单就不说了


public class LoadingController : MonoBehaviour
{
    public Slider loadingSlider;
    public TMP_Text loadingText;
    private AsyncOperation asyncOperation;
    private float operationProgress;

    // Start is called before the first frame update
    void Start()
    {
        loadingSlider.value = 0.0f;
        if (SceneManager.GetActiveScene().name == "LoadingScene")
        {
            StartCoroutine("LoadingScene");
        }
    }

    IEnumerator LoadingScene()
    {
        asyncOperation = SceneManager.LoadSceneAsync(LoadSceneManager.Instance.nextSceneName);
        asyncOperation.allowSceneActivation = false;
        yield return asyncOperation;
    }

    // Update is called once per frame
    void Update()
    {
        operationProgress = asyncOperation.progress;
        //最大值只到0.9,后面有进行插值运算更新
        if (Mathf.Approximately(operationProgress, 0.9f))
        {
            operationProgress = 1;
        }
        if (Mathf.Approximately(operationProgress, 0.6f))
        {
            System.Threading.Thread.Sleep(5000);
        }
        UpdateLoadingUI(operationProgress);
    }
    private void UpdateLoadingUI(float value)
    {
        if (operationProgress != loadingSlider.value)
        {
            loadingSlider.value = Mathf.Lerp(loadingSlider.value, operationProgress, Time.deltaTime * 2);
            if (Mathf.Approximately(operationProgress, operationProgress))
            {
                loadingSlider.value = operationProgress;
            }
        }
        Debug.Log("Progress:" + loadingSlider.value);
        if (loadingText != null)
        {
            loadingText.text = Mathf.Round(loadingSlider.value * 100) + "%";
        }

        //自动换场景
        if (Mathf.Approximately(loadingSlider.value, 1.0f))
        {
            asyncOperation.allowSceneActivation = true;
        }
    }
}

三、demo链接

https://download.csdn.net/download/emailforwei/87329335


 文章来源地址https://www.toymoban.com/news/detail-634441.html

到了这里,关于Unity 3D开发--SceneManager场景管理(异步使用同一个过渡场景)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 3D 开发--UI管理框架

    一、UI基类 一般情况下都是用Panel做容器来放各种控件的,一个Panle相当一个UI小界面,然后做成Prefab进行加载,所有界面都有载入载出功能,有的可能还有等待和恢复的,适合建立一个UI基类,然后各个子界面继承。 二、UI子类 每个UI子界面都继承基类,然后实现各个方法,

    2024年02月13日
    浏览(45)
  • 23. Unity - 3D游戏开发小计02 --- 动画结束UI、导航网格代理、场景搭建插件(ProGrids,ProBuilder,Polybrush)

    1. 动画结束UI 一个游戏在通过后,都是需要一个界面显示当前游戏已经结束,即需要给游戏添加一个结束的界面,可以做一个简单的游戏结束界面,用一个图片展示: 首先在 层级窗口 添加两层UI中的Image,其中第一层的Image仅作背景,可将其填充颜色设置为纯黑色,第二层的

    2024年02月05日
    浏览(51)
  • Unity基础 异步加载场景

    异步加载场景的基本概念 在Unity中,异步加载场景是指在游戏运行时,将场景中的资源分批次加载到内存中,以便提高游戏的加载速度和性能。通常情况下,加载场景的过程会在主线程中执行,而异步加载场景可以在后台线程中执行,从而不会阻塞主线程。 要使用异步加载首

    2024年02月12日
    浏览(44)
  • Unity实现异步加载场景

    一:创建UGUI 首先我们在LoginCanvas登入面板下面创建一个Panel,取名为LoadScreen,再在loadScreen下面创建一个Image组件,放置背景图片,然后我们再在lpadScreen下面继续创建一个Slider,这个是用来加载进度条的,我们改名为LoadSlider。我们为什么需要改名字,为了见名之一,不至于过段时

    2024年02月12日
    浏览(36)
  • Unity异步加载场景

    当我们的场景资源过大时,为了能够不影响玩家体验,就会使用异步加载。 官方文档:AsyncOperation - Unity 脚本 API AsyncOperation的API allowSceneActivation 允许在场景准备就绪后立即激活场景。 isDone 操作是否已完成?(只读) priority Priority 允许您调整执行异步操作调用的顺序。 pro

    2024年02月02日
    浏览(42)
  • GameFrameWork框架(Unity3D)使用笔记(八) 实现场景加载进度条

            游戏在转换场景的时候,需要花费时间来加载相关的资源。而这个过程往往因为游戏场景的规模和复杂度以及玩家电脑配置的原因花费一小段时间(虽然这个项目里用不到)。         所以,如果这一小段时间,画面就卡在这里,啥也做不了,玩家也不知道啥时候能

    2024年02月02日
    浏览(46)
  • 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    Unity 中使用的 3D 模型格式为 FBX , 使用如下建模软件 可制作该类型模型 : 3Dmax Maya ZBrush Cinema4D Blender 建模完成后 , 将 3D 模型导出为 FBX ( .fbx ) 格式 即可在 Unity 中使用 ; 在 Project 文件窗口 中的 Asstes 目录 下 , 创建一个模型目录 Models , 将 模型文件直接从文件系统中拖到该目录中

    2023年04月15日
    浏览(76)
  • 【Unity】实用功能开发(一)实现在UI中用RawImage实时展示3D模型(背景透明,并通过UI防止3D场景遮挡)并可以通过分层完成:游戏中的人物状态展示界面,小地图,人物实时头像状态等功能

    有时由于项目效果需要,部分功能的实现受到阻碍,这里收集一些已实现的思路和方法,每次会记录大致需求和遇到的问题,如果有更好的想法,欢迎评论区讨论!!! 目录 功能描述: 需求描述: 实现步骤: ①为需要展示的内容区分层级: ②在场景中添加一个摄像机,并

    2024年02月04日
    浏览(45)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(72)
  • 【Unity3D日常开发】Unity3D中协程的使用

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 最近有小伙伴问协程怎么用、怎么写,我也是会用会写,但是原理不是很明白。 学习了一下,总结出

    2024年02月12日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包