Unity中xml的简单用法笔记

前端之家收集整理的这篇文章主要介绍了Unity中xml的简单用法笔记前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
using UnityEngine;
using System.Collections;
// 引入System.Xml空间
using System.Xml;
// 引入System
using System;
/// <summary>
/// 脚本位置:摄像机
/// 脚本功能:本地数据存储
/// </summary>
public class TestXml : MonoBehavIoUr
{
		// 定义一个物体数组
		GameObject[] capsule;
		// 预制体
		public GameObject longchuang;
		// Use this for initialization
		void Start ()
		{
//				// 场景中运行时就存在的物体数组
//				capsule  = GameObject.FindGameObjectsWithTag("JiaoNang");
//				// 创建一个xml文本
//				XmlDocument xmlDoc = new XmlDocument ();
//				// 生成根元素		         创建元素
//				XmlElement root = xmlDoc.CreateElement ("transform");
//				for (int i = 0; i < capsule.Length; i++) {
//
//						XmlElement posNode = xmlDoc.CreateElement ("position");
//						// 设置具有指定名称的特性的值
//						posNode.SetAttribute ("id",i.ToString());
//						XmlElement x = xmlDoc.CreateElement ("x");
//						// 获取或设置节点及其所有子集的串联值
//						x.InnerText = capsule [i].transform.position.x.ToString();
//						XmlElement y = xmlDoc.CreateElement ("y");
//						y.InnerText = capsule [i].transform.position.y.ToString ();
//						XmlElement z = xmlDoc.CreateElement ("z");
//						z.InnerText = capsule [i].transform.position.z.ToString ();
//
//						xmlDoc.AppendChild (root);
//						root.AppendChild (posNode);
//						posNode.AppendChild (x);
//						posNode.AppendChild (y);
//						posNode.AppendChild (z);
//						print (Application.dataPath);
//						xmlDoc.Save (Application.dataPath + "/TestXml.xml");
//				}

		}
	
		// Update is called once per frame
		void Update ()
		{
	
		}

		void OnGUI ()
		{
				
				if (GUILayout.Button ("Save")) {
						// 找到所有标签是“JiaoNang”的物体,保存到之前定义好的数组中
						capsule = GameObject.FindGameObjectsWithTag ("JiaoNang");
						// 使用XmlDocument生成Xml文档
						XmlDocument xmlDoc = new XmlDocument ();
						// 使用XmlElement生成根元素添加给Xml文档
						XmlElement root = xmlDoc.CreateElement ("transform");
						for (int i = 0; i < capsule.Length; i++) {
								// 创建元素
								XmlElement posNode = xmlDoc.CreateElement ("position");
								// 设置具有指定名称的特性的值
								posNode.SetAttribute ("id",i.ToString ());
								// 循环创建元素x,y,z
								string[] elementName = new string[3]{ "x","y","z" };
								for (int k = 0; k < 3; k++) {
										XmlElement node = xmlDoc.CreateElement (elementName [k]);
										// 索引器获取3个维度的值,依次赋值 (k 对应 0,1,2)
										node.InnerText = capsule [i].transform.position [k].ToString();
										posNode.AppendChild (node);
								}
								xmlDoc.AppendChild (root);
								root.AppendChild (posNode);
								print (Application.dataPath);
								xmlDoc.Save (Application.dataPath + "/TestXml.xml");
						}

				}


				if (GUILayout.Button("Load")) {
						GameObject[] ps = GameObject.FindGameObjectsWithTag ("JiaoNang");
						for (int i = 0; i < ps.Length; i++) {
								Destroy (ps [i]);
						}
						// 1.创建xml文档对象
						XmlDocument xmlDoc = new XmlDocument ();
						// 2.用文档对象读取本地XML文件
						xmlDoc.Load (Application.dataPath + "/TestXml.xml");
						// 核心代码:获取根节点的所有子节点列表
						XmlNodeList list = xmlDoc.SelectSingleNode ("transform").ChildNodes;
						// 4.遍历子节点列表所有节点(position)
						for (int i = 0; i < list.Count; i++) {
								float x = 0;
								float y = 0;
								float z = 0;
								// 5.遍历position节点的所有子节点
								foreach (XmlElement elm in list[i].ChildNodes) {
										// 6.根据节点名保存坐标信息
										if (elm.Name == "x") {
												x = Convert.ToSingle (elm.InnerText);
										} else if (elm.Name == "y") {
												y = Convert.ToSingle (elm.InnerText);
										} else if (elm.Name == "z") {
												z = Convert.ToSingle (elm.InnerText);
										}

								}
								// 7.根据坐标创建预设体
								Instantiate (longchuang,new Vector3 (x,z),Quaternion.identity);
						}

				}
		}





}
原文链接:https://www.f2er.com/xml/296189.html

猜你在找的XML相关文章