我们之前分享的Unity使用小技巧很受大家欢迎,今天我们趁热打铁,为大家解答一些Unity开发中常见的疑难问题。Unity技术支持工程师张陈渊收集了开发者常见的几个问题统一解答,快来看看你是不是也被这些问题困扰呢?
在开发过程中,大家会被各种meta搞得晕头转向吗?有出现过PC端好好的场景打包到移动平台效果就变了的情况吗?有即使异步加载场景也依然出现卡顿的状况吗?有为游戏启动时间过长而伤透脑筋吗?今天我们就来帮助大家解决以上问题。

SVN项目管理总是出现混乱

很多开发者可能都遇到过类似的问题,例如在编辑器打开的情况下从SVN更新资源,就会导致生成新的meta文件,从而导致该资源的引用出错,这时该怎么办呢?
在回答这个问题之前,我们先解释下meta文件的产生原理,当Assets目录下有新的资源时,Unity会自动生成一个与该资源同名的.meta文件,meta文件里存储了描述这个资源文件的全局唯一GUID,以及引用其他资源的GUID,还有自身的描述信息等数据。如下图:
203807twwwe5b4g5rfqxi8.png
203808nxhe6rckuke29mf6.png

所以,在编辑器打开的情况下用SVN更新文件时,如果编辑器处于激活状态,检测到Assets目录下有新的文件出现,就会重新生成meta文件。由于是重新生成的meta文件,所以GUID会与SVN服务器上的GUID版本不一致,进而导致GUID冲突及编辑器中出现各种资源引用问题。​
目前建议的解决方案还是先关闭编辑器,再更新资源。Unity正在开发全新的版本管理服务Collaborate,它将可以帮助用户解决上述的问题。Collaborate beta版现已发布,立即点此注册。
Unity 5打包在安卓平台上出现色偏先展示下色偏效果,以下图片来自开发者向我们提供的Demo场景:
203808h0000b0tiexaitte.png
203808q3meq0irqcc5e03e.png

上图的场景包含多盏灯光,灯光颜色都为RGB(240,140,40)(偏),上图渲染正常,下图有明显的色偏(偏绿色)。
你是否也遇到过,明明在编辑器里正常显示的效果,发布到安卓平台就变样了呢?
产生该问题的原因是,安卓平台的Lightmap精度比PC低,如果同一个点受到多盏灯光的照射,这个点的光照颜色有可能超过Lightmap所能存储的最大值。以上图中的灯光颜色为例,灯光的R、G、B值分别为240、140、40,多盏同样的灯光叠加后,R值会最先达到最大值,G和B却没有达到最大值,导致三个通道的颜色比例与之前不一致,进而产生色偏。
为了避免出现色偏,我们在移动平台烘焙Lightmap时,要注意光源的位置及强度,尽量不要在同一处地点设置过多的光源,光源强度也不要设置过高。
异步加载场景依旧出现卡顿

你是否也会觉得奇怪,已经使用异步方式来加载场景了,为何加载过程中的动画和场景还是会出现卡顿?
调用异步加载场景,并不代表主线程不会进行任何计算,由于有些计算必须在主线程进行,所以造成了主线程卡顿。

这些计算包括: 在资源异步加载完成后会有一个处理资源的初始化操作,如Texture.AwakeFromLoad和Shader.Parse, 该初始化操作会造成不同程度的卡顿。 异步加载场景完成后,还会涉及到GameObject 的实例化操作,当需要实例化的物件数量很大时,也会有一定的卡顿。

对于异步加载场景的优化,建议不要将所有的资源都放到场景中,而是将不会立即使用的资源做成AssetBundle,在使用时对资源做动态加载,不使用时及时卸载,这样即可以优化场景的加载速度,也可以优化内存占用。
游戏启动过程太慢
经常有开发者质问,Unity在游戏启动时究竟做了些什么,为何启动过程那么慢?
如出现该问题,首先请检查Development Build是否勾选,如下图: 203808yis4sb4say7za69s.png

如果勾选该选项,它会在很大程度上影响游戏的启动速度,因为调试模式下会出现很多影响加载速度的Debug信息。
其次,导致应用启动过慢比较常见的原因是,Resources目录下的资源太多。在游戏启动时,引擎会收集Resources目录下所有的资源信息,这会导致额外的运算时间和内存消耗。所以建议把Resources目录下的资源尽可能改为AssetBundle打包,再根据需要去加载资源。

今天的技术答疑就分享到这里,是否解决了你的问题呢?来下方回复交流吧。



本文版权归Unity官方中文论坛所有,转载请注明来源(forum.china.unity3d.com)。


锐亚教育

锐亚教育 锐亚科技 unity unity教程