cocos creator性能优化合集

本文总结了Cocos Creator的性能优化策略,包括包体、渲染、内存和CPU四方面的优化。包体优化涉及图片、声音、字体和预制体的处理;渲染优化通过合图和避免使用active来提升效率;内存优化建议自动释放场景资源和优化动态资源管理;CPU优化则关注代码质量和游戏帧率的调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看了很多的博客,大略的总结了一下,推荐去看原文。

参考以下博客:
博客1
博客2
博客3

cocos creator 的性能优化这里分为四个方向去优化,包体优化,渲染优化,内存优化和cpu优化。

****点击链接查看性能合集百度脑图
在这里插入图片描述

1.包体优化,一个cocos creator 包包括资源和代码两部分,其中资源占的内存更多。

在这里插入图片描述

(1)图片:
  • 不使用大图,如果是大背景图可以通过拼接或者是九宫格的方式,如果一张图超过2048*2048,就会导致在微信平台和小游戏平台出错,小游戏平台在加载的时候无法进入界面。
  • 图片的格式,格式占的内存也不一样,jpg>png
  • 图片分辨率,在我们创建项目的时候可以先通过降低图片的分辨率,再使用。可用在线工具:https://tinify.cn/
  • 图片纹理压缩,在资源管理器选择图片(图集),然后在属性检查管理器中勾选useCompressTexture在这里插入图片描述
(2)声音
  • 声音格式,wav>ogg>mp3
(3)字体
  • cocos支持三种字体:系统字体(label),动态字体(TTF)和位图字体(BMFont),系统字体使用cocos系统字体渲染,在渲染时候会打断draw call 的合批,建议使用位图字体,然后和ui一起打包成图集,可降低draw call。
(4)预制体
  • 预制体使用对象池,大量的创建和销毁会导致性能很低。
  • 预制体拆分。
  • 异步创建预制体,在加载界面的时候就创建大量的预制体会加载很慢,可以使用异步加载的方式创建
//优化前:
for(let i = 0;i<=100;i++){
let node = cc.instamtiate(this.prefab);
 node.parent = this.node
 }
//优化后(异步加载):
for(let i = 0;i<=100;i++){
setTimeout(()=>{
let node = cc.instamtiate(this.prefab);
 node.parent = this.node},i*100)}
2.代码,代码有两部分,引擎代码和业务逻辑代码(自己写的代码)
(1)引擎代码,可以在功能裁剪中去掉没有用到的模块,减少代码量。

在这里插入图片描述

(2)业务逻辑代码,这个只能自己优化了

2.渲染优化

在这里插入图片描述

(1)合图
  • 静态合图(Auto Atlas):自动图集资源,把碎图打包到一张大图上,减少draw call的绘制,具体功能和Texture Packer相似,在资源管理器中创建Auto Atlas即可创建一张图集
  • 动态合图(Dynamic Atlas):在精灵资源的属性检查器中勾选Packable才能开启动态合图,小游戏和原生平台默认关闭动态合图,需要手动开启
(2)少用active = true/false,active的使用要重新渲染节点树,可用设置ui位置或者透明度代替
(3)节点树批处理尽量不要背打断,系统字体label节点会打断draw call的渲染,可以用位图字体替代,并且把位图字体和ui一起打包到图集,可以减少draw call

3.内存优化在这里插入图片描述

(1)静态资源优化,即自动释放场景资源,在项目中场景越来越多,我们把暂时不用的场景都自动释放,如一些二级场景。在资源管理器中选中场景,属性检查器中有自动释放资源选项,建议场景都勾选自动释放资源(除了经常使用的场景)

在这里插入图片描述

(2)2.动态资源,只有动态加载的图片才放在resources文件夹中,减少setting文件夹的大小

4.cpu优化

在这里插入图片描述

(1)代码的优化
  • arr[arr.length] = 0代替arr.push(0)
  • 相比其他循环少用for…in…循环
  • 不推荐使用arguments
  • 全局变量转换成局部变量使用
(2)游戏帧率的优化
  • 渲染帧的降低
//只能设置15,30,60。3种帧率
Game.setFrameRate(frameRate: number | string) :  void 
Game.setFrameRate(30)
  • 物理帧的降低,降低物理步长和各个属性的迭代次数,都会降低物理的检测频率,所以会更有可能发生刚体穿透的情况,使用时需要考虑到这个情况。
    const system = PhysicsSystem2D.instance;

// 物理步长,默认 fixedTimeStep 是 1/60
system.fixedTimeStep = 1/30;

// 每次更新物理系统处理速度的迭代次数,默认为 10
system.velocityIterations = 8;

// 每次更新物理系统处理位置的迭代次数,默认为 10
system.positionIterations = 8;    //降低物理帧,优化物理效果
        phsic.enabledAccumulator = true;
        cc.PhysicsManager.FIXED_TIME_STEP = 1 / 30;//默认值为1/60

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值