發現用csv會一大堆空格,不夠彈性,所以又跑回去以前不怎麼喜歡的xml格式
一開始想說xml好麻煩還要學,才跑去用csv比較直覺的
結果最近幾天看才發現,嗯?! 完全不會到入門其實蠻短的
保存用:
http://stanleyhlng.com/prettify-js/
https://rawgit.com/
========
<?xml version="1.0" encoding="utf-8"?>
<DailyEvent>
<Day id="1">
<Event>
event1
</Event>
<Dialog>
"第一天"
</Dialog>
</Day>
<Day id="2">
<Event>
event2
</Event>
<Dialog>
"第二天"
</Dialog>
</Day>
</DailyEvent>
撰寫xml有幾個重點
1.宣告
<?xml version="1.0" encoding="utf-8"?>
通常出現在XML文件的第一行,可寫可不寫如果宣告了,version是必要寫上去的,然後後面的encoding則是選填
宣告了之後就可識別使用哪個編碼來代表文件中的字元了
像是
<?xml version="1.0" encoding="Shift-JIS"?>
就是使用日文編碼2.先進後出
格式很像html那樣的寫法
基本上就是< >跟</ > 成雙成對出現
並且回文,意思就是先進後出,先寫的< >,最後再用</ >把它封起來
像上面的<DailyEvent> 一開始就寫了,如果裡面還要用別的<>就先擱著,如果沒有其他要寫的標籤,就可以封起來了
用文字表達就是 <1> <2> </2></1> 的感覺
3.樹狀結構
就跟樹一樣,只會有一個Root(父節點),指的就是上面範例的DailyEvent
不會有其他的Root了,然後再用這個Root去往下延伸
上面範例的第一個子節點是
<Day id="1">
同階層的另外一個子節點就是<Day id="2">
而這兩個子節點又分別有兩個子節點那資料就是可以儲存在某個節點的 <> 與 </> 中間那段空白,就像上面寫的第一天,第二天那樣
4.屬性
<>內可以填屬性,像是上面
<Day id="1">
內的 id="1",就是他的屬性,在unity內等等會用到====
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml.Linq;
using System;
public class ReadXML : MonoBehaviour {
public string id;
public string eventContent;
public string DialogContent;
void Start () {
var AllDays = XDocument.Load("Assets/DailyEvent_1.xml").Element("DailyEvent").Elements("Day");
foreach (var day in AllDays)
{
id = day.Attribute("id").Value.Trim();// 屬性
eventContent = day.Element("Event").Value.Trim(); // 內容
DialogContent = day.Element("Dialog").Value.Trim(); //也是內容
Debug.Log("day ID = " + id);
Debug.Log("eventContent" + eventContent);
Debug.Log("DialogContent" + DialogContent);
}
}
}
在Unity要讀取到xml檔案有兩種方法
一種是以前的XmlDocument
因為我用的不是這種的,所以這邊就先跳過了
有興趣的參考以下網頁
XML的簡單讀取與寫入
XML檔案基本操作-XmlDocument
第二種是比較新的XDocuments
可以用比較直覺地去讀取xml中的資料
要使用前先加入標頭檔
using System.Xml.Linq;
接下來就是開起xml檔了
先把輸入好的xml丟到unity內的Asset資料夾裡面,我是直接丟外面,當然也可以創建資料夾放到裡面,以下示範直接丟在外面的方式
XDocument AllDays = XDocument.Load("Assets/DailyEvent_1.xml");
那讀取完之後就是拿取裡面資料了
首先要先獲得它的節點
獲取節點有兩種方法
一種是你有很多個節點,使用的就是
根節點.Elements("XXXX");
另外一種就是只有單一節點
根節點.Element("XXXX");
基本上兩種方法就可以獲取到不同深度的節點了
拿取節點後要獲取內容的話就在後面.value就能拿到<與>之間的值了
拿取根節點的時候有比較步驟的方法,以下兩行都是相等的
var AllDays = XDocument.Load("Assets/DailyEvent_1.xml").Element("DailyEvent");
var AllDays = XDocument.Load("Assets/DailyEvent_1.xml").Root;
然後還有讀取節點的屬性
day.Attribute("id").Value
然後大致上就可以使用啦~ 還蠻直覺的
晚點放git
沒有留言:
張貼留言