Unity中xml的简单用法笔记
发布时间:2020-12-16 08:56:36 所属栏目:百科 来源:网络整理
导读:using UnityEngine;using System.Collections;// 引入System.Xml空间using System.Xml;// 引入Systemusing System;/// summary/// 脚本位置:摄像机/// 脚本功能:本地数据存储/// /summarypublic class TestXml : MonoBehaviour{// 定义一个物体数组GameObj
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); } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |