CocosCreator所有的Prefab都是以下类似的格式:
我们学会用文本编辑器查看Prefab文件,可以帮助我们更轻松的查找节点、查看节点和组件信息、批量修改节点和组件信息等等。
因为在文本编辑器中的Prefab文件才是原始的。
而且CocosCreator中的查看的Prefab信息并不是一定完全,此时,我们就更需求借助文本编辑来查看。
一、格式总纲
Prefab的格式是一个Json数据格式,且这个Json数据是个数组。
Prefab里的所有节点信息或者组件信息都是同一级中。
该数组的第一个元素是cc.Prefab,且cc.Prefab只有一个。
接下来是根节点。
节点的开始标志是cc.Node,节点的结束标志是cc.PrefabInfo。
——意思就是cc.Node和cc.PrefabInfo就是一个CocosCreator中的节点,
——这中间包含所有的子节点和该节点的组件信息。
——且先描述子节点信息,再描述组件信息(如果没有子节点,则直接描述组件信息)。
比如说我的Prefab在CocosCreator中是这样:
根节点是test1,根节点下有子节点test2和test3,test3有子节点test4。
test1(有组件widget)
--test2(有组件sprite)
--test3(没有组件)
-- --test4(有组件widget)
那么,文本的Prefab简洁格式就是这样:
[
{'__type__': "cc.Prefab"},
{'__type__': cc.Node, "_name": test1},
{'__type__': cc.Node, "_name": test2},
{'__type__': cc.Sprite, "_name": ""}, //test2的Sprite信息
{'__type__': cc.PrefabInfo}, //test2节点结束
{'__type__': cc.Node, "_name": test3},
{'__type__': cc.Node, "_name": test4},
{'__type__': cc.Widget, "_name": ""}, //test4的Widget信息
{'__type__': cc.PrefabInfo}, //test3节点结束
//注释:如果test3有组件,则在此添加信息
{'__type__': cc.PrefabInfo}, //test4节点结束
{'__type__': cc.Widget, "_name": ""}, //test1的Widget信息
{'__type__': cc.PrefabInfo}, //test1节点结束
]
二、__type_的类型为节点的状态
{
"__type__": "cc.Node",
"_name": "icon",
"_objFlags": 0,
"_parent": {
"__id__": 45
},
"_children": [],
"_tag": -1,
"_active": true,
"_components": [
{
"__id__": 47
}
],
"_prefab": {
"__id__": 48
},
"_id": "",
"_opacity": 255,
"_color": {
"__type__": "cc.Color",
"r": 255,
"g": 255,
"b": 255,
"a": 255
},
"_cascadeOpacityEnabled": true,
"_anchorPoint": {
"__type__": "cc.Vec2",
"x": 0.5,
"y": 0.5
},
"_contentSize": {
"__type__": "cc.Size",
"width": 95,
"height": 95
},
"_rotationX": 0,
"_rotationY": 0,
"_scaleX": 1,
"_scaleY": 1,
"_position": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_skewX": 0,
"_skewY": 0,
"_localZOrder": 0,
"_globalZOrder": 0,
"_opacityModifyRGB": false,
"groupIndex": 0
},
这里主要说一下"_parent"、"_children"和"_components"
1、_parent会引用父节点的id
2、_children会引用子节点的id
3、_components会引用组件的id
注:本人没看到节点或组件内有标明自己的id,只是从附属的父节点或子节点或组件才知道该节点的id。
这个不知道官方为什么不在自身节点中标明,而只是在关联的节点或组件中才标明。
三、__type__的类型为脚本组件的状态
脚本的格式大致为:
{
"__type__": "ab1b1lVmBVEJJgoMRKZgwuI",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 1
},
"_enabled": true,
"headIcon": {
"__id__": 47
},
"headBox": {
"__id__": 50
},
"levelTexture": {
"__uuid__": "37bf4975-91b4-4aaa-8a11-7900989cbe63"
},
"danTexture": {
"__uuid__": "4676b6bc-cde8-41df-ab2b-f550f141bf33"
},
},
1、__type__的名字是
ab1b1lVmBVEJJgoMRKZgwuI
这样格式的名字。
2、像headIcon这样引用的是Prefab的节点,"__id__"这个可能是节点id,也可能是组件id。
3、danTexture引用的是资源,所以这个资源引用着一个uuid,这个资源可能是图集、纹理、音效、字体等等。
4、_name、_objFlags、node、_enabled是脚本组件的信息,不是脚本的属性;放在"_enabled"的后面的才是脚本属性。
四、__type__为其他组件的状态
基本上其他组件都是有着与CocosCreator编辑器上的属性对应着的字段。
在此列出Sprite和Widget组件的格式,其他就不一一详细说明了。
比如,Sprite组件:
{
"__type__": "cc.Sprite",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 3
},
"_enabled": true,
"_spriteFrame": {
"__uuid__": "743d3deb-016b-430f-aa4b-5b399828495e"
},
"_type": 0,
"_sizeMode": 0,
"_fillType": 0,
"_fillCenter": {
"__type__": "cc.Vec2",
"x": 0,
"y": 0
},
"_fillStart": 0,
"_fillRange": 0,
"_isTrimmedMode": false,
"_srcBlendFactor": 770,
"_dstBlendFactor": 771,
"_atlas": {
"__uuid__": "02eee22c-49e2-49dd-ae41-af335d10d1db"
}
},
Widget组件:
{
"__type__": "cc.Widget",
"_name": "",
"_objFlags": 0,
"node": {
"__id__": 3
},
"_enabled": true,
"isAlignOnce": true,
"_target": null,
"_alignFlags": 45,
"_left": 0,
"_right": 0,
"_top": 0,
"_bottom": 0,
"_verticalCenter": 0,
"_horizontalCenter": 0,
"_isAbsLeft": true,
"_isAbsRight": true,
"_isAbsTop": true,
"_isAbsBottom": true,
"_isAbsHorizontalCenter": true,
"_isAbsVerticalCenter": true,
"_originalWidth": 1046,
"_originalHeight": 212
},
大家可以参照自己的Prefab来对比查看就可以了。
五、场景文件fire的文本格式
fire文件的格式和Prefab的格式有相似之处,大家也了解了Prefab的格式结构后,也可以自行查看fire的文件了。