KFC框架:小游戏/H5 首包、分包、加载优化方案与项目示例

news2025/3/3 4:12:04

Cocos Creator 小游戏/H5 首包、分包、加载优化方案与项目示例

今天是疯狂星期四,给大家晒一下最近的成果。

麒麟子上周末将 《Jare 大冒险》 升级到了 Cocos Creator 3.8,并更新到了 Cocos Store。

在做了更精细的分包管理、资源加载拆分,以及利用分析工具剔除了不必要的资源加载后,最终几乎可以做到秒进游戏。

今天就给大家分享一下我是如何做分包加载优化的。

内容分包

推荐方案

  • 首包:主要包含加载场景,尽可能少的引用资源,不能引用其他分包的代码
  • 基础包:主要包含主菜单场景和一些通用的 界面、资源、代码等
  • 游戏包: 游戏玩法相关的场景、资源、代码等。

    由于游戏包会后加载,所以游戏包可以引用基础包和首包的代码。

  • 其他:其余包可以根据需求来做分割。不同的子游戏单独一个包,素材较多需要分包,平台限制导致的必须分多个包等等。

接下来我们看看,是如何得到这个方案的。

Cocos Creator 的 bundle(分包) 机制,它可以将游戏拆分为不同的 bundle。

首先我们来看看内置的 bundle。

它们的优先级如下:

这里有几个关键的规则:

  1. 不同 bundle 的代码和资源,都会被打包到不同的 bundle 里。
  2. 如果引用的资源在高优先级的 bundle 中被引用了,则会优先打包到高优先级的 bundle 里(代码除外,代码除外,代码除外)。
  3. 代码必须在对应的 bundle 中才能被使用。
  4. 内置的四个 bundle 会按照优先级从高到低加载。
  5. 构建发布后,才能验证分包流程。测试版本是不会进行代码分包检测的。

注意:resources 和 main 包里的代码,是可以在任何分包里使用的。

由此,我们可以得到一个最粗略的分包方案。

  • 首包:只保留一个很简单的 loading 场景和相关代码。
  • 游戏包:拥有整个游戏的资源。

这种机制下,由于首包只保包含了最简单的资源,因此引擎在启动后并加载首包,都是非常快速的。 进入首包后启动加载流程,此时会出现画面和进度条,用户不会焦虑。

但有几种情况需要注意:

  1. 首包的加载场景,关闭天空盒,移除对天空盒以及任何 3D 素材的引用。 这样可以避免将天空盒以及 3D 材质相关的内容打入首包。
  2. 首包不要使用任何其他分包中的代码,否则打包后运行就会提示 XXX 类找不到。
  3. 不要使用 resources 包作为游戏包。当文件很多时,分包的 config.json 会很大。但 resources 的分包信息需要先被加载完成才会加载 main,会让启动流程变长。
  4. 分包的预加载,只是加载分包的信息,不会加载分包资源。

但由于一些游戏,通常都会有一个主菜单界面,供玩家选择玩法、自定义自己的数据、选择关卡、签到等等。

当用户处于这个界面的时候,还不需要加载游戏素材。这种情况下,可以单独分一个包,作为缓冲。

当用户点击进入游戏时,可以接受更长的加载时间,体验感会更好。对于一些资源较多、玩法较重、关卡加载时间较长的游戏来说,是必须的选择。

另外就是一些特殊情况的考量。最终就形成了开始的这套推荐方案:首包、基础包、游戏包和其他包。

UI 拆分

分包成功之后,我们就可以很快地进入游戏了。但对于许多游戏来说,场景中会有非常多的面板,如果把这些面板都放在场景节点中,会让场景文件特别大,解析和初始化时间很长。

这里,我用了最新的 KylinsToolkit 中的 KFC(Kylin’s Framework Core) 框架优化了界面管理。

只需要编辑好Prefab,并写好 Controller,就可以在任何地方用一行代码显示想要的界面。

kfcUIMgr.inst.showUI(UI_GameHUD);

界面的分层、资源加载、分辨率适配都是自动管理的。

关于 KylinsToolkitKFC 的介绍,请查看公众号菜单。

依赖分析

微信开发者工具中的代码依赖分析功能,可以说是非常棒的资源的分包分析工具。它可以帮我们检查分包大小,找出分包中的大文件。

在微信开发者工具中的入口如下:

下面是优化前的分包图(11.43MB):

通过分析,我发现我的资源中一些情况:

  • 有一张图是 2.92MB,当我把它转成 jpg 后变成了 522 KB。
  • 鸡的模型,用了两张一模一样的图,移除后,并转成 jpg,从原来的1.5 MB 降到了只需要 177KB。
  • 物体模型使用了多张PNG,转为JPG后,由 1.04 MB 降到了 237 KB

最终分包大小情况如下(7.44MB):

从总包的 11.43MB 降到了 7.44MB,缩小了 3.99MB。

更多优化空间

目前只是手工处理了一些看得见的较大的图片,以及移除了不应该有的资源引用。

想要完全优化更多包体,可以使用 pngquat 等图片压缩工具,将 3D 模型纹理全部处理一下,可以减少非常多。

关于 KFC

今天是疯狂星期四,但麒麟子这里说的 KFC 和它无关。KFC 框架是 Kylin’s Framework Core 的缩写。

麒麟子过去一年多,大部分时间都花在了引领新人入门以及图形渲染教学上,而忽略了某些群体的需求,比如:

  1. 需要技术进阶和成长,学会实用的项目处理技巧
  2. 需要优质的项目模板,快速验证项目原型和进入迭代周期
  3. 需要高质量的框架,解决项目模块管理和一些基础问题。

因此,麒麟子花了一些时间,重启并开源了 KylinsToolkit,并将项目框架方面的部分,抽取为了 KFC

KylinsToolkit 是麒麟子十多年项目经验的总结,虽然不是最优解,但却能在一定程度上,让项目的起步、模块分割、多人协同和后期维护更加顺畅。

目前 KFC 包含了下面几个部分:

  • kylins_base: 一些基础工具组件,如屏幕自动适配、资源加载队列、声音播放管理器、输入管理器等等。
  • kylins_camera:漫游摄像机、FPS摄像机、第三人称摄像机、2D 跟随摄像机
  • kylins_easy_controller:虚拟摇杆(支持 2D 和 3D)、按键、摄像机控制器
  • kylins_ui_framework:极简版的 MVVM 型的 UI 框架,与逻辑数据单向依赖。支持 UI 分层管理、UI 自动加载器、UI 事件托管 等等。

后期会逐步加入网络、2D游戏常用控件、3D游戏常用控件等等。

在此基础上,麒麟子会尽量抽空,基于 KFC 和 KylinsToolkit 中的其他模块,来制作更多的项目模板和案例。也希望有更多使用 KFC 和 KylinsToolkit 来制作项目的朋友能加入进来。

点击这里,领取 KFC 框架!

后续会考虑码云镜像,但我暂时还不知道怎么弄,有会的朋友可以教我。

扫码体验游戏

今天先到这里,大家可以开始体验了

Jare 大冒险源码

https://store.cocos.com/app/detail/4241

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/924214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

办公室隔断,不同人员办公空间隔断设计要求

针对不同人员的办公空间隔断设计,需要考虑到他们的工作性质、隐私需求以及协作方式等因素。以下是一些常见人员类型的办公室隔断设计要求建议: 1. 管理层和高层领导: - 私密性与开放性平衡:管理层通常需要一定的私密性&#xff0c…

AI降温?创业者和投资人不这么想

2023年7月23日,超声波俱乐部AI Open Day在北京举办,百位AI领域顶级创业者、知名投资人汇聚一堂。 超声波创始人杨子超、紫辉创投创始合伙人&CEO郑刚、着魔APP创始人杨磊、豆语星辰CEO阎鹏、SpaceU联合创始人牟奇、Musical.ly天使投资人范路进行了一…

【面试 反思】Retrofit源码与设计 7 连问

前言 在实际项目中往往是使用Retrofit来做网络请求工作。Retrofit采用RESTful风格,本质上只是对OkHttp进行封装,今天我们根据几个问题来进一步学习一下Retrofit的源码与设计思想。 1. 使用方法 直接看一下官方介绍的使用方法。 public final class S…

STM32之17.PWM脉冲宽度调制

一LED0脉冲宽度调制在TIM14_CHI&#xff0c;先将LED&#xff08;PF9&#xff09;代码配置为AF推挽输出模式&#xff0c;将PF9引脚连接到TIM14&#xff0c; #include <stm32f4xx.h>static GPIO_InitTypeDef GPIO_InitStruct;void Led_init(void) {//打开端口F的硬件时钟&a…

021-从零搭建微服务-短信服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

Git gui教程---第八篇 Git gui的使用 创建一个分支

一般情况下一个主分支下代码稳定的情况下会新建出一个分支&#xff0c;然后在分支上修改&#xff0c;修改完成稳定后再合并到主分支上。 或者几个人合作写一份代码&#xff0c;每个人各一个分支&#xff0c;测试稳定再合并到主分支上。 在git gui选择菜单栏“分支”&#xff0…

centos7安装hadoop 单机版

1.解压 &#xff08;1&#xff09;将hadoop压缩包复制到/opt/software路径下 &#xff08;2&#xff09;解压hadoop到/opt/module目录下 [rootkb135 software]# tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/ &#xff08;3&#xff09;修改hadoop属主和属组 [rootkb135 m…

VirtualBox虚拟机安装Centos7详细教程图解

一、前期准备工作&#xff1a; 1、虚拟机下载 VirtualBox版本&#xff1a;7.0.6 下载 VirtualBox 的下载页面&#xff1a;https://www.virtualbox.org/wiki/Downloads VMWare 虚拟机软件&#xff08;收费的&#xff0c;要使用请购买正版软件&#xff09;的官网&#xff1a;…

Springboot中sharding-jdbc的API模式并使用自定义算法

Springboot中sharding-jdbc的API模式并使用自定义算法 可配合AbstractRoutingData使用切换数据源 程序用到了AbstractRoutingData来切换数据源&#xff08;数据源是自定义的格式编写并没有用springboot的自动装配的格式写&#xff09;&#xff0c;但是又用到sharding-jdbc进行…

pycharm添加虚拟环境以及虚拟环境安装pytorch

file、settings、interpreter、add interpreter、add local interpreter 记住不要勾选inherit&#xff0c;不然会把主环境的东西继承到虚拟环境。 创建前可以先点existing看看有没有已经建好的虚拟环境 有的时候pycharm有问题&#xff0c;创建了虚拟环境没有显示。找一个.py文…

交通网络分析性能再升级,SuperMap iServer新增开启SSC分析模型

导语 SSC分析模型&#xff0c;全名SuperMap Short Cut&#xff0c;底层采用Contraction Hierarchies&#xff08;简称CH&#xff09;算法&#xff0c;该算法旨在通过对图形进行预处理和优化来降低最佳路径分析的时间复杂度。SuperMap iServer 11i&#xff08;2023&#xff09;&…

scikit-learn中OneHotEncoder用法

One-Hot编码&#xff0c;又称为一位有效编码&#xff0c;是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值&#xff0c;然后&#xff0c;每个整数值被表示为二进制向量&#xff0c;将整数索引标记为1&#xff0c;其余都标为0。 OneHotEncoder()常用参数解释 …

【Winform学习笔记(十)】TextBox文本框控件 光标定位到文本末尾的方法

TextBox文本框控件 光标定位到文本末尾的方法 前言正文1、具体代码2、使用示例 前言 本文中主要介绍实现 TextBox 文本框控件的光标定位到文本末尾的方法. 正文 1、具体代码 /// <summary> /// TextBox文本框控件 光标定位到文本末尾的方法 /// </summary> ///…

next.js报错点

next.js报错点 1.类型“{ children: ReactNode; }”与类型“IntrinsicAttributes”不具有相同的属性。2. 不能将类型“void[]”分配给类型“ReactNode”&#xff1f;3.useRouter only works in Client Components. Add the "use client" directive at the top of the…

IDEA的maven想显示层级关系,而非平级

新版和旧版的IDEA的位置不一样&#xff0c;2023.2.1的版本在右上角的“” 这个位置 如图所示&#xff1a; 然后点击按模块分组&#xff1a;

[Stable Diffusion教程] 第一课 原理解析+配置需求+应用安装+基本步骤

第一课 原理解析配置需求应用安装基本步骤 本次内容记录来源于B站的一个视频 以下是自己安装过程中整理的问题及解决方法&#xff1a; 问题&#xff1a;stable-diffusion-webui启动No Python at ‘C:\xxx\xxx\python.exe‘ 解答&#xff1a;打开webui.bat 把 if not de…

从零开始的自动化测试框架——Web篇01

Selenium 谈到web自动化&#xff0c;逃不开的一定会是Selenium。这是最为主流&#xff0c;也是最广为人知的一项web自动化产物。但目前业内web自动化其实主要分为以下方向&#xff1a; Selenium&#xff0c;核心主流自动化技术&#xff0c;功能齐全&#xff0c;一般是搭配web…

【算法日志】动态规划刷题:01背包问题,多重背包问题(day37,day38)

代码随想录刷题60Day 目录 前言 目标和&#xff08;01背包&#xff09; 一和零&#xff08;01背包&#xff09; 零钱兑换&#xff08;多重背包&#xff09; 排列总和&#xff08;多重背包&#xff09; 前言 这两天都是背包问题&#xff0c;其中的01背包的一些应用问题需要…

迈步从头越——同为科技(TOWE)22周年庆典活动圆满举行

8月23日&#xff0c;同为科技&#xff08;TOWE&#xff09;迎来公司成立22周年纪念日&#xff0c;这是属于TOWE品牌的又一里程碑时刻。从2001到2023&#xff0c;从产品到品牌&#xff0c;从技术到服务&#xff0c;同为科技&#xff08;TOWE&#xff09;始终秉承着专注于终端设备…

电子合同9问9答,君子签为您答疑解惑

随着互联网的发展&#xff0c;人们交易行为的改变、电子合同的推广&#xff0c;买卖合同、租房合同、采购合同、劳动合同、招投标文件等都开始在线上签署。签署过程中&#xff0c;君子签针对大家的一些疑虑&#xff0c;整理了相关解答。 1、 签电子合同时&#xff0c;如何确…