【Unity3D自学记录】异步加载卡顿问题解决

U3D Addressables异步加载资源,创建大物体卡顿解决方案 目前做的游戏里,因为是仙侠游戏,特效都是手绘的,需要用到特别多的SPINE文件,一个主角身上可能有上百个动画文件和贴图,创建起来特别特别慢,要四五十秒,试了一下,设置QualitySettings.SetQualityLevel,速度提高也不大,大概20%,那就只能从加载创建本身入手解决了。............ 阅读详情

关于异步加载,很多人都是卡住,然后就进场景了,中间进度条基本没作用了。

雨松大神讲过一篇异步加载的,但是同样也是有问题的,跟直接跳转没什么区别。

但事实上,只要加上一句话就可以完成了。

yield return new WaitForEndOfFrame();
等待直到所有的摄像机和GUI被渲染完成后,在该帧显示在屏幕之前。


代码如下:


using UnityEngine;  
using System.Collections;  
  
public class Loading : MonoBehaviour {  
  
    private float fps = 10.0f;  
    private float time;  
    //一组动画的贴图,在编辑器中赋值。  
    public Texture2D[] animations;  
    private int nowFram;  
    //异步对象  
    AsyncOperation async;  
  
    //读取场景的进度,它的取值范围在0 - 1 之间。  
    int progress = 0;  
  
    void Start()  
    {  
        //在这里开启一个异步任务,  
        //进入loadScene方法。  
        StartCoroutine(loadScene());  
    }  
  
    //注意这里返回值一定是 IEnumerator  
    IEnumerator loadScene()  
    {  
        yield return new WaitForEndOfFrame();//加上这么一句就可以先显示加载画面然后再进行加载
        async = Application.LoadLevelAsync(Globe.loadName);  
  
        //读取完毕后返回, 系统会自动进入C场景  
        yield return async;  
  
    }  
  
    void OnGUI()  
    {  
        //因为在异步读取场景,  
        //所以这里我们可以刷新UI  
        DrawAnimation(animations);  
  
    }  
  
    void Update()  
    {  
  
        //在这里计算读取的进度,  
        //progress 的取值范围在0.1 - 1之间, 但是它不会等于1  
        //也就是说progress可能是0.9的时候就直接进入新场景了  
        //所以在写进度条的时候需要注意一下。  
        //为了计算百分比 所以直接乘以100即可  
        progress =  (int)(async.progress *100);  
  
        //有了读取进度的数值,大家可以自行制作进度条啦。  
        Debug.Log("xuanyusong" +progress);  
  
    }  
    //这是一个简单绘制2D动画的方法,没什么好说的。  
    void   DrawAnimation(Texture2D[] tex)  
    {  
  
        time += Time.deltaTime;  
  
         if(time >= 1.0 / fps){  
  
             nowFram++;  
  
             time = 0;  
  
             if(nowFram >= tex.Length)  
             {  
                nowFram = 0;  
             }  
        }  
        GUI.DrawTexture(new Rect( 100,100,40,60) ,tex[nowFram] );  
  
        //在这里显示读取的进度。  
        GUI.Label(new Rect( 100,180,300,60), "lOADING!!!!!" + progress);  
  
    }  
  
}  


Unity场景异步加载遇到的问题(进度条) 项目场景:   以前做的项目,突然甲方提供了较多的数据,测试加载场景中有点卡顿,改为一个异步加载场景用于过渡。避免太生硬的加载等待。 问题描述:   实现了场景的异步加载后,我一直觉得我这个加载有问题,虽然是可以跳转到主场景的,但就是感觉有点问题。   通过加载发现: 加载到100之后会有一个卡顿的时间,进度条的变化也是怪怪的,于是开始查找是不是真的有问题。 原因分析: 查看了好多的博文发现了以下原因: SceneManager.LoadSceneAsync()并不是真正上的后台加载,它是在每一帧 阅读详情

相关推荐

Unity--异步加载场景

Unity--异步加载场景

qq_40669895的博客 4453

Unity3D异步加载场景SceneManager.LoadSceneAsync()卡住,并不异步,获取process直接到0.9的问题

Unity在编辑器模式下SceneManager.LoadSceneAsync()加载场景并不是异步加载效果,获取它的加载进度process也会直接从0跳到0.9(即加载场景的时候会卡住,Update()也不会执行)。 不过打包运行后这种现象就消失了,虽然到现在还没找到为啥会这样。。。

HowToPause的博客 7029

C#教程

C# 教程 C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。 本教程将告诉您基础的 C# 编程,同时将向您讲解 C# 编程语言相关的各种先进理念。 现在开始学习 C#! C# 在线工具 谁适合阅读本教程? 本教程有助于初学者理解基础的 C# 编程。在学习完本教程后,您将到达一个中级的 C# 编程水平。

zm1_1zm 1万+

【转】解决场景切换进度条流畅度问题

背景 通常游戏的主场景包含的资源较多,这会导致加载场景的时间较长。为了避免这个问题,可以首先加载Loading场景,然后再通过Loading场景来加载主场景。因为Loading场景包含的资源较少,所以加载速度快。在加载主场景的时候一般会在Loading界面中显示一个进度条来告知玩家当前加载的进度。在Unity中可以通过调用Application.LoadLevelAsync函数来异步加载游戏场景,通过查询AsyncOperation.progress的值来得到场景加载的进度。 尝试——遇到问题 第一步当加.

Listenlsls的博客 1949

告别专业软件!用QGIS+GDAL免费搞定S-57电子海图,附全套符号库和样式文件

本文详细介绍了如何利用免费开源工具QGIS和GDAL处理S-57电子海图,包括数据转换、符号库配置和专业可视化方案。通过实战指南,用户无需依赖昂贵的商业软件,即可实现从S-57到SHP的转换及专业级海图制作,特别适合预算有限的个人和小型机构。

weixin_33701294的博客 391

服务器卡死排查实战:从现象分类到根因定位的完整手册

服务器卡死是运维中最令人头疼的故障之一,从游戏圈吐槽的“土豆服务器”到生产环境中的Linux系统无响应、rsync复制挂起,本质都是系统或进程失去正常响应能力。其原理通常涉及CPU、内存、磁盘IO或网络资源耗尽,以及内核和驱动异常。掌握系统化的排查方法,能够帮助工程师快速定位根因、缩短故障时间,避免盲目重启。本文从资源、层级、场景等多维度分类,结合top、dmesg、strace等工具,梳理一套从现象确认、指标收集、日志分析到进程定位的实战排查流程,并覆盖常见高频场景与预防治理建议。无论你是运维新手还是老手

weixin_33851177的博客 376

Unity异步加载场景SceneManager.LoadSceneAsync主线程第一帧卡顿

问题:如下代码,当开启协程LoadScene后,SceneManager.LoadSceneAsync会导致主线程都一起卡住,如update啥的都不运行了。解决办法:在编辑器中会卡住,打包后运行就会正常加载了!

l1179237106的博客 2075

智能车竞赛走马观碑组:如何高效识别目标板并优化绕行策略(附实战代码)

本文深入探讨了智能车竞赛走马观碑组中,如何构建从图像识别到路径决策的全栈优化方案。针对目标板识别与绕行策略的核心难点,文章详细解析了基于MobileNetV2的高效识别流水线、结合预瞄点与纯追踪算法的平滑路径规划,以及横向与纵向协同控制策略,并提供了实战代码与调试指南,旨在全面提升小车的比赛表现。

o5p6q的博客 884

Unity Loading界面 协程中异步加载场景出现卡顿问题求助

在start函数中执行IEnumerator协程函数. 在协程函数中异步加载场景 AsyncOperation op=SceneManager.LoadSceneAsync(),并设置op.allowSceneActivation=false使场景加载完毕后不立即显示,此时op.progress最多加载到90%,等op.allowSceneActivation= true后op.progr...

qq_29847807的博客 9230

微信数据库读取解密脚本 聊天记录查看工具,支持所有微信版本,后期将支持企业微信[Windows]

(1)获取微信昵称、微信账号、微信手机号、微信邮箱、微信KEY的基址偏移(2)获取微信的微信昵称、微信账号、微信手机号、微信邮箱、微信KEY、微信原始ID(wxid_******)(3)获取微信文件夹路径(4)支持查看聊天记录查看(5)根据key解密微信数据库(6)提供数据库部分字段说明(7)支持微信多开场景,获取多用户信息等(8)微信需要登录状态才能获取数据库密钥(9)支持导出聊天记录为html,备份微信聊天记录,方便查看(10)合并多个数据库,方便查看。

weixin_43101935的博客 1万+

BPMN2.0规范及流程引擎选型方案

本文主要简明扼要的介绍了BPMN2.0规范的内容,可让读者快速度的了解BPMN2.0所涵盖的主要内容和图形样式。也较为详细的阐述了如何绘制标准的流程图,以及在软件层面中如何实现业务流程功能,和技术选型。

比特桃 1万+

Unity场景切换——避免在89%卡顿

Unity LoadSceneAsync异步加载场景的时候,通常会卡在89%,并且在整个加载的过程中易出现加载快慢不一,给用户造成卡顿的假象。偶然在A计划中看到,特此分享给各位。 代码中的scence指的是上图中红色的id号,也可以为场景的名字。 以下代码,亲测可用,话不多说,直接上代码: public class Loding : MonoBehaviour { public Image processView;//一张图片,将Image 的Image Type 改为Filled模式即可,参照文

mo_qi_qi的博客 5874

搭建Java集成开发环境IntelliJ IDEA

package net.huawei.p01.t02;/** * 功能:输出一条信息 * 作者:华卫 * 日期:2022年03月24日 */ public class HelloWorld { public static void main(String[] args) { // arguments System.out.println("Hello Java World~"); } }

qq_67308063的博客 476

unity项目打开一直停顿在Hold On Busy界面解决办法

事先声明,卡顿在这个界面的因素有很多,这个只是其中的一种解决方案。

weixin_39550451的博客 4981

RNA-Seq数据分析实战:从FastQC到STAR比对的完整流程(附避坑指南)

本文提供了RNA-Seq数据分析从FastQC质控到STAR比对的完整实战流程与避坑指南。详细解读了FastQC/MultiQC报告的关键指标,并重点阐述了STAR比对工具的核心参数设置、索引构建及性能优化策略,旨在帮助用户获得准确可靠的比对结果,为下游基因表达分析奠定坚实基础。

weixin_29290259的博客 92

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Unity异步加载场景卡90%,但是场景已加载完成

不要在会被Destory的物体脚本上异步加载场景!!!!

Z478942073的博客 957

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Unity中资源异步加载

本篇博客主要介绍了Unity中资源异步加载的技术原理和实现方法,并结合代码和注释进行解释和演示。异步加载在游戏开发中有着广泛的应用场景,如场景异步加载、资源预加载、多语言本地化等。在开发过程中,根据实际情况选择合适的异步加载方式能够大大提高游戏的效率和用户体验。

Asklyw的博客 4168

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[游戏开发][Unity]点击Play按钮后卡死很久

[游戏开发][Unity]点击Play按钮卡顿特别久

liuyongjie1992的博客 4018

Unity 异步加载和保存图片避免主线程卡顿

Unity 异步加载和保存图片避免主线程卡顿

a451319296的博客 1064

unity自带2dAnimation的坑,优化2d骨骼

2d骨骼的效率低的吓死人,每帧起码得花20几毫秒用来计算骨骼。 用谷歌翻墙找了几个小时解决方案后,终于发现了所谓的unity性能模式,需要下载两个unity包,下完之后,FPS起码翻4翻,没有任何夸张的言论,这垃圾自带骨骼,如果可以最好还是用第三方谷歌软件做。 两个包分别是Jobs和Burst,前者是用来玩Dots技术的,我猜测可能是用到了多线程进行优化,后者是优化C#代码,提高效率。 ...

qq_41924226的博客 2625

unity场景异步加载(进度条缓慢加载)

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; enum Phase3 { Start, Middle, End } public class loading : MonoBehaviour { static AsyncOperation async = null; p.

Monkey_Xuan的博客 1944

Unity - 2D游戏中掉帧严重问题解决

目的:解决unity2D中游戏掉帧严重问题 这个问题的出现一开始我并不知道什么原因,于是在unity-profiler中寻找答案。 一开始我发现这个问题 然后我在网站上搜索”Animator.Update掉帧“现象 找到了:http://answers.unity3d.com/questions/689612/ 答案却不能解决我的问题。 后来开始自己建场景测试,经过多番

心之所至的博客 1万+

[转]unity webgl优化

laya是国产的一款引擎主要就是因为unity webgl不作为所以才有了laya他使用asts或者js开发在浏览器上不用转换脚本了场景可以用unity的并且也用上了实体组件系统可以控制加载需要的组件这是一款不错的工具主要用来开发各种小游戏.搞了三天开发了一个场景进行与其他对比测试.12.Publishing Settings ->Compression Format 是否压缩跟自己需要选择压缩肯定需要解压如果网络不好选择压缩.压缩尽量选择Gzip兼容好本地加载可以选择不压缩。

小小姑娘 3906

Unity(二)——场景异步切换

同步切换的缺点:Unity会删除当前场景的所有对象,所以在切换的时候会非常耗时,会让玩家感到卡顿。协程异步加载后面再进行逻辑操作不会执行,因为之前的场景已经被删除。

2401_87775776的博客 73
上一篇: 【Unity3D自学记录】游戏开发之怪物AI
下一篇: 【Unity3D自学记录】脚本中Start()和Awake()的区别
发财猫MoneyCat
博客等级 码龄18年 161粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发财猫MoneyCat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值