问题1 资源释放
解决方案:
1 首先要求美术所有的图集下不要出现相同名的精灵,这个在最开始就应该告知美术,不然后期修改的时候,美术和程序都麻烦,命名应该遵循一个规范。只要每个精灵的名字都不一样,后面改精灵图的时候,程序这边就可以在代码中全局替换,快速高效,当人,如果精灵图名字有部分配置在配置表中,则需要手动去找出来然后修改了。
2 把图集进行整理,将专用性的精灵整理到专用的图集下,公用精灵则放到公用图集下,公用图集个数尽量在3个以下,对专用性的图集进行动态加载和释放。
问题2 界面的快速实现
解决方案:
1 让美术将界面制作成预设
2 编写一个工具,可将预设直接转换成代码(高端做法)
3 或直接加载美术的预设
问题3 降低draw call
解决方案:
只要物体的变化和材质相同,GPU就可以按照完全相同的方式进行处理,即可以把它们放在一个draw call中。draw call batching技术的核心就是可见性测试之后(可见性就是摄像机看的见的就渲染,看不见就不渲染),检查所有要绘制的物体的材质,把相同材质的分为一组(一个batch),然后把它们组合成一个物体(统一变换),这样就可以在一个draw call中处理多个物体了(实际上是组合后的一个物体)。综上,就是合并贴图材质,对可合并的材质对其ui设置相同的层(depth)
问题4 新手引导
解决方案:
针对新手引导一套框架,具备新手引导所需的常见的UI接口,新手引导走配置,节点管理、上报、执行等操作统一化。
问题5 UI风格统一问题
解决方案:
早起就应该制定好UI规范,程序这边封装好相应的规范UI创建接口,后续不是非常特殊的情况,都使用这些规范的接口进行UI创建,当然美术在出预设的时候,也必须遵循这些UI规范
问题6 UI层次问题
解决方案:
通过多个摄像机渲染,通过panel分层
问题7 分辨率适配问题
解决方案:
以1280x720为标准,计算出x和y的拉伸比
float screenFactorX = Mathf.Max( Screen.width*1.0f / Screen.height / (1280f / 720f), 1.0f);
float screenFactorY = Mathf.Max( (1280f / 720f) / (Screen.width*1.0f / Screen.height ),1.0f);
如果要搞一个铺满全屏的UI,则UI的宽高分别设为1280,720,然后对它的localScale进行缩放,x缩放screenFactorX ,y缩放screenFactorY
问题8 代码混淆
解决方案:
尽量不要使用函数名字符串(反射)
比如EventDelegate、HoTween、Invoke、协程、Animation帧事件。如果使用了字符串反射,则需要在混淆中过滤出来。
针对Animation的帧事件,可以专门写一个帧事件监听脚本(对此脚本不进行混淆),素有Animation帧事件都使用这个脚本进行事件监听
问题9 财富同步问题
解决方案:
前后端统一一个财富的操作协议,各个模块的财富变化,都通过该协议同步或加减,对于变化比较频繁的模块,可以考虑通过相应的协议返回同步的财富,不额外走同步协议
问题10 头像缓存问题
解决方案:
头像通过链接从远程下载后,会在本地可写目录下保存,并缓存在内存中(有一个头像管理器),每次需要创建头像,都首先从头像管理器内存中查找,如果没有,则从本地文件中查找,如果还没有,再根据链接去远程下载。本地头像需要定期清理,建议1天自动清理一次。