Unity 异步加载 解决方案

Unity多场景叠加实战:用附加模式加载第二个场景,解决AudioListener重复警告 本文详细介绍了Unity中多场景叠加的实战技巧,重点讲解如何使用附加模式加载第二个场景并解决AudioListener重复警告问题。通过代码示例和最佳实践,帮助开发者高效管理场景组件,优化游戏架构设计,提升开发效率。 阅读详情

游戏在跳转大场景界面时,直接切换场景,会产生长时间的卡顿,体验很不好(还以为游戏挂掉了)

今天主要研究Unity的异步加载

新的异步加载接口 需要命名空间

using UnityEngine.SceneManagement;

使用

//异步加载
SceneManager.LoadSceneAsync(loadName,LoadSceneMode.Additive);
SceneManager.LoadSceneAsync(loadName, LoadSceneMode.Single);
//同步加载
SceneManager.LoadScene(loadName, LoadSceneMode.Additive);
SceneManager.LoadScene(loadName, LoadSceneMode.Single);

LoadSceneMode.Additive 累加形势加载场景,保留之前的场景

LoadSceneMode.Single 加载场景完场景以后,删除掉之前的场景

我们主要讨论异步加载 -》LoadSceneAsync

 

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class LoadingUI : MonoBehaviour {
    public static string loadName;
    public Text text;
    //异步对象
    AsyncOperation async;
    int displayProgress = 0;
    int toProgress = 0;
    //读取场景的进度,它的取值范围在0 - 1 之间。
    int progress = 0;

    void Start()
    {
        //在这里开启一个异步任务,
        //进入loadScene方法。
        StartCoroutine(loadScene());
    }

    //注意这里返回值一定是 IEnumerator
    IEnumerator loadScene()
    {
        //异步读取场景。
        //Globe.loadName 就是A场景中需要读取的C场景名称。
        async = SceneManager.LoadSceneAsync(loadName);
        //防止Unity加载完毕后直接切换场景
        async.allowSceneActivation = false;

        while (async.progress < 0.9f)
        {
            toProgress = (int)async.progress * 100;
            while (displayProgress < toProgress)
            {
                ++displayProgress;
                yield return new WaitForEndOfFrame();
            }
        }

        toProgress = 100;
        while (displayProgress < toProgress)
        {
            ++displayProgress;
          
            yield return new WaitForEndOfFrame();
        }
        //切换场景
        async.allowSceneActivation = true;
    }


    void Update()
    {
        //使用UGUI显示进度
        text.text = displayProgress.ToString();
    }

}

通过异步加载  获取AsyncOperation的progress 属性可以获取将要加载的场景进度,由于progress值不稳等(Application.LoadLevelAsync并不是真正的加载,而是每一帧加载一点资源,然后给出progress值)

所有我们通过没帧去更新累加,让进度值保持稳定累加。

当达到0.9的时候,progress值不会上升,我们强制更改到100,在每帧更新即可。

 

Unity --- 场景/场景管理类 与 异步场景加载法 1.一个游戏是由很多的场景组成的,比如游戏的开始页面,战斗场景,商店页面...等等,这些都是一个个游戏场景或者比如说:一进入游戏,你一开始来到的是新手村这个场景,出了新手村后来到的就是荒野场景,过来荒野场景后来到的就是大城市场景.....一个游戏是由很多的场景组成的,而每个场景又由很多的游戏物体组成,而每个游戏物体又由很多的脚本组件组成之前我们一直是在默认的场景中添加游戏物体,其实我们也可以添加新的游戏场景,并通过游戏代码加载新的场景这个就是一开始Unity自动为我们创建的示例场景(默认场景) 阅读详情

相关推荐

当DontDestroyOnLoad遇上异步加载:Unity场景切换时物体保留的终极解决方案

本文深入探讨了Unity中DontDestroyOnLoad方法与异步场景加载(特别是预加载)结合时产生的冲突问题。通过分析其内部机制,提出了利用SceneManager.MoveGameObjectToScene方法的终极解决方案,并提供了完整的预加载系统实现代码,确保跨场景对象在异步切换时能被正确保留和管理。

weixin_29006701的博客 355

Unity学习_场景管理(同步加载+异步加载+保留物体)

新建场景 可以CTRL+N(记得保存),也可以在File下面New Scen切换场景别忘记场景放在Build Settings中,可直接选中拖拽。 同步加载和异步加载: 无论是同步加载还是异步加载最好使用文件路径名称作为参数,防止重名的时候加载错。 同步加载:SceneManager.LoadScene("Scenes/Scence02"); 线程是阻塞的 异步加载:SceneManager.LoadSceneAsync("Scenes/Scence...

晴天下的大头娃娃 5046

Unity多场景异步加载实战:基于UniTask与Addressables的零卡顿解决方案

在Unity游戏开发中,异步编程是优化性能、提升用户体验的核心技术。其原理在于将耗时的I/O操作(如资源加载)置于后台执行,避免阻塞主线程导致的画面卡顿。这项技术的核心价值在于实现流畅的游戏体验和高效的资源管理,广泛应用于大型开放世界、RPG等需要无缝切换场景的游戏类型。通过C#原生的async/await语法,开发者能以同步代码的清晰逻辑处理复杂的异步流程。本文聚焦于利用UniTask这一高性能异步库,结合Addressables资源管理系统,构建一套解决传统协程与回调地狱问题的多场景加载方案,实现零GC

weixin_30294295的博客 393

Unity多场景加载时,烘焙光照数据的注意事项

当使用加载场景时,场景的烘焙数据是不会一起加载进来的,就是原因当然激活状态的场景不是加载的场景。

qq_41727685的博客 578

Unity多场景资源协作:UniTask异步加载与冲突解决方案

在Unity游戏开发中,异步编程是处理资源加载、场景管理等复杂任务的核心技术。其原理在于通过非阻塞操作,允许主线程在等待耗时任务(如IO、网络请求)完成时继续执行其他逻辑,从而提升程序响应性和资源利用率。从技术价值看,良好的异步架构能显著优化用户体验,避免卡顿,并支撑模块化、热更新等现代游戏工程需求。应用场景广泛覆盖场景加载、资源管理、UI响应及网络通信等环节。针对多场景资源协作这一典型场景,Unity原生协程存在无法返回值、错误处理困难、组合能力差等局限,而.NET Task则面临线程安全与GC压力问题。

weixin_33100393的博客 304

Unity场景切换卡顿解决方案:基于UniTask的异步加载与进度同步实践

在Unity游戏开发中,异步编程是优化性能、提升用户体验的核心技术之一。其原理在于通过非阻塞操作,允许主线程在等待耗时任务(如资源加载)完成的同时继续处理其他工作,从而避免界面卡顿。这一技术对于需要频繁切换场景或加载大量资源的游戏(如RPG、开放世界)具有重要价值,能显著改善玩家体验。传统方案如协程或回调函数在管理复杂并发任务时,常面临代码结构混乱、进度同步困难等问题。而基于C# async/await的现代异步框架,通过提供更清晰的控制流和进度报告机制,为构建流畅的加载流程提供了基础。本文聚焦于Unity

weixin_29009971的博客 320

Unity异步加载材质显示异常:原理、排查与解决方案

在Unity3D开发中,异步加载是优化大型场景和动态资源管理的核心技术,它通过后台线程处理资源加载,避免主线程阻塞。其原理涉及资源反序列化、Shader编译和GPU数据上传等多个环节的时序协调。然而,异步加载常引发材质显示异常,如模型加载后材质呈现粉红色、颜色失真或光照错误,这通常是因为资源加载完成与渲染管线就绪之间存在“时差”。这种问题的技术价值在于,理解并解决它能够提升项目的视觉稳定性和用户体验。应用场景广泛,包括网络资源加载、AssetBundle动态加载以及UGUI元素的动态创建等。本文聚焦于Uni

dezhen7015的博客 440

关于Unity资源异步加载的研究

异步加载资源是现在的主流技术,于是先废话一段。 先从DX说起 最早的想法是即使Unity 不支持异步加载,也可以用C#的多线程机制自己实现,不过这个想法明显行不通。玩过DX的都知道异步加载需要涉及到显示设备的管理问题,管理不好就会直接崩溃。从磁盘到文件这点做异步是一点问题也没有,最早我自己尝试的时候也是这样,后来发现没多少用处,因为最费时的其实不是加载,而是资源的初始化! 是的,从内

1万+

Unity异步加载场景时DontDestroyOnLoad对象管理的终极解决方案

在Unity游戏开发中,场景管理与对象生命周期是核心基础概念。DontDestroyOnLoad API允许游戏对象在场景切换时不被销毁,常用于实现全局管理器。然而,其原理是将对象移至独立场景,而非赋予其完全免疫的生命周期。当引入异步场景加载(SceneManager.LoadSceneAsync)时,新旧场景生命周期重叠,会引发单例模式破坏、协程中断、资源引用丢失等一系列技术挑战。这些问题的本质是持久化对象与异步加载流程间的协调失控。本文针对这一高频痛点,提出了一套基于中心化管理的工程实践方案,通过设计P

clijovtbq401783153的博客 597

Unity 制作翻书电子书,外部异步加载千张图片(一)

Unity 制作翻书电子书,外部异步加载千张图片 Hello!这是我的第一篇文章,希望在你阅读这篇文章之后对你能有帮助。 之前我做过两次电子书的程序,用的都是网上随便一搜就能找到的插件,很方便,参数调节都是现成的,图片拖到编辑器中基本就拿来就能用。 But这次我就抓瞎了,因为这次需要加载的图片大概有一万多张,共计十六卷,试想,这么多图片就算压缩到很小,拖到编辑器里,让程序跑起来,内存也就爆了(因为我很天真,所以我试过不行,而且书页不能压缩太小,不然字就看不清楚了)。 所以我就想了第一个方案,干脆把书本..

qq_39851527的博客 2703

【Unity每日一记】SceneManager场景资源动态加载

场景异步加载 和 资源异步加载 一样。

秩沅 5597

Unity异步加载材质显示异常:原理剖析与实战解决方案

在Unity开发中,异步加载(Async Loading)是优化性能、实现动态资源管理的核心技术,尤其在UI系统和大型场景中应用广泛。其原理是通过非阻塞方式在后台线程读取资源,避免主线程卡顿,从而提升应用流畅度。这项技术的核心价值在于平衡了资源加载效率与用户体验,广泛应用于游戏UI、动态换装、场景流式加载等场景。然而,开发者常会遇到异步加载的材质或纹理在Image组件上“消失”或显示异常的问题,这通常并非加载API本身的缺陷,而是源于对Unity渲染管线、材质实例化机制与Canvas刷新时机协同工作的理解不

cqwf95925的博客 418

AD9026芯片开发实战:从Example Code到API调用的关键步骤解析

本文详细解析了AD9026芯片开发的核心流程,重点阐述了如何从官方提供的Example Code入手,逐步理解硬件平台发现、HAL层初始化、配置加载、芯片复位、固件启动、JESD链路建立等关键API调用序列。通过剖析示例工程的结构与核心文件,为开发者在自定义硬件平台上移植和调试AD9026驱动提供了清晰的实战指南。

java5的博客 788

Unity场景切换实战:从UI绑定到异步加载的完整解决方案

在Unity游戏开发中,场景管理是构建流畅用户体验的核心基础。其原理在于通过引擎内置的SceneManagement API,控制游戏内容单元的加载与卸载。这项技术的核心价值在于实现游戏关卡、菜单界面间的无缝衔接,是保障游戏流程连贯性的关键技术。典型的应用场景包括主菜单到游戏关卡的跳转、关卡之间的切换以及暂停菜单的呼出。本文将深入探讨如何结合UI事件系统,通过异步加载避免界面卡顿,并设计专业的加载界面提供视觉反馈。针对实际开发中常见的进度条卡在90%、场景切换黑屏等问题,提供了具体的解决方案和调试技巧,例如

weixin_30737899的博客 313

倍福Beckhoff运动控制功能块实战解析:从MC_ReadActualPosition到MC_GearInVelo

本文深入解析倍福(Beckhoff)TwinCAT运动控制功能块,从基础的MC_ReadActualPosition、MC_Power等轴状态读取与使能操作,到MC_MoveAbsolute、MC_MoveRelative等单轴定位指令,并重点剖析了用于动态速度同步的核心功能块MC_GearInVelo在飞锯等场景的应用。文章结合实战经验,详细介绍了齿轮耦合、电子凸轮(MC_CamIn)等高级同步功能的参数配置、调试技巧及常见问题,旨在帮助工程师快速掌握倍福运动控制工具箱,实现复杂的同步工艺。

transformer2023的博客 981

支付系统保证可靠性的秘诀 ----- 订单的补偿和补单

文章目录WHAT? 前言WHY? 为什么要用多级缓存?HOW 怎么做?方案 版本1:数据库存储专线配置通过优先级进行动态上下线方案 版本1 劣势:方案 版本2 :本地缓存替代数据库方案 版本2 劣势:方案 版本3:分布式缓存做自动补偿方案 版本3 总结:Where 分布式多级缓存还能用在哪些地方?总结 WHAT? 前言 刚入职场的时候觉得支付宝等第三方支付系统好强大,要保证这么多的交易不能错,也不能重复还要保证正确的扣钱,直到后面接触订单系统以及第三方支付公司的核心交易系统后才真正窥探到了支付系统的核心

boboaisisi的专栏 3534

【Unity】AssetBundle资源异步加载以及AB包卸载

AssetBundle异步加载,封装AB包加载器(完结)。

weixin_43453797的博客 3909

OFDM基本原理

OFDM基础介绍,包括OFDM的核心思想,数学推导了OFDM信号的调制解调过程。

伊丽莎白的学习之路 8908

Unity可自定义loading页的异步加载工具,免费下载,使用说明

Unity可自定义loading页的异步加载工具,免费下载,使用说明

qq_33161296的博客 985

【实战学习(五)】开源项目学习之uWSGI的部署以及配合nginx

文章目录1)uWSGI是什么?1.1 WSGI1.1.1 Application端1.1.2 Server端1.1.3 WSGI中间件1.2 uwgi1.3 uWSGI、WSGI、uwsgi之间的关系*为什么有了uWSGI为什么还需要nginx?2)连接uwsgi和Django*避坑之Windows10安装uWSGI非常极其艰难,最好勿浪费时间,直接转战Linux吧:2.1 uWGI部署2.1.1 在虚拟环境下安装uwsgi:2.1.2 测试uWSGI的运行2.1.3 使用uWSGI运行Django项目2.

黑黑白白君的博客 1507

RapidScada在windows下的安装(详细)

1.下载地址:RapidScada官网 2.版本说明 有Linux版本和Windows版本,看自己的需求下载,推荐下载最新稳定版本。 3.系统要求 4.安装前的准备(windows10) 首先打开Windows功能: 先关闭 Microsoft .NET Framework3.5的 Windows Communication Foundation 子组件。如下图: Microsoft .NET Framework配置按下图勾选: iis安装的功能: 5.安装 解压..

m0_51275803的博客 4262

AssetBundle异步加载资源阻塞主线程的疑问

1)AssetBundle异步加载资源阻塞主线程的疑问 2)Memory Profiler中ShaderLab占用内存大 3)关于C#垃圾回收的问题 4)RenderTexture占用内存过高 5)Unity 2018.4.17f1异步加载AssetBundle 这是第197篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。 ...

UWA—简单优化,优化简单! 1138

YOLOv8人工智能与深度学习——强化学习

本文介绍了将YOLOv8目标检测模型与强化学习结合的方法。主要应用包括自适应目标检测(动态调整检测参数)、主动学习(智能选择标注样本)和多目标跟踪优化。实现方案采用深度Q网络策略,通过定义状态表示、动作空间和奖励函数,使检测系统能根据环境反馈优化性能。该方法具有自适应优化、资源高效、持续改进等优势,能构建更智能的计算机视觉系统。文章详细说明了强化学习环境的构建、策略网络的实现以及训练过程,并提供了代码示例。

u010117029的博客 259

unity一次性多图加载最节省CPU的方式异步加载图片

第一:在刚打开软件的时候或者跳转场景的时候,进行图片预生成,因为在这时候加载慢一点用户也没什么感觉,但是由于我的图片是需要用户自己去进行添加,如果用这种方式的话,后面用户添加的图片多了,可能会造成卡顿更严重的现象。这几天遇到了一个问题,就是在StreamingAssets路径下放了十几张图片,但是直接读取的话会卡顿十几秒二十几秒,用户电脑差的话可能得将近一分钟,最后想了两种加载方式。第二:这一种呢是用异步加载的方式来加载图片的,优点是跳转界面后很快的会加载到界面,缺点是跳转过去之后一张一张加载。

qq_39976692的博客 2247

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

异步加载场景并且显示进度条

using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; using UIWidgets; using UnityEngine.UI; namespace GameScene { public class LoadingSync : MonoBehaviou...

anquxu94601的博客 157

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: Unity 3d UGUI 快速对组件复制
下一篇: Unity3D 宏定义
峰利
博客等级 码龄9年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值