cocos 资源工作流程
前面的话
本文将详细介绍 cocos 中的资源工作流程
概述
【同步性】
资源管理器中的资源和操作系统的文件管理器中看到的项目资源文件夹是同步的
在资源管理器中对资源的移动、重命名和删除,都会直接在用户的文件系统中对资源文件进行同步修改。同样的,在文件系统中(如 Windows 上的 Explorer 或 Mac 上的 Finder)对添加或删除资源,再次打开或激活 Cocos Creator 程序后,也会对资源管理器中的资源进行更新
【meda文件】
所有 assets 路径下的资源都会在导入时生成一份资源配置文件(.meta),这份配置文件提供了该资源在项目中的唯一标识(uuid)以及其他的一些配置信息(如图集中的小图引用,贴图资源的裁剪数据等),非常重要
在编辑器中管理资源时,meta 文件是不可见的,对资源的任意删除、改名、移动操作,都会由编辑器自动同步相应的 meta 文件,确保 uuid 的引用不会丢失和错乱
注意在编辑器外部的文件系统中(Explorer,Finder)对资源文件进行删除、改名、移动时必须同步处理相应的 meta 文件。资源文件和其对应的 meta 文件应该保持在同一个目录下,而且文件名相同
如果在编辑器外部的文件系统中(Explorer,Finder等)进行了资源文件的移动或重命名,而没有同步移动或重命名 meta 文件时,会导致编辑器将改名或移动的资源当做新的资源导入,可能会出现场景和组件中对该资源(包括脚本)的引用丢失
在编辑器发现有未同步的资源配置文件时,会弹窗警告用户,并列出所有不匹配的 meta 文件。这时无法正确匹配的资源配置文件会从项目资源路径(asset)中移除,并自动备份到 temp
路径下
如果希望恢复这些资源的引用,将备份的 meta 文件复制到已经移动过的资源文件同一路径下,并保证资源文件和 meta 文件的文件名相同
注意编辑器在处理资源改名和移动时会生成新的 meta 文件,这些新生成的 meta 文件可以在恢复备份的 meta 后安全删除
图像资源
图像资源经常被称作贴图、图片,是游戏中绝大部分图像渲染的数据源。图像资源一般由图像处理软件(如 PS )制作而成并输出成 Cocos Creator 可以使用的文件格式,目前包括 JPG 和 PNG 两种
图像资源在资源管理器中以自身图片的缩略图作为图标。在资源管理器中选中图像资源后,属性检查器下方会显示该图片的缩略图
【SpriteFrame】
在资源管理器中,图像资源的左边会显示一个和文件夹类似的三角图标,点击就可以展开看到它的子资源(sub asset),每个图像资源导入后编辑器会自动在它下面创建同名的 SpriteFrame 资源
SpriteFrame 是核心渲染组件 Sprite 所使用的资源,设置或替换 Sprite 组件中的 spriteFrame
属性,就可以切换显示的图像
为什么会有 SpriteFrame 这种资源?这样的设置是因为除了每个文件产生一个 SpriteFrame 的图像资源(Texture)之外,还有包含多个 SpriteFrame 的图集资源(Atlas)类型
直接将 SpriteFrame 或图像资源从资源管理器中拖拽到层级管理器或场景编辑器中,就可以直接用所选的图像在场景中创建 Sprite 节点。之后可以拖拽其他的 SpriteFrame 或图像资源到该 Sprite 组件的 Sprite Frame
属性栏中,来切换该 Sprite 显示的图像
导入图像资源后生成的 SpriteFrame 会进行自动剪裁,去除原始图片周围的透明像素区域。这样在使用 SpriteFrame 渲染 Sprite 时,将会获得有效图像更精确的大小
预制资源
在场景中编辑好节点后,直接将节点从层级管理器拖到资源管理器,即可创建出一个预制(prefab)
在场景中修改了预制实例后,在属性检查器中直接点击保存,即可保存对应的预制资源
在场景中修改了预制实例后,在属性检查器中直接点击回退,即可将预制对象还原为资源中的状态
每个场景中的预制实例都可以选择要自动同步和还是手动同步。设为手动同步时,当预制对应的原始资源被修改后,场景中的预制实例不会同步刷新,只有在用户手动还原预制时才会刷新;设为自动同步时,该预制实例会自动和原始资源保持同步
图集资源
图集(Atlas)也称作 Sprite Sheet,是游戏开发中常见的一种美术资源。图集是通过专门的工具将多张图片合并成一张大图,并通过 plist 等格式的文件索引的资源。可供 Cocos Creator 使用的图集资源由 plist 和 png 文件组成
在游戏中使用多张图片合成的图集作为美术资源,有以下优势:
1、合成图集时会去除每张图片周围的空白区域,加上可以在整体上实施各种优化算法,合成图集后可以大大减少游戏包体和内存占用
2、多个 Sprite 如果渲染的是来自同一张图集的图片时,这些 Sprite 可以使用同一个渲染批次来处理,大大减少 CPU 的运算时间,提高运行效率
要生成图集,首先应该准备好一组原始图片,接下来可以使用专门的软件(texturepacker 或者 Zwoptex)生成图集,使用这些软件生成图集时选择 cocos2d-x 格式的 plist 文件。最终得到的图集文件是同名的 plist 和 png,将 plist 和 png 文件同时拖拽到资源管理器中,就可以生成可以在编辑器和脚本中使用的图集资源了
【自动图集】
自动图集资源是 Cocos Creator 自带的合图功能,可以将指定的一系列碎图打包成一张大图,在资源管理器中右键,可以在如下菜单中找到 新建 -> 自动图集配置 的子菜单,点击菜单将会新建一个类似 AutoAtlas.pac 的资源,自动图集资源将会以当前文件夹下的所有 SpriteFrame 作为碎图资源。 如果碎图资源 SpriteFrame 有进行配置过,在打包后重新生成的 SpriteFrame 将会保留这些配置
艺术数字资源
艺术数字资源是一种用户自定义的资源,它可以用来配置艺术数字字体的属性。在资源管理器中右键,可以在如下菜单中找到 新建 -> 艺术数字配置 的子菜单,点击菜单将会新建一个类似 LabelAtlas.labelatlas 的资源。艺术数字资源在使用之前需要进行一些配置,比如关联渲染的图片资源,设置每一个字符的宽高和起始字符信息
在资源管理器中选中一个艺术数字资源后,属性检查器面板将会显示艺术数字资源的所有可配置项,配置完成后需要点击属性检查器右上角的绿色的打勾按钮来保存设置
使用艺术数字资源非常简单,只需要新建一个 Label 组件,然后把新建好的艺术数字资源拖到 Label 组件的 Font 属性即可
字体资源
使用 Cocos Creator 制作的游戏中可以使用三类字体资源:系统字体,动态字体和位图字体
系统字体是通过调用游戏运行平台自带的系统字体来渲染文字,不需要用户在项目中添加任何相关资源。要使用系统字体,需要使用Label组件中的 Use System Font 属性
目前 Cocos Creator 支持 TTF 格式的动态字体。只要将扩展名为 TTF 的字体文件拖拽到资源管理器中,即可完成字体资源的导入
位图字体由 fnt 格式的字体文件和一张 png 图片组成,fnt 文件提供了对每一个字符小图的索引。这种格式的字体可以由专门的软件生成
在导入位图字体时,需要将 fnt 文件和 png 文件同时拖拽到资源管理器中
字体资源需要通过 Label 组件来渲染,在层级管理器中点击左上角的创建节点按钮,并选择创建渲染节点/Label(文字)
,就会在场景中创建出一个带有 Label 组件的节点。也可以通过主菜单的节点/创建渲染节点/Label(文字)
来完成创建,效果一样
字体组件默认使用系统字体作为关联的资源,如果想要使用导入到项目中的 TTF 或位图字体,可以将字体资源拖拽到创建的 Label 组件中的 File
属性栏中
可以根据项目需要,自由的切换同一个 Label 组件的 File
属性,来使用 TTF 或位图字体。切换字体文件时,Label 组件的其他属性不受影响
如果要恢复使用系统字体,可以点击 Use System Font
的属性复选框,来清除 File
属性中指定的字体文件
好的代码像粥一样,都是用时间熬出来的