--摘自官方文档html
资源管理器 提供了三种在项目中添加资源的方式:web
从操做系统中的其余窗口拖拽文件到 Cocos Creator 窗口中的 资源管理器 面板上,就可以从外部导入资源。该操做会自动复制资源文件到项目资源文件夹下,并完成导入操做。算法
资源管理器 中的资源和操做系统的文件管理器中看到的项目资源文件夹是同步的,在 资源管理器 中对资源的移动、重命名和删除,都会直接在用户的文件系统中对资源文件进行同步修改。一样的,在文件系统中(如 Windows 上的 Explorer 或 Mac 上的 Finder)对添加或删除资源,再次打开或激活 Cocos Creator 程序后,也会对 资源管理器 中的资源进行更新。api
全部 assets
路径下的资源都会在导入时生成一份 资源配置文件(.meta) 这份配置文件提供了该资源在项目中的惟一标识(uuid)以及其余的一些配置信息(如图集中的小图引用,贴图资源的裁剪数据等),很是重要。数组
在编辑器中管理资源时,meta 文件是不可见的,对资源的任意删除、更名、移动操做,都会由编辑器自动同步相应的 meta 文件,确保 uuid 的引用不会丢失和错乱。安全
注意在编辑器外部的文件系统中(Explorer,Finder)对资源文件进行删除、更名、移动时必须同步处理相应的 meta 文件。资源文件和其对应的 meta 文件应该保持在同一个目录下,并且文件名相同。性能优化
若是您在编辑器外部的文件系统(Explorer,Finder等)中进行了资源文件的移动或重命名,而没有同步移动或重命名 meta 文件时,会致使编辑器将更名或移动的资源当作新的资源导入,可能会出现场景和组件中对该资源(包括脚本)的引用丢失。闭包
在编辑器发现有未同步的资源配置文件时,会弹窗警告用户,并列出全部不匹配的 meta 文件。架构
这时没法正确匹配的资源配置文件会从项目资源路径(asset)中移除,并自动备份到 temp
路径下。async
若是您但愿恢复这些资源的引用,请将备份的 meta 文件复制到已经移动过的资源文件同一路径下,并保证资源文件和 meta 文件的文件名相同。注意编辑器在处理资源更名和移动时会生成新的 meta 文件,这些新生成的 meta 文件能够在恢复备份的 meta 后安全删除。
除了导入基础资源外,从 1.5 版本开始编辑器支持将一个项目中的资源和其依赖完整的导出到另外一个项目,详情请阅读 导入导出资源工做流程。
如今能够在 Cocos Creator 中导入其余编辑器的项目。具体的说明请参考:导入其余编辑器项目
接下来咱们会介绍 Cocos Creator 中主要资源类型和相关工做流程:
方法一:选择主菜单:文件/新建场景
方法二:在 资源管理器 中点击建立菜单,建立新场景。
方法一:使用快捷键 Ctrl + S
(Windows) 或 Command + S
(Mac)
方法二:选择主菜单:文件/保存场景
在 资源管理器 中,双击须要打开的场景。
若是项目中的场景不少,随着新场景的切换,内存占用就会不断上升。除了使用 cc.loader.release
等 API 来精确释放不使用的资源,咱们还可使用场景的自动释放功能。要配置自动释放,能够在 资源管理器 中选中所需场景,而后在 属性检查器 中设置“自动释放资源”选项,该项默认关闭。
从当前场景切换到下一个场景时,若是当前场景不自动释放资源,则该场景中直接或间接引用到的全部资源(脚本动态加载的不算),默认都不主动释放。反之若是启用了自动释放,则这些引用到的资源默认都会自动释放。
已知问题:粒子系统的 plist 所引用的贴图不会被自动释放。若是要自动释放粒子贴图,请从 plist 中移除贴图信息,改用粒子组件的 Texture 属性来指定贴图。
启用了某个场景的资源自动释放后,若是在脚本中保存了对该场景的资源的“特殊引用”,则当场景切换后,因为资源已经被释放,这些引用可能会变成非法的,有可能引发渲染异常等问题。为了让这部分资源在场景切换时不被释放,咱们可使用 cc.loader.setAutoRelease 或者 cc.loader.setAutoReleaseRecursively 来保留这些资源。
“特殊引用”指的是以全局变量、单例、闭包、“特殊组件”、“动态资源”等形式进行的引用。“特殊组件”是指经过 cc.game.addPersistRootNode
方法设置的常驻节点及其子节点上的组件,而且这些组件中包含以字符串 URL 或 UUID,或者以除了数组和字典外的其它容器去保存的资源引用。“动态资源”指的是在脚本中动态建立或动态修改的资源。这些资源若是还引用到场景中的其它资源,则就算动态资源自己不该该释放,其它资源默认仍是会被场景自动释放。
以上关于场景资源自动释放部分的内容能够概括为下图中的几种状况:
在 资源管理器 中,选中指定场景,能够在 属性检查器 中看到“延迟加载资源”选项,该项默认关闭。
加载场景时,若是这个选项关闭,则这个场景直接或间接递归依赖的全部资源都将被加载,所有加载完成后才会触发场景切换。
加载场景时,若是选项开启,则这个场景直接或间接依赖的全部贴图、粒子和声音都将被延迟到场景切换后才加载,使场景切换速度极大提高。
同时,玩家进入场景后可能会看到一些资源陆续显示出来,而且激活新界面时也可能会看到界面中的元素陆续显示出来,所以这种加载方式更适合网页游戏。
使用这种加载方式后,为了能在场景中更快地显示须要的资源,建议一开始就让场景中暂时不须要显示的渲染组件(如 Sprite)保持非激活状态。
Spine 和 TiledMap 依赖的资源永远都不会被延迟加载。
图像资源又常常被称做贴图、图片,是游戏中绝大部分图像渲染的数据源。图像资源通常由图像处理软件(好比 Photoshop,Windows 上自带的画图)制做而成并输出成 Cocos Creator 可使用的文件格式,目前包括 JPG 和 PNG 两种。
使用默认的资源导入方式就能够将图像资源导入到项目中,以后咱们就能够在 资源管理器 中看到以下图所示的图像资源。
图像资源在 资源管理器 中会以自身图片的缩略图做为图标。在 资源管理器 中选中图像资源后,属性检查器 下方会显示该图片的缩略图。目前图像资源的属性设置功能尚未完善,请不要在 属性检查器 手动修改图像资源的属性设置。
在 资源管理器 中,图像资源的左边会显示一个和文件夹相似的三角图标,点击就能够展开看到它的子资源(sub asset),每一个图像资源导入后编辑器会自动在它下面建立同名的 SpriteFrame 资源。
SpriteFrame 是核心渲染组件 Sprite 所使用的资源,设置或替换 Sprite 组件中的 spriteFrame
属性,就能够切换显示的图像。Sprite 组件的设置方式请参考Sprite 组件参考。
为何会有 SpriteFrame 这种资源?这样的设置是由于除了每一个文件产生一个 SpriteFrame 的图像资源(Texture)以外,咱们还有包含多个 SpriteFrame 的图集资源(Atlas)类型。参考图集资源(Atlas)文档来了解更多信息。
下面是 Texture 和 SpriteFrame 的 API 接口文档:
直接将 SpriteFrame 或图像资源从 资源管理器 中拖拽到 层级管理器 或 场景编辑器 中,就能够直接用所选的图像在场景中建立 Sprite 节点。
以后能够拖拽其余的 SpriteFrame 或图像资源到该 Sprite 组件的 Sprite Frame
属性栏中,来切换该 Sprite 显示的图像。
在 动画编辑器 中也能够拖拽 SpriteFrame 资源到已建立好的 Sprite Frame 动画轨道上,详见编辑序列帧动画文档。
使用单独存在的 Texture 做为 Sprite 资源,在预览和发布游戏时,将没法对这些 Sprite 进行批量渲染优化的操做。目前编辑器不支持转换原有的单张 Texture 引用到 Atlas 里的 SpriteFrame 引用,因此在开发正式项目时,应该尽早把须要使用的图片合成 Atlas(图集),并经过 Atlas 里的 SpriteFrame 引用使用。详情请继续阅读下一篇。
在场景中编辑好节点后,直接将节点从 层级管理器 拖到 资源管理器:
便可建立出一个预制:
在场景中修改了预制实例后,在 属性检查器 中直接点击 保存,便可保存对应的预制资源:
在场景中修改了预制实例后,在 属性检查器 中直接点击 回退,便可将预制对象还原为资源中的状态:
每一个场景中的预制实例均可以选择要自动同步和仍是手动同步。
设为手动同步时,当预制对应的原始资源被修改后,场景中的预制实例不会同步刷新,只有在用户手动还原预制时才会刷新。
设为自动同步时,该预制实例会自动和原始资源保持同步。
图中的图标表示当前预制的同步方式,点击图标将会在两种模式之间切换:
上面的图标表示当前预制使用手动同步,点击图标会切换到自动同步:
注意,为了保持引擎的精简,自动同步的预制实例有以下限制:
这些限制都仅影响编辑器操做,运行时不影响。
从 资源管理器 中删除一个预制资源后,你能够将场景中对应的预制实例还原成普通节点。方法是选中预制实例,而后点击菜单 节点 > 还原成普通节点
。
在 资源管理器 中,选中任一预置资源,能够在 属性检查器 中编辑如下选项。
在 v1.8.0 中加入了“优化策略”选项,能优化所选预置的实例化时间,也就是执行 cc.instantiate
所需的时间。可设置的值有:
若是这个预置须要反复执行 cc.instantiate
,请选择“优化屡次建立性能”,不然保持默认的“自动调整”便可。
在旧版本引擎中,优化方式固定为“优化屡次建立性能”,在须要批量建立对象的场合中效果拔群。可是有很多人将 prefab 做为多人协做或者分步加载的工具,这些 prefab 基本只会实例化一次,就会致使节点建立速度变慢。新版本默认采用“自动调整”之后,很好的解决了这个问题。
该项默认关闭。勾选以后,使用 属性检查器 关联、loadRes 等方式单独加载预置资源时,将会延迟加载预置所依赖的其它资源,提高部分页游的加载速度。详情请参考场景的延迟加载。
图集(Atlas)也称做 Sprite Sheet,是游戏开发中常见的一种美术资源。图集是经过专门的工具将多张图片合并成一张大图,并经过 plist 等格式的文件索引的资源。可供 Cocos Creator 使用的图集资源由 plist 和 png 文件组成。下面就是一张图集使用的图片文件:
在游戏中使用多张图片合成的图集做为美术资源,有如下优点:
更形象生动的解释能够观看来自 CodeAndWeb 的教学视频What is a Sprite Sheet(什么是图集)。
要生成图集,首先您应该准备好一组原始图片:
接下来可使用专门的软件生成图集,咱们推荐的图集制做软件包括:
使用这些软件生成图集时请选择 cocos2d-x 格式的 plist 文件。最终获得的图集文件是同名的 plist 和 png。
将上面所示的 plist 和 png 文件同时拖拽到 资源管理器 中,就能够生成能够在编辑器和脚本中使用的图集资源了。
在图像资源文档中,咱们介绍了 Texture 和 SpriteFrame 的关系。导入图集资源后,咱们能够看到类型为 Atlas
的图集资源能够点击左边的三角图标展开,展开后能够看到图集资源里包含了不少类型为 SpriteFrame
的子资源,每一个子资源都是能够单独使用和引用的图片。
接下来对于 Sprite Frame 的使用方法就和图像资源中介绍的同样了,请查阅相关文档。
在项目原型阶段或生产初期,美术资源的内容和结构变化都会比较频繁,咱们一般会直接使用碎图(也就是多个单独的图片)来搭建场景和制做 UI。在以后为了优化性能和节约包体,须要将碎图合并成图集。Creator 提供了自动图集功能,能够在发布项目时无缝地将生产阶段的碎图合并成图集,而且自动更新资源索引。请查看 自动图集资源 获取详细用法。
自动图集资源 做为 Cocos Creator 自带的合图功能,能够将指定的一系列碎图打包成一张大图,具体做用和 Texture Packer 的功能很相近。
在 资源管理器 中右键,能够在以下菜单中找到 新建 -> 自动图集配置 的子菜单,点击菜单将会新建一个相似 AutoAtlas.pac 的资源。
自动图集资源 将会以当前文件夹下的全部 SpriteFrame 做为碎图资源,之后会增长其余的选择碎图资源的方式。 若是碎图资源 SpriteFrame 有进行配置过,在打包后从新生成的 SpriteFrame 将会保留这些配置。
在资源管理器中选中一个 自动图集资源 后,属性检查器 面板将会显示 自动图集资源 的全部可配置项。
属性 |
功能说明 |
最大宽度 |
单张图集最大宽度 |
最大高度 |
单张图集最大高度 |
间距 |
图集中碎图之间的间距 |
容许旋转 |
是否容许旋转碎图 |
输出大小为正方形 |
是否强制将图集长宽大小设置成正方形 |
输出大小为二次幂 |
是否将图集长宽大小设置为二次方倍数 |
算法 |
图集打包策略, 可选的策略有 [BestShortSideFit, BestLongSideFit, BestAreaFit, BottomLeftRule, ContactPointRule] |
输出格式 |
图集图片生成格式,可选的格式有 [png, jpg, webp] |
扩边 |
在碎图的边框为扩展出一像素外框,并复制相邻碎图像素到外框中 |
不包含未被引用资源 |
在预览中,此选项不会生效,构建后此选项才会生效 |
配置完成后能够点击 预览 按钮来预览打包的结果,按照当前自动图集配置生成的相关结果将会展现在 属性检查器 下面的区域。 须要注意的是每次配置事后,须要从新点击 预览 才会从新生成预览信息。
结果分为:
预览项目或者在 Cocos Creator 中使用碎图的时候都是直接使用的碎图资源,在 构建项目 这一步才会真正生成图集到项目中。 生成的大图将会放在 构建目录 下的 res/raw-assets 相对于项目中 assets 目录结构下的对应的目录中,以 AutoAtlas-xx.png 结构命名。 生成项目后能够到对应的目录下检查对应的图集资源是否生成成功了。
艺术数字资源 是一种用户自定义的资源,它能够用来配置艺术数字字体的属性。
在 资源管理器 中右键,能够在以下菜单中找到 新建 -> 艺术数字配置 的子菜单,点击菜单将会新建一个相似 LabelAtlas.labelatlas 的资源。
艺术数字资源 在使用以前须要进行一些配置,好比关联渲染的图片资源,设置每个字符的宽高和起始字符信息。
在资源管理器中选中一个 艺术数字资源 后,属性检查器 面板将会显示 艺术数字资源 的全部可配置项。
属性 |
功能说明 |
Raw Texture File |
指定渲染图片 |
Item Width |
指定每个字符的宽度 |
Item Height |
指定每个字符的高度 |
Start Char |
指定艺术数字字体里面的第一个字符,若是字符是 Space,也须要在这个属性里面输入空格字符 |
配置完成后须要点击 属性检查器 右上角的绿色的打勾按钮来保存设置。
使用艺术数字资源很是简单,你只须要新建一个 Label 组件,而后把新建好的艺术数字资源拖到 Label 组件的 Font 属性便可。
Cocos Creator 是专一于内容创做的游戏开发工具,在游戏开发过程当中,对于每一个项目该项目专用的程序架构和功能之外,咱们还会生产大量的场景、角色、动画和 UI 控件等相对独立的元素。对于一个开发团队来讲,不少状况下这些内容元素都是能够在必定程度上重复利用的。
在以场景和 Prefab 为内容组织核心的模式下,1.5版本的 Cocos Creator 内置了场景(.fire)和预制(.prefab)资源的导出和导入工具。
在主菜单选择 「文件->导出资源」,便可打开资源导出工具面板,接下来能够用如下两种方式选择须要导出的资源:
能够选择的资源包括 .fire
场景文件和 .prefab
预制文件。
导出工具会自动检查所选资源的依赖列表并列出在面板里,用户能够手动检查每一项依赖是否必要,并剔除部分依赖的资源。被剔除的资源将不会被导出。
确认完毕后点击 导出 按钮,会弹出文件存储对话框,用户须要指定一个文件夹位置和文件名,点击 存储,就会生成 文件名.zip
的压缩包文件,包含导出的所有资源。
有了导出的资源包,就能够在新项目中导入这些现成的资源了,在新项目的主菜单里选择 「文件->导入资源」,便可打开资源导入面板。
点击 Zip 文件路径 输入框右边的 选择 按钮,在文件浏览对话框中选择刚才导出的导出资源压缩包。
导入过程当中也会让用户再次确认导入资源依赖,在这时候也能够取消某些资源的勾选来不导入部分资源。
相比导出过程,导入过程当中增长了 导入目标路径
的设置,用户能够点击旁边的 选择 按钮,选择一个项目 assets
路径下的某个文件夹做为导入资源的放置位置。因为导出资源时全部资源的路径都是以相对于 assets
路径来保存的,导入时若是不但愿导入的资源放入 assets
根目录下,就能够再指定一层中间目录来隔离不一样来源的导入资源。
设置完成后点击 导入 按钮,会弹出确认对话框,确认后就会把列出的资源导入到目标路径下。
因为 Creator 项目中的脚本不能同名,当导入的资源包含和当前项目里脚本同名的脚本时,将不会导入同名的脚本。若是出现导入资源的 UUID 和项目中现有资源 UUID 冲突的状况,会自动为导入资源生成新的 UUID,并更新在其余资源里的引用。
有了全新的资源导入/导出功能,咱们能够进一步根据项目和团队须要扩展工做流,好比:
在此基础上还能够发展出更多样化的工做流程,开发团队能够发挥想象力,并使用扩展插件系统进一步定制导入导出的数据和行为,知足更复杂的须要。
导入图像资源后生成的 SpriteFrame 会进行自动剪裁,去除原始图片周围的透明像素区域。这样咱们在使用 SpriteFrame 渲染 Sprite 时,将会得到有效图像更精确的大小。
和图片裁剪相关的 Sprite 组件设置有如下两个:
Trim
勾选后将在渲染 Sprite 图像时去除图像周围的透明像素,咱们将看到恰好能把图像包裹住的约束框。取消勾选,Sprite 节点的约束框会包括透明像素的部分。Size Mode
用来将节点的尺寸设置为原图或原图裁剪透明像素后的大小,一般用于在序列帧动画中保证图像显示为正确的尺寸。有如下几种选择:TRIMMED
选择这个选项,会将节点的尺寸(size)设置为原始图片裁剪掉透明像素后的大小。RAW
选择这个,会将节点尺寸设置为原始图片包括透明像素的大小。CUSTOM
自定义尺寸,用户在使用 矩形变换工具 拖拽改变节点的尺寸,或经过修改 Size
属性,或在脚本中修改 width
或 height
后,都会自动将 Size Mode
设为 CUSTOM
。表示用户将本身决定节点的尺寸,而不须要考虑原始图片的大小。下图中展现了两种常见组合的渲染效果:
有不少动画师在绘制序列帧动画时,会使用一张较大的画布,而后将角色在动画中的运动直接经过角色在画布上的位置变化表现出来。在使用这种素材时,咱们须要将 Sprite 组件 的 Trim
设为 false
,将 Size Mode
设为 RAW
。这样动画在播放每一个序列帧时,都将使用原始图片的尺寸,并保留图像周围透明像素的信息,这样才能正确显示绘制在动画中的角色位移。
而 Trim
设为 true
,则是在位移彻底由角色位置属性控制的动画中,更推荐使用的方式。
在制做序列帧动画时,咱们一般会使用TexturePacker这样的工具将序列帧打包成图集,并在导入后经过图集资源下的 SpriteFrame
来使用。在 TexturePacker 中输出图集资源时,Sprites 分类下的 Trim mode 请选择 Trim
,必定不要选择 Crop, flush position
,不然透明像素剪裁信息会丢失,您在使用图集里的资源时也就没法得到原始图片未剪裁的尺寸和偏移信息了。
使用 Cocos Creator 制做的游戏中可使用三类字体资源:系统字体,动态字体和位图字体。
其中系统字体是经过调用游戏运行平台自带的系统字体来渲染文字,不须要用户在项目中添加任何相关资源。要使用系统字体,请使用Label组件中的 Use System Font 属性。
目前 Cocos Creator 支持 TTF 格式的动态字体。只要将扩展名为 TTF 的字体文件拖拽到 资源管理器 中,便可完成字体资源的导入。
位图字体由 fnt 格式的字体文件和一张 png 图片组成,fnt 文件提供了对每个字符小图的索引。这种格式的字体能够由专门的软件生成,请参考位图字体制做工具。
在导入位图字体时,请务必将 fnt 文件和 png 文件同时拖拽到 资源管理器 中。
导入后的字体在 资源管理器 中显示以下:
注意 为了提升资源管理效率,建议将导入的 fnt
和 png
文件存放在单独的目录下,不要和其余资源混在一块儿。
字体资源须要经过 Label 组件来渲染,下面是在场景中建立带有 Label 组件的节点的方法。
在 层级管理器 中点击左上角的 建立节点 按钮,并选择 建立渲染节点/Label(文字)
,就会在场景中建立出一个带有 Label 组件的节点。
您也能够经过主菜单的 节点/建立渲染节点/Label(文字)
来完成建立,效果和上面的方法同样。
使用上面方法建立的字体组件默认使用系统字体做为关联的资源,若是想要使用导入到项目中的 TTF 或位图字体,能够将您的字体资源拖拽到建立的 Label 组件中的 File
属性栏中。
这时场景中的字体会马上用刚才指定的字体资源进行渲染。您也能够根据项目须要,自由的切换同一个 Label 组件的 File
属性,来使用 TTF 或位图字体。切换字体文件时,Label 组件的其余属性不受影响。
若是要恢复使用系统字体,能够点击 Use System Font
的属性复选框,来清除 File
属性中指定的字体文件。
另一种快捷使用指定资源建立字体节点的方法,是直接从 资源管理器 中拖拽字体文件(TTF 或位图字体均可以)到 层级管理器 中。和上面用菜单建立的惟一区别,是使用拖拽方式建立的文字节点会自动使用拖拽的字体资源来设置 Label 组件的 File
属性。
若是位图字体使用的贴图和其余 Sprite 使用的贴图是同一张,并且位图字体和 Sprite 之间没有插入使用其余贴图的渲染对象时,位图字体就能够和 Sprite 合并渲染批次。在放置位图字体资源时,请把 .fnt
文件、.png
文件和 Sprite 所使用的贴图文件放在一个文件夹下,而后参考 自动图集工做流程 将位图字体的贴图和 Sprite 使用的贴图打包成一个图集,便可在原生和 WebGL 渲染环境下自动享受位图字体合并渲染的性能提高。
详情请参考 BMFont 与 UI 合图自动批处理。