unity3D技术之导出Unity场景的所有游戏对象信息.docx
- 文档编号:3146136
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:15
- 大小:120.91KB
unity3D技术之导出Unity场景的所有游戏对象信息.docx
《unity3D技术之导出Unity场景的所有游戏对象信息.docx》由会员分享,可在线阅读,更多相关《unity3D技术之导出Unity场景的所有游戏对象信息.docx(15页珍藏版)》请在冰豆网上搜索。
unity3D技术之导出Unity场景的所有游戏对象信息
导出Unity场景的所有游戏对象信息,一种是XML一种是JSON。
本篇文章咱们把游戏场景中游戏对象的、旋转、缩放、平移与Prefab的名称导出在XML与JSON中。
然后解析方才导出的XML或JSON通过脚本把导出的游戏场景还原。
在Unity官网上下载随意下载一个demoProject,如以下图所示这是我方才在官网上下载的一个范例程序。
接着将层次视图中的所有游戏对象都封装成Prefab保留在资源途径中,那个地址注意一下假设是你的Prefab绑定的脚本中有publicObject的话,需要在代码中改一下。
。
用Find()FindTag()这种方式在脚本中Awake()方式中来拿,不然Prefab动态加载的时候无法赋值的,如以下图所示,我把封装的Prefab对象都放在了Resources/Prefab文件夹下。
OK,此刻咱们就需要编写咱们的导出工具、在Project视图中创建Editor文件夹,接着创建脚本MyEditor。
如以下图所示。
因为编辑的游戏场景数量比较多,导出的时候咱们需要遍历所有的游戏场景,一个一个的读取场景信息。
然后取得游戏场景中所有游戏对象的Prefab的名称旋转缩放平移。
有关XML的利用请大伙儿看我的上一篇文章:
代码中我只注释重点的部份,嘿嘿。
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
usingUnityEngine;
using;
usingUnityEditor;
using;
using;
using;
usingLitJson;
publicclassMyEditor:
Editor
{
refab");
XmlElementtransform=("transform");
XmlElementposition=("position");
XmlElementposition_x=("x");
="";
XmlElementposition_y=("y");
="";
XmlElementposition_z=("z");
="";
(position_x);
(position_y);
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
(position_z);
XmlElementrotation=("rotation");
XmlElementrotation_x=("x");
="";
XmlElementrotation_y=("y");
="";
XmlElementrotation_z=("z");
="";
(rotation_x);
(rotation_y);
(rotation_z);
XmlElementscale=("scale");
XmlElementscale_x=("x");
="";
XmlElementscale_y=("y");
="";
XmlElementscale_z=("z");
="";
(scale_x);
(scale_y);
(scale_z);
(position);
(rotation);
(scale);
(transform);
(gameObject);
(scenes);
(root);
(filepath);
}
}
}
}
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
hildNodes;
foreach(XmlElementscene innodeList)
{
quals("Assets/"))
{
continue;
}
foreach(XmlElementgameObjectsin
{
stringasset="Prefab/"+("name");
Vector3pos=;
Vector3rot=;
Vector3sca=;
foreach(XmlElementtransformin
{
foreach(XmlElementprsin
{
if=="position")
{
foreach(XmlElementpositionin
{
switch
{
case"x":
=;
break;
case"y":
=;
break;
case"z":
=;
break;
}
}
}elseif=="rotation")
{
foreach(XmlElementrotationin
{
switch
{
case"x":
=;
break;
case"y":
=;
break;
case"z":
=;
break;
}
}
}elseif=="scale")
{
foreach(XmlElementscalein
{
switch
{
case"x":
=;
break;
case"y":
=;
break;
case"z":
=;
break;
}
}
}
}
//拿到旋转缩放平移以后克隆新游戏对象
GameObjectob=(GameObject)Instantiate(asset),pos,(rot));
=sca;
}
}
}
}
}
//Updateiscalledonceperframe
voidUpdate()
{
}
voidOnGUI()
{
if(newRect(0,0,200,200),"XMLWORLD"))
{
("JSONScene");
}
}
}
接着JSON场景中,创建一个空的游戏对象,把挂上去。
C#
1
usingUnityEngine;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using;
using;
usingLitJson;
publicclassJSON:
MonoBehaviour{
//Usethisforinitialization
voidStart()
{
#ifUNITY_EDITOR
stringfilepath=+"/StreamingAssets"+"/";
#elifUNITY_IPHONE
stringfilepath=+"/Raw"+"/";
#endif
StreamReadersr =(filepath);
string strLine=();
JsonDatajd=(strLine);
JsonDatagameObjectArray=jd["GameObjects"];
inti,j,k;
for(i=0;i<;i++)
{
JsonDatasenseArray=gameObjectArray[i]["scenes"];
for(j=0;j<;j++)
{
stringsceneName=(string)senseArray[j]["name"];
if(!
("Assets/"))
{
continue;
}
JsonDatagameObjects=senseArray[j]["gameObject"];
for(k=0;k<;k++)
{
stringobjectName=(string)gameObjects[k]["name"];
stringasset="Prefab/"+objectName;
Vector3pos=;
Vector3rot=;
Vector3sca=;
JsonDataposition=gameObjects[k]["position"];
JsonDatarotation=gameObjects[k]["rotation"];
JsonDatascale=gameObjects[k]["scale"];
=((string)position[0]["x"]);
=((string)position[0]["y"]);
=((string)position[0]["z"]);
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
=((string)rotation[0]["x"]);
=((string)rotation[0]["y"]);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- unity3D 技术 导出 Unity 场景 所有 游戏 对象 信息