Unity问答 | 盘点2019年社区优秀问答
Unity社区创建以来便成为广大Unity开发者与创作者的经验分享以及技术交流的平台,社区成员互帮互助,分享个人开发心得的同时,也积极踊跃地在社区提出自己遇到的开发难题。
2019年,Unity Connect官方社区不断更新社区内的优秀问答,旨在帮助开发者以更高的效率找到有价值的问答。我们特将部分优秀问答整理如下,希望对开发者有所帮助。
优秀问答
提问者JeffXun:我使用Unity 2018.4.8f1,在项目将Android的打包改为了il2cpp。首次打包需要很久,增量编译也比较快,但还是会出现重新编译的情况。
请问,具体哪些情况下会出现重新编译而不是增量编译?
回答:如果Player Setting相关设置没有改变的话,工程中引用到了以前未用过的库、美术资源做了大量改动、或者工程目录中的Library文件夹下的内容被删掉了,都有可能导致Build时间增长。
了解优化il2cpp编译时间的策略:
https://docs.unity3d.com/Manual/IL2CPP-OptimizingBuildTimes.html
提问者feng-zhou:请问Unity开发了UIElement和UIWidgets等众多UI系统,对于UGUI是一个什么样的态度呢?是不是要放弃UGUI的研发了呢?
回答:近期并没有计划放弃UGUI开发。UIElement目前专注于Unity Editor的扩展, UIWidget专注用Unity开发通用App。长期来看UIElement有替代UGUI的可能,但是时间会比较久。
提问者鲁帆:我使用Unity 2019.2.6f1制作一个3D动作项目,场景中无光照,没有烘焙,人物角色平均2500个面,战斗场景同屏约30000个面。
项目主要有2个场景:大厅场景用于预览3D模型的角色,战斗场景类似王者荣耀的战斗场景。后处理我使用了Post-Processing Stack v2,只常驻了Bloom,其它效果未使用。
在Unity编辑器下查看Profiler,没有任何耗时的函数。但是打包Android,在真实机器上运行就会有以下问题:
在未锁帧的情况下,大厅场景平均帧数在48帧,大厅场景中有一个名为MeshSkinning.Update的函数耗时13ms,这应该是更新蒙皮。我已经在模型上勾选了OptimizeGameObject,压缩了模型网格,可为什么耗时这么夸张?
在未锁帧的情况下,战斗场景平均帧数在26帧,在大厅场景中的MeshSkinning.Update耗时却降到了0.07ms,可战斗场景模型明明更多了,为什么蒙皮更新反而减少了呢?
战斗场景的主要耗时在UGUI.Rendering.UpdateBatches上,平均耗时有21ms,可战斗场景里只有角色身上的血条是使用UGUI的World Canvas实现的,其它都是NGUI,为什么这个耗时这么夸张?
回答:你可以在Profiler里可以看MeshSkinning.Update的子步骤耗时情况。如果Player Setting里的GPU skinning打开了,耗时主要在GPU skinning上。否则,可能主要耗时在CPU的calculateMatrices上。
这两种情况都与模型的Skin Mesh数量有关,请参考以下内容:
https://gameinstitute.qq.com/community/detail/112327
UGUI.Rendering.UpdateBatches的耗时首先与位置的移动有关,其次和Update中做的操作有关,因为血条的实时变化,导致Canvas的Dirty,然后触发计算。这方面需要做好针对DrawCall的优化,尽量减少Update中的冗余操作。
以上都是推测,需要视项目情况来找寻具体原因。
提问者LIWEI:Unity随着工程变大,运行越来越慢,有什么好的优化策略和管理资源的方案么?
另外请教一下,游戏里使用了一些插件,把插件放到Pluging文件夹内会提升编辑器的运行速度么?
回答:按照Editor的运行策略在第一次进入Play Mode才会需要对所需要资源进行加载。而在Editor Mode下点击选中资源就是在加载资源。
当工程变大的情况下,资源管理过于复杂会影响运行效率,建议通过Editor.log来进行进一步排查时间消耗的地方,也可以减少Resources目录下的资源,使用AssetBundle来进行加载也能提升Editor运行效率。
在新版本的Unity里面提升编译速度也是有类似的策略,可以把Scripts目录下的代码分别编译成不同的dll。
提问者ZXStudioGame:Unity 5.0之后Mac如何调用.dylib ?我使用Unity2018.3.1,并且下载官方的Demo工程,但是工程师是Unity 5.0之前的版本创建的,运行一直报警告 Couldn't open 错误DllNotFoundException: XXX,如何解决?
另外,QT C++和Unity在Mac上r如何互相调用?
Demo工程地址:
https://docs.unity3d.com/uploads/Examples/SimplestPluginExample-4.0.zip
回答:请阅读以下内容,将帮助你解答所提出的问题。
https://answers.unity.com/questions/278613/how-to-include-an-external-dylib-plugin-in-my-own.html
https://answers.unity.com/questions/23615/how-to-make-unity-find-dylib-files.html
向Unity提问,赢新年大礼包
以上就是2019年Unity社区优秀问答,我们将不断整理优秀问答内容更新在Connect社区,你可以点击[阅读原文]进行查看。
现在,我们举办“向Unity提问,赢新年大礼包”活动。只要你在Unity Connect App“技术交流”群聊提问,就有机会获得Unity 2020新年开运大礼包。
参与方式
加入 “技术交流”群聊组 提问,问题要和Unity相关哦 :)
网页版:connect.unity.com/messages
编辑器:内置Messenger
在“技术交流”群聊中,除Unity技术支持团队日常答疑之外,针对有代表性的问题,我们将定期记录和整理,陆续推出官方文章或邀请相关博主/答主为各位解答。
奖品发放
我们将筛选部分问题加入“Unity2019经典问题”列表,并在列表中随机抽取10名提问者,送出Unity 2020新年开运大礼包(限10份,1月1日公布礼包内容、获奖名单)。
推荐阅读
Unity博主营地|在Unity中快速搭建一个3A级别的场景
Unity Project Tiny HTML5 3D游戏开发入门
中国大学生VR/AR开发大赛获奖作品100%使用Unity打造
Unite Shanghai 2020
点击“阅读原文”,访问Unity Connect社区
↓↓↓