usingUnityEngine;
usingSystem.Collections;
usingUnityEditor;
usingSystem.Collections.Generic;
usingSystem.Xml;
usingSystem.IO;
usingSystem.Text;
usingLitJson;
publicclassMyEditor:Editor
{
//将所有游戏场景导出为XML格式
[MenuItem("GameObject/ExportXML")]
staticvoidExportXML()
{
stringfilepath=Application.dataPath+@"/StreamingAssets/my.xml";
if(!File.Exists(filepath))
{
File.Delete(filepath);
}
XmlDocumentxmlDoc=newXmlDocument();
XmlElementroot=xmlDoc.CreateElement("gameObjects");
//遍历所有的游戏场景
foreach(UnityEditor.EditorBuildSettingsSceneSinUnityEditor.EditorBuildSettings.scenes)
{
//当关卡启用
if(S.enabled)
{
//得到关卡的名称
stringname=S.path;
//打开这个关卡
EditorApplication.OpenScene(name);
XmlElementscenes=xmlDoc.CreateElement("scenes");
scenes.SetAttribute("name",name);
foreach(GameObjectobjinObject.FindObjectsOfType(typeof(GameObject)))
{
if(obj.transform.parent==null)
{
XmlElementgameObject=xmlDoc.CreateElement("gameObjects");
gameObject.SetAttribute("name",obj.name);
gameObject.SetAttribute("asset",obj.name+".prefab");
XmlElementtransform=xmlDoc.CreateElement("transform");
XmlElementposition=xmlDoc.CreateElement("position");
XmlElementposition_x=xmlDoc.CreateElement("x");
position_x.InnerText=obj.transform.position.x+"";
XmlElementposition_y=xmlDoc.CreateElement("y");
position_y.InnerText=obj.transform.position.y+"";
XmlElementposition_z=xmlDoc.CreateElement("z");
position_z.InnerText=obj.transform.position.z+"";
position.AppendChild(position_x);
position.AppendChild(position_y);
position.AppendChild(position_z);
XmlElementrotation=xmlDoc.CreateElement("rotation");
XmlElementrotation_x=xmlDoc.CreateElement("x");
rotation_x.InnerText=obj.transform.rotation.eulerAngles.x+"";
XmlElementrotation_y=xmlDoc.CreateElement("y");
rotation_y.InnerText=obj.transform.rotation.eulerAngles.y+"";
XmlElementrotation_z=xmlDoc.CreateElement("z");
rotation_z.InnerText=obj.transform.rotation.eulerAngles.z+"";
rotation.AppendChild(rotation_x);
rotation.AppendChild(rotation_y);
rotation.AppendChild(rotation_z);
XmlElementscale=xmlDoc.CreateElement("scale");
XmlElementscale_x=xmlDoc.CreateElement("x");
scale_x.InnerText=obj.transform.localScale.x+"";
XmlElementscale_y=xmlDoc.CreateElement("y");
scale_y.InnerText=obj.transform.localScale.y+"";
XmlElementscale_z=xmlDoc.CreateElement("z");
scale_z.InnerText=obj.transform.localScale.z+"";
scale.AppendChild(scale_x);
scale.AppendChild(scale_y);
scale.AppendChild(scale_z);
transform.AppendChild(position);
transform.AppendChild(rotation);
transform.AppendChild(scale);
gameObject.AppendChild(transform);
scenes.AppendChild(gameObject);
root.AppendChild(scenes);
xmlDoc.AppendChild(root);
xmlDoc.Save(filepath);
}
}
}
}
//刷新Project视图, 不然需要手动刷新哦
AssetDatabase.Refresh();
}
//将所有游戏场景导出为JSON格式
[MenuItem("GameObject/ExportJSON")]
staticvoidExportJSON()
{
stringfilepath=Application.dataPath+@"/StreamingAssets/json.txt";
FileInfot=newFileInfo(filepath);
if(!File.Exists(filepath))
{
File.Delete(filepath);
}
StreamWritersw=t.CreateText();
StringBuildersb=newStringBuilder();
JsonWriterwriter=newJsonWriter(sb);
writer.WriteObjectStart();
writer.WritePropertyName("GameObjects");
writer.WriteArrayStart();
foreach(UnityEditor.EditorBuildSettingsSceneSinUnityEditor.EditorBuildSettings.scenes)
{
if(S.enabled)
{
stringname=S.path;
EditorApplication.OpenScene(name);
writer.WriteObjectStart();
writer.WritePropertyName("scenes");
writer.WriteArrayStart();
writer.WriteObjectStart();
writer.WritePropertyName("name");
writer.Write(name);
writer.WritePropertyName("gameObject");
writer.WriteArrayStart();
foreach(GameObjectobjinObject.FindObjectsOfType(typeof(GameObject)))
{
if(obj.transform.parent==null)
{
writer.WriteObjectStart();
writer.WritePropertyName("name");
writer.Write(obj.name);
writer.WritePropertyName("position");
writer.WriteArrayStart();
writer.WriteObjectStart();
writer.WritePropertyName("x");
writer.Write(obj.transform.position.x.ToString("F5"));
writer.WritePropertyName("y");
writer.Write(obj.transform.position.y.ToString("F5"));
writer.WritePropertyName("z");
writer.Write(obj.transform.position.z.ToString("F5"));
writer.WriteObjectEnd();
writer.WriteArrayEnd();
writer.WritePropertyName("rotation");
writer.WriteArrayStart();
writer.WriteObjectStart();
writer.WritePropertyName("x");
writer.Write(obj.transform.rotation.eulerAngles.x.ToString("F5"));
writer.WritePropertyName("y");
writer.Write(obj.transform.rotation.eulerAngles.y.ToString("F5"));
writer.WritePropertyName("z");
writer.Write(obj.transform.rotation.eulerAngles.z.ToString("F5"));
writer.WriteObjectEnd();
writer.WriteArrayEnd();
writer.WritePropertyName("scale");
writer.WriteArrayStart();
writer.WriteObjectStart();
writer.WritePropertyName("x");
writer.Write(obj.transform.localScale.x.ToString("F5"));
writer.WritePropertyName("y");
writer.Write(obj.transform.localScale.y.ToString("F5"));
writer.WritePropertyName("z");
writer.Write(obj.transform.localScale.z.ToString("F5"));
writer.WriteObjectEnd();
writer.WriteArrayEnd();
writer.WriteObjectEnd();
}
}
writer.WriteArrayEnd();
writer.WriteObjectEnd();
writer.WriteArrayEnd();
writer.WriteObjectEnd();
}
}
writer.WriteArrayEnd();
writer.WriteObjectEnd();
sw.WriteLine(sb.ToString());
sw.Close();
sw.Dispose();
AssetDatabase.Refresh();
}
}