最后的结果,如图所示:
文章插图
这4.2M主程序文件,被分割成一个1.2M和一个3M,小的打包成一个包,里面有引擎代码和一堆其他的小文件,共2.1M,3M那个文件只是一个包 。当程序运行时,会进入游戏,先加载2.1M的包,它将在完成后立即加载3M的包 。加载完两个包后,会进入游戏 。
陈源:游戏性能优化
游戏性能问题,往往是我们游戏程序员最关心的问题,对于这个问题,这里我总结一下我关于游戏性能优化的八点想法:
理念一:善于从问题的表象进行优化
当游戏中出现问题时,最直接的表现就是卡,有许多不同的情况导致卡顿的问题 。在解决卡顿问题之前,我们应该首先排除外部问题是否导致了堵塞,外部问题:网络差,硬件差,系统问题等 。排除外部问题引起的卡后,我们可以根据卡顿现象来定位问题 。
1.稍微更频繁的干扰
1)帧率
根据游戏本身设置帧率范围,一般游戏建议30框架就够了
2)Drawcall
在理解什么是drawcall后,我们知道,过高的drawcall会导致卡顿,这里有一些折扣drawcall的方法:
A.查看drawcall
在layabox中,添加代码DebugTool.showStatu = true;
B.连续渲染同一图集中的图片,它只会被执行一次drawcall
C.UI上drawcall优化
优化的思路是尽可能使同一图集中的图片一次性连续渲染,例如:在layabox打开其中一个UI,查看表单层次结构界面中的子对象,如下图:
文章插图
我们可以看到每个子对象的正面,有一个小点,这个点的颜色代表他来自哪个图集,相同颜色的点代表同一个图集 。渲染UI时,UI上的每个子对象都是从上到下渲染的 。而不影响界面,调整界面中组件的级别,可以减少drawcall的目的 。调整后,如图所示:
文章插图
优化前:会有6次drawcall
优化后:只有3次drawcall
D.出现drawcall优化
以场景中的人物为例:
假设一个角色的一组资源在一个地图集中 。
文章插图
所以这套服装中的人物在场景中被连续渲染,只用1次drawcall 。实际上,在游戏中,穿同一套衣服的人不会按照理想的顺序出现 。在一个场景中会有许多穿着不同服装的角色,每套衣服都在一本地图册里 。换句话说,场景里,渲染N这样的角色需要无限接近N次drawcall 。
文章插图
当每个角色都有阴影的时候,影子资源,它必须在一个不同于每个包资源的atlas中 。
情况1:和人物阴影在同一个容器中处理,每个容器都是一个角色,这将会发生,渲染单元A,将使用两套图集+有两张影子图册drawcall 。当渲染N个人物,就有N*2次drawcall 。
情况2:移除渲染的阴影,当所有的字符都被渲染时,根据所有字符的位置,画一个阴影 。这种情况,渲染N个人物,只会有N+1次drawcall显然现在的情况2处理方法比较好 。
当每个角色都有名字时、称号、血条和其他元素,如果这些要素符合上述情况1的处理,那drawcall就有N*M次 。根据上面的情况放这些元素2的处理,显然可以减少很多drawcall 。
E.其他削减drawcall的方法
如:减少遮挡单元渲染
Atlas控件
3)高消耗运行,特别是enterframe和for在循环内部
注意代码逻辑优化,降低算法复杂度
4)资源加载缓存有问题/资源过于分散,造成I/O过高
优化资源加载策略
5)打印日志
减少打印日志
6)限制基础渲染分辨率
2.突然,大卡顿
- 一些不规范的操作,高循环复杂度
- 包裹太大
如果以上a,b,c当的值仅低于十位数时,可以整合到一个领域:
这样做的好处,最初需要12数据字节,仅现在4字节也行 。
- 垃圾恢复负载过重
需要使用对象池吗
如果卡顿发生了UI上:
- 面板内容初始化成帧处理
- 和图片大小,图集依赖规划是否合理
- UI面板分页标签
- UI内特效,3D模型等辅助元素的初始化延迟
- 原手机号停用又忘记微信密码 微信密码忘记了怎么找回
- 微信重登如何找回聊天信息 微信重新登录后怎么恢复聊天记录
- 如何定位微信好友的位置 微信发定位怎么发
- 同一个wifi微信迁移不了 微信迁移聊天记录网络状况复杂
- 公务员机票在哪里购买
- 老款a6加油按钮在哪里
- 微信实名认证不是本人怎么改 微信实名认证怎么更改
- 微信怎么看谁浏览了你 看别人的朋友圈别人会知道吗
- 个人微信收款太多会被纳税吗 微信收款有限额吗
- 为什么店铺定位搜不到 如何将公司位置弄在微信定位上