6

如何管理大型游戏的美术资源工程

 3 years ago
source link: https://blog.uwa4d.com/archives/TechSharing_252.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1)如何管理大型游戏的美术资源工程
​2)Google Play强制64位App相关问题
3)零散AssetBundle资源再打包疑问
4)Unity中Api Compatibility Level .net 4.x与.NET Standard 2.0的区别
5)Unity 2020版本OpenGL ES3下SRP Batcher失效问题


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

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

Assets

Q:随着项目参与制作的人数变多,各类美术资源的数量也在急速上升,纵然有各种规范和各类资源导入、检查工具,跑一段时间后,仍然会出现工程里各类废弃的资源未能及时清理,导致资源和包体大小持续上升,包括:
1)各类资源在制作过程中产生的一些中间文件;
2)原本在使用,但后面随业务需求变动,已弃用的资源;
3)原本就属于要放到游戏中看看效果,但没实际投放的资源。
想问下大家在处理这类问题时的一些方案?

A1:题主遇到的问题和技术无关,和流程有关。

(1)监管工作负责到人,凡事预则立、不预则废
每个项目都需要有一个Performance Owner来对性能、资源等问题进行管控。如果没有这个人,再强大的工具、再NB的团队也是白扯。这个人可以是项目的制作人、主程、QA Leader或者PM(一般小团队不具备)都可以,就我们合作的团队来看,以QA Leader作为Performance Owner的团队居多。

(2)监管流程要跟上
团队中必须要有人来对资源问题、性能问题进行负责,且制定固定的流程来强制团队养成持续监控、持续完善的习惯。三天打鱼、两天晒网的形式,是很难成事的,做游戏开发也是如此。所以,将监控变成团队研发的习惯,就需要通过流程来不断把控,流程做到位了,一切就都好了。

以上两点做到了,题主的问题自然就解决了。

该回答由UWA提供

A2:监管负责人一般是PM。因为有些QA没有常识,也没有权利,PM最好懂业务,如果没有PM最好就给客户端主程这个权利,锁版本是很必要的,大部分大厂都有这个。

用工具限制美术的操作,所有不正确的全部报错,然后提示清楚。用锁版本限制提交节点。然后要求不守规矩的人离开,不要问为什么会报错。当然必须从制作人开始就要支持。通俗地讲,美术和策划不会操作工具又不肯学习的,不配合作。

感谢马古斯@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60ab197f6bb31032f979184e


Build

Q:Unity可以通过程序集加载对应的代码,且Google Play已经强制64位APP,是否已经不支持通过Assembly.Load加载代码了?

A:如下图所示,Unity里面Mono版本还不支持ARM64,所以要上Google Play(64位要求)只能使用IL2CPP,IL2CPP是不支持Assembly.Load的。

1.png

可以参考:
https://forum.unity.com/threads/il2cpp-loading-c-assembly-at-runtime.417553/

感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60ae09c06bb31032f97918c7


AssetBundle

Q:Unity的AssetBundle资源有必要把零散的AssetBundle资源做成Zip吗?比如300MB一个。因为在打AssetBundle的时候可以选择压缩格式,所以不是为了减少总体的大小,而是如果散的AssetBundle,在下载的时候性能会不会有压力?各位在实践中都是怎么处理的呢?(资源量AssetBundle数量10W+,总大小在4G左右。)

A1:一堆散文件下载自然不如一个大文件更快,Http连接也要时间和资源,有时候AssetBundle其实只有几KB。不划算。打Zip算比较方便,可以考虑不带压缩打Zip。当然也可以自定义格式来做,但是合大文件以后更新会麻烦点,要做一些管理和替换。

感谢黄程@UWA问答社区提供了回答

A2:最近刚好做这个功能。将多个包打成Zip,对下载效率有很大的帮助,特别在国外网络环境下。

1.AssetBundle打包依旧是零散的AssetBundle包(AssetBundle会做模块区分,比如特效、UI等)。
2.需要热更新时候,生成的AssetBundle包信息和上个版本AssetBundle包对比,将各个模块变动的AssetBundle包生成Zip包。
3.热更新的时候,收集需要更新AssetBundle信息(有标记Zip,说明资源在Zip包里)进行下载,没有标记Zip,则直接下载AssetBundle包,这样兼容跨多个版本热更新功能。
4.下载完的Zip包在客户端在解压成AssetBundle。

感谢杨宇杰@UWA问答社区提供了回答

A3:当个搬运工补充一个回答:
散列的坏处比较集中:下载慢(用cdn,oss后端性能不必考虑),上传到oss也是慢得多。

Zip无论跳包管理,下载冗余,都是很头疼的事情,做动态下载更加不可能。因此可能导致比散列更加昂贵的oss成本。

感谢芭妮妮@UWA问答社区提供了回答

A4:前期开发用零散文件,文件小也省掉了断网续传的问题,后期时间富裕了再扩展为大包的方式,可以根据版本号生成增量更新包一次下载完成。

放服务器上没什么影响,定期清理一下。

感谢rekcah1986@UWA问答社区提供了回答

A5:上一个项目用的Zip打包,运营时间长了以后,冗余资源会越来越多。热更资源要保证完整性不能删,除非你们是换包了,如果你们频繁换包,那么用Zip的方式是最合适的。

感谢Lim@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60ab59946bb31032f9791856


Editor

Q:Unity中Api Compatibility Level .NET 4.x与.NET Standard 2.0的区别是什么呢?

A:.NET Standard 2.0对平台的支持性更广、兼容性更好。.NET Standard 2.0的API是.NET 4.x的子集。或者说,.NET 4.x支持的API更多一些,兼容.NET Standard 2.0,但是有些API在有些平台上是不兼容的。

Unity默认选择的是.NET Standard 2.0,如果想要跨平台兼容,那么就选Standard 2.0。如果使用的外部类库或者脚本里面调用的API不被Standard 2.0支持,再考虑换成4.x来试试。

以官方文档为准:
https://docs.unity3d.com/Manual/dotnetProfileSupport.html

感谢Prin@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60a31c676bb31032f9791730


Rendering

Q:在Unity 2020版本下,OpenGL ES3下SRP Batcher失效,查看lit.shader显示不兼容SRP,该怎么解决呢?

A:经排查,在Unity 2020.2的某些版本下并没有出现上述问题,但后续的版本就坏了。现在看到2020.3.9f1的Release notes里有提到这个问题。

2.png

可参考此处。

感谢小ben@UWA问答社区提供了回答,欢迎大家转至社区交流:
https://answer.uwa4d.com/question/60adc07e6bb31032f97918b1

封面图来源于网络


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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK