1.坑的描述:
资源打包使用AssetBundle方式,一个中等规模游戏(资源总量200M左右),一次全资源打包,需要至少需要1-3小时.
规避方案:
1.使资源组织结构更合理化,没有依赖关系的文件分别打包。减少重打的问题。
2.使用配置文件记录每个资源和meta文件md5吗,有变化才重新打包.
2. 坑的描述:
需要控制好包的粒度;
太大对下载有影响(http可能出错重下等等);
太小对iOS文件句柄数目限制有影响,接近240以上,会导致读不出文件;
规避方案:
1.控制好打包粒度(普遍在0.5M-2M之间) 。
2.策划和美术在使用资源时要有有意识地控制每个关卡的资源总量和使用怪物的种类。
3.程序做好文件句柄数目保护机制,合理输出日志。
3. 坑的描述:
路径大小问题,在windows下,即使大小写跟真实路径不一致,也会加载出来,但是在移动平台,就会出问题。
规避方案:
通过调用“Kernel32.dll”的GetShortPathName和GetLongPathName,获得windows下真正的物理路径,再与路径进行比较。
4. 坑的描述:
同一目录下,即使扩展名不同的文件,文件名也不能相同
从AssetBundle中载入资源,Unity是通过资源的对象类型来判定的
他们在Unity内部都识别为GameObject,而无法区分,导致载入时不一定是自己想要的类型。因此Unity目录下的AssetBundle.
解决方案:
制定资源命名规范,在同一目录下不能出现
5. 坑的描述:
Unity使用的Mono编译器的问题,在编译foreach语句后,每次执行会产生几个字节的GC堆内存
解决方案:
Unity5.6已经修复
1.for代替
2.while(enumerator.MoveNext())代替
6.坑的描述:
动态元素更新会重组DrawCall,产生瞬卡.
一次DrawCall往往会耗时200ms
规避方案:
1.将动态界面组件与静态界面进行分离
2.减少SetActive(false),使用移动坐标到屏幕外的方式隐藏