A1:可以用Xcode抓帧看看带宽,Load Store Action是否合理。
A2:以下是我的建议: 1. iPhone 8上跑满60帧,证明CPU、GPU都没有到达瓶颈,消耗在较为合理的范围。推荐在Unity Profiler看一下CPU端的消耗,以及查看一下DrawCall数量。 2. 推荐使用FrameDebugger,看一下是否有冗余的物体或者后处理在渲染,尤其是你说的启动界面有发热。 3. 如果低级错误都排查过了,那么建议看一下是否用了原生的插件。 4. 渲染的分辨率是否调整过了,RenderScale的值和FrameDebugger可以查出来分辨率。
A3:关于发热的问题,通常要从几个角度排查:CPU压力(耗时)、GPU压力(耗时和带宽,可以考虑降低分辨率看看发热问题是否会有改善)和IO等几个角度。从题主的问题上看,耗时应该是没问题,都能跑满帧(当然60帧本身就是对发热影响比较大的一点,可以看看限制30帧会不会发热有下降),所以要看看一些隐形的东西是否有问题。比如带宽,可以用Snapdragon在高通手机上跑一跑。如果带宽较高,看看纹理的一些设置是否合理,比如是否压缩、是否开启Mipmap,这两项通常都是需要设置成开启的。还可以查看是否有不必要的BlitCopy操作,在URP项目中比较容易出现Copy Color和Copy Depth浪费。对于IO,需要看看是否存在子线程里面有频繁IO的现象。
A1:有Guid可以使用以下代码加载: var assetPath = AssetDatabase.GUIDToAssetPath(guid); var texture2D = AssetDatabase.LoadAssetAtPath(assetPath);
A2:通过SerializedObject拿到了所有的ObjectReference,然后AssetDatabase.GetAssetPath获取对应路径:
A:直接使用Unity提供的回调函数,该函数会在Shader被打包(无论是打AssetBundle包还是Build的时候)时自动调用。
如图的三个参数:“shader”表示回调函数当前在处理的Shader资源,”data”是参与编译的变体列表。所以data.count()就是该Shader资源的(参与编译的)变体数量了。所以,只要在回调函数逻辑里把这两个参数Log输出就行了。
A:可以参考这篇文章:《Unity3D UGUI 优化:Font.CacheFontForText》 Font.CacheFontForText是在Text渲染时,当对应字体的FontTexture找不到需要渲染的字符时,就会重新生成FontTexture,FontTexture尺寸越大,重新生成这张FontTexture就越耗时。 因此为了减少运行过程中该函数造成的耗时峰值,可以事先渲染所需要的字符,避免在运行时出现重新生成FontTexture。 使用UWA的GOT Online工具验证了一下上面所提到的解决方案,结果对比如下所示:
优化后之所以还是存在部分Font.CacheFontForText的耗时峰值,是因为在测试后期又渲染了之前FontTexture中没有的字符。
您需要 登录 才可以下载或查看,没有账号?立即注册
使用道具 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )
GMT+8, 2024-11-24 21:35 , Processed in 0.091273 second(s), 26 queries .
Powered by Discuz! X3.5 Licensed
© 2001-2024 Discuz! Team.