其他分享
首页 > 其他分享> > iOS导出AssetBundle需要30个小时的解决办法

iOS导出AssetBundle需要30个小时的解决办法

作者:互联网

1)iOS导出AssetBundle需要30个小时的解决办法
​2)Unity主程如何构建知识树
3)TMP中设置CullTransparent不能使Alpha为0的Text被Culling
4)Spine动画贴图在线性空间中出现黑边线
5)Spine数量太多导致Update性能损耗很大


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

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

AssetBundle

Q:现在游戏资源大概870MB(Android平台导出的所有AssetBundle),在Windows(i5-7500 CPU@3.40GHz,GTX1050,16GB内存,SSD硬盘)下导出全量的Android资源耗时大概是2小时,i9机器上1小时,6年前的i3差不多4小时。

在导出代码相同的情况下,在Mac Mini(2018,i5@3GHz,Intel630,16GB DDR4内存,SSD硬盘)大概花了38小时,换了Macbook Pro(2018,i9@2.9GHz,Redeon560X 4G,16GB DDR4内存,SSD硬盘),也要30小时,不知道问题出在哪里,请教各位大神,有没有遇到过类似问题?也怀疑是PVRTC的问题,把所有资源重新导成了ASTC也没改善。

 

A:看看是不是这个问题:
https://forum.unity.com/threads/case-1192489-building-asset-bundles-decompresses-textures.742757/
简单来说就是加个-nographics参数打包。

经过题主测试:最终生成在Mac Pro i9上面,40分钟不到。

感谢小埃拉@UWA问答社区提供了回答


Unity

Q:如果以MMORPG游戏为准,Unity主程需要构建什么样的知识树?

A1:这个问题很难回答,也不敢回答。外面好多大神,除了国内的,还有国外的。主程序除了知识体系,还有管理体系、方案分析、人员成本控制、运营和产品的把控体系。单从知识树上说,推荐Milo Yip的知识树+御三家(Unreal,Unity和寒霜)任意一款引擎源码的完整阅读:https://cloud.tencent.com/developer/article/1005446

感谢马古斯@UWA问答社区提供了回答

A2:这个问题很宽泛,是一个很大的问题,即便把范围缩小到MMORPG的范围也包含了很多东西。其实楼上马古斯回答得已经很好了,Milo的那个图谱基本涵盖了核心技术的内容。论管理,UWA学堂有篇浅显的文章,讲我之前创业的时候做的一些管理工作,有兴趣可以看看《创业团队的技术管理》

简单分享一些我认为一个MMORPG游戏主程应该掌握的技术的内容:

1. 编程语言
这个很容易理解,是程序的基础。
常用的静态语言:C++、C#、Go
常用的动态语言:Lua、Python
然后因为通常游戏开发需要多种语言配合,所以还需要混合编程的概念和技巧。
这其中每种语言的语法和特性需要了解之外,一般会涉及到内存管理。

2. 编程规范
同样无需多言,作为主程,需要制定团队的编程规范,并且需要借助LuaCheck等静态检查等工具让规范可以更好地执行和保证。

3. 编程范式
这块我认为包含两大部分:一块是搭建整个GamePlay框架的框架方式,传统Entity继承、组件化、ECS是三种比较常规的;还有一块就是设计模式以及它们的应用。

4. 数据结构与算法,以及三维数学
默认是3D游戏,这块的基础知识还是需要的。

5. 游戏引擎
要有自己熟悉和掌握的游戏引擎,包括客户端与服务端。

6. GamePlay基础
除了前面提到的编程范式之外,GamePlay还有很多内容:

  • 3C
  • 游戏状态管理
  • 常规的技能结构等等

7. 物理系统
如何设计碰撞检测、玩家控制、车辆系统、布娃娃、柔体效果。

8. 动画系统
骨骼动画原理、蒙皮的基本概念、动作融合、Rootmotion、动画重定向、角色模型和动作制作规范等等。

9. 特效系统

10. 渲染

  • 了解基本的渲染管线
  • 熟悉PBR
  • 了解非真实渲染
  • 各种后处理效果

11. 音频技术

  • FMOD、Wwise、引擎自带音频功能的使用
  • 材质音效区分、P1/P3区分
  • 混音回响等功能支持

12. 大世界场景制作和管理流程
如果是MMORPG,很可能需要大世界制作的技术,基于World Mashine、Houdini等PCG的生产管线如何建立,如何支持场景同时编辑,如何解决大世界的场景资源加卸载管理、超远视距的阴影如何实现、昼夜天气系统、HLOD等等等等。

13. 性能优化
常规的性能优化方式、以及如何持续监控发现性能问题并寻找方案解决,这里又包含CPU、GPU、带宽、内存和磁盘空间等等方面。

14. 游戏更新机制

  • 客户端Patch系统
  • 服务器热更新
  • 客户端代码的Hotfix

15. 网络

  • 通讯协议如何定义
  • 优化网络流量
  • 优化弱网下的游戏表现
  • 加密
  • 限流

16. 服务器存储
MySQL和Mongo等常规数据库的使用

17. 游戏AI

  • 可能在客户端或者服务端,需要提供便利的编辑能力
  • 基于深度学习的AI方案

18. 服务器稳定与安全

  • 并发安全
  • 进程监控
  • 常规的运维知识
  • 负载均衡

19. 常规的服务器技术

  • AOI管理
  • 服务端物理
  • 体素
  • 同步方案

20. IDE与调试工具
常用的VS Code、Visual Studio等IDE,以及对应开发模式下的相应调试工具。

21. 版本管理软件

22. 编辑器开发

随手列,有些凌乱,一些技术内容本身就很复杂,继续拆分可以做得很细,比如在3C里面,如何做到主机级别的体验,就不是一个人能搞透彻的。

当然,肯定不止我列举的这些技术点,还有很多其它的和游戏类型相关的技术内容。

对于一款MMORPG项目的主程,我认为合格的标准是起码了解上面列举的80%以上的技术内容。当然每个人都有要自己擅长的领域,只要有足够的学习能力,能找到合适的人,技术上的内容都可以学习和弥补。只是主程本身就是要为项目的技术问题兜底,并要做技术方案的决策,因此对于技术宽度还是有较高要求的。

我自己的体验是:主程工作中,能有30%-40%的代码时间就很难得了,通常的工作是一天的沟通和会议。所以,主程的眼中,要有“事情”,更要有“人”——如何保持团队活力,如何激发团队战斗力等等,都是技术之外需要思考的难题。

感谢贾伟昊@UWA问答社区提供了回答

A3:前面两位大佬回答很全面了,学到了很多,膜拜!!!这里再补充一些,作为参考,希望有所帮助:

1. 技术方面

  • 首先得是一个高级或者资深Unity开发,掌握不错的软件开发及计算机相关基础知识。
  • 对Unity使用比较熟悉, 大的模块使用以及底层原理有一定的了解,比如动作,特效,GUI,Avatar,场景,Timeline和资源管理等等。
  • 有一定的MMO开发经验,知道MMO游戏里面常见的概念以及实现方案,比如场景,位面,分线,AOI,属性同步,AI,Entity,技能,Buff和体素等等。
  • 了解常用的性能优化工具,优化方案。
  • 不断拓展技术视野,对技术方案的选型,决策会有帮助。

2. 管理方面

  • 制定落地代码规范,了解什么样的代码规范是好的规范,适合项目的规范。
  • 制定落地资源规范,能根据项目需求,以及性能预算制定美术同学认可的资源规范,并提供流程和工具帮助他们落地。
  • 制定并不断优化开发流程,提升产出效率。
  • 涉及的技术方面很多,一个人的精力毕竟有限,很难面面俱到,所以招人、识人、用人和找正确的人做正确的事也很重要。
  • 如果是从纯技术岗升上来,一些基本的管理可能建议也要了解一些。

3. 产品方面
不是硬性要求,但是建议自己项目和同品类的竞品游戏,能有一定程度的游戏体验:

  • 了解游戏里面的常见玩法。
  • 体验游戏里面不同层级玩家的感受,了解他们的需求。
  • 了解这类游戏需要做的技术突破点有哪些。

这样跟策划沟通产品需求、讨论优化方案,比较容易达成一致,会高效很多。

比如题主提到的MMORPG类型,目前《天涯明月刀》、《天谕》、《倩女幽魂》和《一梦江湖》等都是可以体验一下。

最后,我觉得一个好的心态也很重要。一个项目开发过程中,会有困难、挫折、甚至失败,遇到这些情况,保持正向积极的心态,同时给组员正向的影响,从而给大家信心,带领大家取得更好的成果。

感谢呼噜怪@UWA问答社区提供了回答


UGUI

Q:Unity 2020,CanvasRenderer中设置CullTransparentMesh属性可以让Alpha为0的元素不绘制网格,但是TMP为什么不行?

查看了UGUI的源码和TextMeshPro的源码发现都设置了网格,且都不为空,UGUI里是canvasRenderer.SetMesh(workerMesh);TMP里是 m_canvasRenderer.SetMesh(m_mesh);而CanvasRenderer源码显示是这样的public extern bool cullTransparentMesh { [MethodImpl(MethodImplOptions.InternalCall)] get; [MethodImpl(MethodImplOptions.InternalCall)] set; },怎么做才能让TMP元素是透明时像Text一样剔除网格绘制?

A:TMP网格中有不用的顶点颜色不是为0,也就是设置Color中Alpha不能设置未使用顶点的,导致传递给底层绘制的Mesh里面有颜色不为0的顶点,无法剔除,同时又有更大的问题,顶点信息不能清零,导致如果一个TMP里有100个字符,有400个顶点信息,重新赋值给一个文字,还是400个顶点信息,只是396个顶点不用来绘制罢了,所以TMP慎用,要么改源码,要么等官方修复。

感谢题主cwf@UWA问答社区提供了回答


Spine

Q:我们使用的Unity版本是2017.4.3f1,在Gamma空间下面做的Spine动画都没有问题,现在前后到Linear空间下面出现Spine动画好多小的接缝的地方出现黑边,如下图中的鼻子,其实鼻子在Spine中是一个小图,贴到脸上面的,现在Linear下面就会看到周围模糊的黑边,预计是这个鼻子贴图周围的Alpha值影响的,但是现在具体是什么原因还不确定,但是在Gamma空间下面都是正确的。

Gamma空间下面的图,鼻子的地方是正常的:

 

Linear空间下面的,鼻子的地方就有一圈黑边:

 

以下是两个清晰一点的局部图,对比一下:

 

A:第一,Spine关闭预乘Alpha重新导出;
第二,Shader勾选Straight Alpha Texture。

参考以下信息:http://zh.esotericsoftware.com/forum/Spine-JSON-12274?p=54752#p54752

感谢动感光波@UWA问答社区提供了回答


Spine

Q:Spine数量太多导致Update性能损耗很大,如下图,SkeletonAimation.Update的耗时太长了,有什么有效的解决办法吗?

 

A1:转到GPU。

感谢付丶火柴@UWA问答社区提供了回答

A2:以下请参考:

  1. Spine多不代表就卡,主要在于顶点的多少;
  2. 还有就是在Unity的C#代码,因为这个函数导致卡是很常见的,其实这个卡就是Spine做裁剪的时候的遮罩,也就是遮罩的顶点太多了,因此让你的Spine动画师去优化;
  3. 总结起来就是不该被遮罩的顶点不要遮,顶点能少就少。

感谢夏霖锐@UWA问答社区提供了回答

 

封面图来源于网络


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

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

标签:游戏,Spine,30,iOS,技术,Unity,AssetBundle,UWA,问答
来源: https://www.cnblogs.com/uwatech/p/14953963.html