如题:在项目中发现打包到安卓机运行的时候,总是会有一段黑屏时间很长的等待,同事觉得这个体验很差,于是我们花了一个上午的时间基本解决了这个问题,也对unity有了更深的理解
急的bro可以直接看这里,解决方法网上有很多,大家可参考他们的方法去进行优化,我们发现的解决方法可能和大家的不太一样
一句话就是,把加载的方法写在一个协程里面,然后放在mono生命周期里的start方法
我们做了一些尝试
1比如优化resources里面的资源,优化到了只有几兆,但黑屏时间还是很长(也可能缩短了几毫秒吧,基本感觉不出来差别)
并且把这个项目的resources和之前的项目做了对比,发现上个项目有30多兆,但启动一点也不卡,于是基本可以诊断不是resources的问题
2然后我试着修改了代码逻辑,因为猜测可能是协程太多导致的卡顿,而且通过debug发现黑屏的时候协程的方法是有在执行的,但是加载的界面却一直不出现
之前加载下一场景和获取用户登录信息是通过两个协程分开执行的,如图
后面我把获取用户登录信息的方法放在了加载下一场景的方法里面,如图

运行发现还是出现了漫长的等待时间
3紧接着我尝试了在不同的生命周期中放入加载下一场景的方法,一开始是放在awake中,后面尝试放在了start.发现这个方法快了很多(不同的机子差异比较大,我的高通870和同事的麒麟970差距在4~5s,而且是有时候很快,有时候还是会有一段等待时间)
4最后我尝试着把加载的方法放在协程里面,然后再在Start方法里执行,如图

这么一整发现基本没有了卡顿的现象,加载界面也能够正常的显示和运行,然后查看了一下unity的生命周期表

大概的猜想是awake方法是优先于一切的,并且加载界面的脚本是放在场景中的第一个物体,因此脚本里涉及到的物体都还没有加载完成,需要等待其他物体加载完(包括加载脚本里关联依赖的物体),然后才执行对应的方法
因此将方法放置在start中,黑屏的现象会得到一定的改善,但还是会时不时出现黑屏的现象
并且和同事讨论的时候还有一些问题不太确定,比如为什么在start方法里直接调用普通方法(普通方法里包含协程方法)打包安卓会出现黑屏,但用一个协程包住这个普通方法再打包黑屏的现象就没有了
个人的猜想是方法里协程的调用是引用了其他脚本的方法,也许黑屏的时间就是在加载这些脚本,这些脚本当通过被协程包住之后他就是单独的线程去进行加载,不会影响到场景界面的加载,并且在后面的主场景中也发现了这个问题(同事的意见是该脚本并不大,应该不至于出现黑屏,并且是6~7s的黑屏)
当然上面说的问题还没有确切的结论(本着解决问题为首,原因可不深究,问就是程序和我其中一个能跑就行),如果有大佬知道的话请务必在评论区写下你的回答

同天下午更新一下,和同事又讨论和尝试了一下(没错,我们不是在划水),发现关键的不是在外面包协程的问题,而是在加载场景的协程的方法里,需要在一开始就写上yeild return (这里null也行,new waitforsconds也行),给我的感觉就是在告诉程序,这里开始走协程,当然实际也是这样,但是我return的是null或者0s他都能够不出现长时间黑屏,所以yeild return感觉更多的像是一个标识符,而在这之前的协程里的方法和代码都还是得一步一步走,或者说在程序刚开始启动的时候协程的逻辑是混乱的,可能一开始都是同步的逻辑,后面有了yeild return才开始有了协程的逻辑,又或者说scenemanager.loadsceneasync这个方法是个假的异步,在加载下一场景的多少百分比之前都是同步的加载后面才开始真正的异步,这才导致的开机黑屏时间过长,因为除了在加载当前场景资源,也在同步加载下一场景资源
感觉没有更深了解的机会,官方文档对方法和类的说明太简单了,源码也不好深究.只能到这了.
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里编辑 3.解析依赖到项目中
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal