前端之家收集整理的这篇文章主要介绍了
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