1)Unity性能优化分析思路
​2)Unity2020后Paticle子节点旋转并把ScalingMode设置为Hierarchy后,对根节点进行缩放时表现不正常
3)FBX默认会冗余lit.mat、lit.shader如何解决
4)部分手机(小米12)运行时不时闪退问题


这是第294篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com
UWA QQ群2:793972859(原群已满员)

Unity

Q:Unity有多少优化点?比如合批:静态合批、SRP合批、GPU实例化、UGUI Reruild、光照烘焙、反射探针、光照探针、Shader.Parse、Shader.CreateGPUProgram、场景加载优化和GC优化,还有哪些优化点?

A1:大方向上可以从CPU、内存、GPU这三个方向切入。

细分一下可以从CPU、内存、渲染、资源优化、耗电优化、网络优化、卡顿优化、优化工具的选择掌握这几个点入手。

一、CPU优化

  1. 缓存计算结果
  2. 预处理
  3. 限帧法
  4. 主次法
  5. 多线程
  6. 引擎模块(动画、物理、粒子、导航)
  7. 逻辑优化

二、内存优化

  1. 缓存法
  2. 内存池
  3. 资源管理器
  4. 控制GC
  5. 逻辑优化
  6. Shader变体数量优化

三、渲染优化

  1. SetPassCall渲染状态切换频次控制
  2. DrawCall数量控制
  3. 带宽负载
  4. 显存占用
  5. GPU计算量

四、卡顿优化

  1. 降帧法
  2. 摊帧法
  3. 限制数量法
  4. 逻辑优化
  5. IO优化
  6. 使用进度条

五、资源优化

  1. 纹理优化
  2. UI优化
  3. 字体优化
  4. 模型优化
  5. 场景优化
  6. 粒子优化
  7. 材质优化
  8. 指定标准美术规范
  9. Shader变体数量优化

六、耗电优化
上面说到的优化点,或多或少都会影响到手机的耗电,也是优化耗电的措施,除此之外还有:

  1. 动态调整限帧
  2. 动态调整画质

七、网络优化

  1. 减少无用字段
  2. 降低字段精度
  3. 避免重复发送
  4. 网络异步化
  5. 压缩无效字节
  6. 压缩协议包

以上说的这些要点,大部分摘抄归纳自《移动游戏性能优化通用技法》。强烈建议多花些时间认真阅读一下这篇文章,然后以这篇文章作为指南,再去仔细研究里面提到的优化细节该如何展开。

感谢马三小伙儿@UWA问答社区提供了回答

A2:优化点肯定是无穷无尽的,这里搬运UWA的客户端性能优化思路,针对常见的引擎模块的相关问题都做了分析,讲的是比较全比较透的,常见的优化难题都罗列了。

《Unity性能优化 — 物理模块》
《Unity性能优化 — 动画模块》
《Unity性能优化系列 — 资源内存泄漏》
《Unity性能优化系列—Lua代码优化》
《粒子系统优化——如何优化你的技能特效》
《Unity性能优化系列—加载与资源管理》
《Unity性能优化系列—渲染模块》
《Unity性能优化 — UI模块》
《支持资源加载分析、场景分割》
《UWA报告使用小技巧,你get了吗?》
《UWA本地资源检测更新,助你严守项目性能的每个角落!》

感谢芭妮妮@UWA问答社区提供了回答,欢迎大家转至社区交流:
fbx默认会冗余lit.mat、lit.shader如何解决? -- UWA问答:帮助开发者找到更好的答案


ParticleSystem

Q:Unity 2020后Paticle子节点旋转并把ScalingMode设置为Hierarchy后,对根节点进行缩放时表现不正常。

在2019及其之前的版本没有这个问题。升级到2020后出现。

子节点的旋转会改变对应的缩放轴,如果x轴旋转了-90度,那么根节点缩放y轴就等于缩放了z轴。

具体见下图:

A:已找到对应官方答复:
《particle-system-behavior-changes-when-it-is-rotated-or-scaled-in-negative-axis》

2018.3b版本后不建议对Billboard节点使用旋转和非统一缩放。

感谢jiacat@UWA问答社区提供了回答,欢迎大家转至社区交流:
fbx默认会冗余lit.mat、lit.shader如何解决? -- UWA问答:帮助开发者找到更好的答案


Material

Q:打AssetBundle包发现会包含lit.mat、lit.shader,原因是FBX默认自带的,有尝试下面方法:

1. 代码设置 renderer.sharedMaterials = new Material[] ,但是下次再打开Unity或Reimport,又变回lit。

2. 监听文件变化,发现是FBX的同上操作,但是这个在打AssetBundle包时又报一些莫名其妙的错误。

请问大家都是怎么处理的?

A1:两种方式解决这个问题:

  1. 一种是美术在出资源时直接不导出材质资源。
  2. 一种是自己在Unity导入资源进程里写个批处理,在导出时默认去除掉这材质球。

不管用哪种,都需要导入后,自己在资源上做好策略管理,手动的整理好材质与Shader的目录,跟打包的策略对应。这样可以更好地做好项目规范,还能为后期资源冗余的问题做优化。前期能做好这个规范,后期关于资源冗余的问题也不会太头疼。

感谢廖武兴@UWA问答社区提供了回答

A2:在2020.3.17里面有效,不论是ReImport FBX还是重启Unity,都是有用的:

public class ProcessMaterialImport : AssetPostprocessor
{void OnPostprocessModel(GameObject model){var renderers = model.GetComponentsInChildren<Renderer>();if (renderers == null){return;}foreach (var renderer in renderers){if (renderer == null){continue;}renderer.sharedMaterials = new Material[0];}ModelImporter importer = (ModelImporter)base.assetImporter;if (importer != null){if (importer.materialImportMode != ModelImporterMaterialImportMode.None){importer.materialImportMode = ModelImporterMaterialImportMode.None;importer.SaveAndReimport();}}}
}

材质球会变成下面这样:

感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
fbx默认会冗余lit.mat、lit.shader如何解决? -- UWA问答:帮助开发者找到更好的答案


Memory

Q:目前只出现在小米12手机,Android系统 12,小米系统13.0.16.0。运行后10-20分钟左右就时不时闪退。

Unity版本 2019.4.3f1 L2cpp
E/Unity: Using memoryadresses from more than 16GB of memory
(Filename: /Users/builduser/buildslave/unity/build/Runtime/Allocator/UnityDefaultAllocator.cpp Line: 120)
bool UnityDefaultAllocator::AllocationPage<(RequestType)0>(void const*) const+268) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
UnityDefaultAllocator::RegisterAllocation(void const*)+148) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
UnityDefaultAllocator::Allocate(unsigned long, int)+64) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
MemoryManager::Allocate(unsigned long, unsigned long, MemLabelId const&, AllocateOptions, char const*, int)+308) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
QueueAllocator::QueueAllocator(unsigned int, MemLabelId)+60) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::ScheduleAsyncRead(AtomicNode*)+280) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::ScheduleAsyncCommand(AtomicNode*)+48) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::ScheduleAsyncCommandsInternal()+56) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::ScheduleAsyncCommands()+56) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
AsyncUploadManager::AsyncResourceUpload(GfxDevice&, int, AsyncUploadManagerSettings const&)+416) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
GfxDeviceWorker::RunCommand(ThreadedStreamBuffer&)+26744) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
GfxDeviceWorker::RunExt(ThreadedStreamBuffer&)+44) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
GfxDeviceWorker::Run()+136) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
GfxDeviceWorker::RunGfxDeviceWorker(void*)+4) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)
Thread::RunThreadWrapper(void*)+512) (BuildId: d0b079d6aac2d769613621db6d01af8abf84a793)

A1:Unity发行日志说2019.4.15修复了这个问题,我们升级完之后基本不闪退,但是在vivo的安卓12手机上还是有问题,然后又升级到2019.4.34,目前没看到闪退。

感谢大秋衣@UWA问答社区提供了回答

A2:可参考:
Unity Issue Tracker - [Android][IL2CPP] App crashes during launch with &quot;Using memoryadresses from more than 16GB of memory&quot; messages on Android 11

感谢Arboo@UWA问答社区提供了回答,欢迎大家转至社区交流:
fbx默认会冗余lit.mat、lit.shader如何解决? -- UWA问答:帮助开发者找到更好的答案

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官方技术博客:blog.uwa4d.com
官方问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:793972859(原群已满员)

Unity性能优化分析思路相关推荐

  1. Unity性能优化 – 脚本篇

    最近开始进行Unity性能优化的工作,主要分为三类:CPU.GPU和内存.由于我们游戏的核心战斗是计算密集型,所以主要是受限于CPU.CPU的优化又分为渲染和脚本,本文将着重于脚本优化. 一般来说,优 ...

  2. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译

    http://www.cnblogs.com/alan777/p/6135703.html Unity性能优化(2)-官方教程Diagnosing performance problems using ...

  3. 【Unity性能优化】静态资源优化——Audio优化

    文章目录 写在前面 1. 前言 2. 使用Asset Checker进行资源检测 3. Audio优化 3.1 启用Force to Mono 3.2 压缩格式与采样率 3.3 音乐加载类型 3.4 ...

  4. Unity性能优化 :合批篇

    前言 本系列为一些性能优化的小知识,是日常游戏开发中与性能表现的一些点,本篇为该系列文章的第二篇,前篇链接: 第一篇: Unity性能优化:资源篇 在早期Unity中,对于合批的处理手段主要是下面三种 ...

  5. Unity 性能优化:资源篇

    Unity性能优化 大的方面来说,通过Unity对于项目的性能优化大概可以分为下面几个部分: 资源 渲染 程序 项目配置 而在这个部分中,资源的性能优化属于最基础.最有效的优化手段,也是游戏开发者日常 ...

  6. Unity 性能优化(力荐)

    开始之前先分享几款性能优化的插件: 1.SimpleLOD : 除了同样拥有Mesh Baker所具有的Mesh合并.Atlas烘焙等功能,它还能提供Mesh的简化,并对动态蒙皮网格进行了很好的支持. ...

  7. Unity - 性能优化 - 包体,内存 - 偏静态资源的优化

    文章目录 静态资源优化 - AssetPostprocessor Texture 压缩 Model 网格.动画 压缩 音频压缩 纹理的优化经验 尺寸 通道 发布出来的包资源再次分析 如何工具快速定位静 ...

  8. Unity性能优化全攻略

    #Unity性能优化全攻略 总结自Siki的性能优化. ##优化相关前提 ###Unity游戏安装包大/运行卡的原因 Mono虚拟机 解决这个问题 ###DrawCall https://zhuanl ...

  9. Unity性能优化大合集,All In One !(更新至8.18)

    引擎把握篇 性能卡顿.内存泄露.资源冗余...这些开发中遇到的疑难杂症大部分都能在这里找到解决方法.这些经验总结无不通过大量的项目深度优化和周而反复的测试验证.如果你想避开一些不必要的坑,请务必啃下这 ...

最新文章

  1. Python-编码之大彻大悟
  2. asyncio.Protocol socket 断线重连
  3. PyQt5 技术篇-鼠标移动控件显示提示,Qt Designer控件提示设置方法。
  4. 形态数轴的非递进现象
  5. python的可变参数 *args 和关键字参数**kw
  6. 过滤html标签的代码
  7. 高精度计算PI值 C语言 思路,高精度计算pi
  8. 解决pytorch softmax警告UserWarning: Implicit ....Change the call to include dim=X as an argument.
  9. (2)FPGA面试技能提升篇(Perl脚本)
  10. python主进程退出时子进程也退出_主进程被杀死时,如何保证子进程同时退出,而不变为孤儿进程(三)...
  11. python常用包有哪些品牌_python 常用包总结
  12. 用C读取INI配置文件 (可在linux平台上用)
  13. 2021年互联网公司春招有何新变化?大厂要求是这样!
  14. 博文视点大讲堂第29期——2天玩转单反相机
  15. 眼图测试(硬件测试、信号完整性测试)
  16. youtube下载视屏和字幕办法
  17. 计算机无法关闭开机密码,电脑开机密码怎么取消
  18. web 原型设计工具_适用于Web设计人员的13+种原型设计工具
  19. 计算机应用系特色活动,职教桥:用匠心打造计算机应用专业特色课程体系
  20. 程序员如何写好自己的简历,一位 5 年中大厂老哥跟你聊聊

热门文章

  1. A. Anadi and Domino
  2. css3实现时钟翻转
  3. 8月英杰传!看看有没你认识的?
  4. excel 常用公式
  5. 换华为路由器后,不能连接pptp
  6. 使用JTAG更新BRAM的方法
  7. php mysqli_affected_rows,PHP mysqli_stmt_affected_rows() 函数用法及示例
  8. 共享AI?智能矩阵Atmatrix用区块链让人工智能触手可及
  9. 冯诺依曼机器的并发—带着脚镣跳舞
  10. Android获取硬件设备信息