차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판다음 판 | 이전 판 | ||
unity:xml [2015/05/21 14:02] – 문서가 unity3d:xml에서 unity:xml(으)로 옮겨졌습니다 V_L | unity:xml [2018/02/22 03:04] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
- | ====== | + | {{tag> |
+ | ====== | ||
http:// | http:// | ||
+ | |||
+ | |||
+ | SQLite는 프로버전만 가능하므로 XML을 사용한다. | ||
+ | |||
+ | |||
+ | 게임에서 사용하는 각종 수치를 하드코딩하지 않고 XML로 불러와서 적용하기 위해서 만듦. | ||
+ | 기획자가 만든 수치를 게임에 적용시키기 위해 배워야 한다. | ||
+ | 게임 상태를 저장하거나 불러오는 것을 원하는 분들이 있다면 PlayerPrefs를 참조 해주시기 바란다. | ||
+ | |||
+ | 유니티로 맵데이터나 기본 케릭터 정보를 저장할때 XML을 사용한다. | ||
+ | |||
+ | 본 자료는 인터넷에 있는 자료를 토대로 정리되었다. | ||
+ | |||
+ | |||
+ | =====XmlDocument 저장===== | ||
+ | using System.Xml; | ||
+ | 필수는 아니지만 각 함수를 사용할 때 System.Xml을 쓰는건 코드 효율이 떨어지므로 using해둡니다. | ||
+ | |||
+ | System.Xml.XmlDocument Document = new System.Xml.XmlDocument(); | ||
+ | 새로운 XML 문서를 만듭니다. | ||
+ | |||
+ | XmlElement myElement = Document.CreateElement(" | ||
+ | 새로운 요소를 만듭니다. Element는 요소, 성분이라는 뜻이다. | ||
+ | |||
+ | myElement.SetAttribute(" | ||
+ | 요소에 속성을 지정한다. 속성의 이름, 속성의 값이 들어간다. | ||
+ | |||
+ | ItemElement.GetAttribute(" | ||
+ | 요소로부터 값을 가져온다. 반환된 값은 문자열 이다. | ||
+ | |||
+ | Document.AppendChild(ItemListElement); | ||
+ | Document에 첨부 한다. Append는 첨부 라는 뜻이다. | ||
+ | |||
+ | Document.Save(filePath); | ||
+ | XML Document를 저장한다. | ||
+ | |||
+ | =====XmlDocument 불러오기===== | ||
+ | |||
+ | XmlDocument Document = new XmlDocument(); | ||
+ | 새로운 XML 문서를 만듭니다. | ||
+ | |||
+ | Document.Load(filePath); | ||
+ | XML Document를 불러온다. | ||
+ | |||
+ | |||
+ | |||
+ | =====완성 코드 ( 저장, 불러오기 )===== | ||
+ | |||
+ | <file cs> | ||
+ | |||
+ | using UnityEngine; | ||
+ | using System.Collections; | ||
+ | using System.Collections.Generic; | ||
+ | |||
+ | using System.Xml; | ||
+ | |||
+ | public class RecItem | ||
+ | { | ||
+ | public | ||
+ | public | ||
+ | public | ||
+ | } | ||
+ | |||
+ | public sealed class ItemIO | ||
+ | { | ||
+ | public static void Write(List< | ||
+ | { | ||
+ | XmlDocument Document = new XmlDocument(); | ||
+ | XmlElement ItemListElement = Document.CreateElement(" | ||
+ | Document.AppendChild(ItemListElement); | ||
+ | |||
+ | foreach(RecItem Item in ItemList) | ||
+ | { | ||
+ | XmlElement ItemElement = Document.CreateElement(" | ||
+ | ItemElement.SetAttribute(" | ||
+ | ItemElement.SetAttribute(" | ||
+ | ItemElement.SetAttribute(" | ||
+ | ItemListElement.AppendChild(ItemElement); | ||
+ | } | ||
+ | Document.Save(filePath); | ||
+ | } | ||
+ | |||
+ | public static List< | ||
+ | { | ||
+ | XmlDocument Document = new XmlDocument(); | ||
+ | Document.Load(filePath); | ||
+ | XmlElement ItemListElement = Document[" | ||
+ | |||
+ | List< | ||
+ | |||
+ | foreach(XmlElement ItemElement in ItemListElement.ChildNodes) | ||
+ | { | ||
+ | RecItem Item = new RecItem(); | ||
+ | Item.Name = ItemElement.GetAttribute(" | ||
+ | Item.Level = System.Convert.ToInt32(ItemElement.GetAttribute(" | ||
+ | Item.Critical = System.Convert.ToSingle(ItemElement.GetAttribute(" | ||
+ | ItemList.Add(Item); | ||
+ | } | ||
+ | return ItemList; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | RecItem이라는 클래스 자료를 이용하여 저장 및 불러오기를 만들었다. | ||
+ | |||
+ | =====저장===== | ||
+ | " | ||
+ | List로 받은 데이터를 itemList에 갯수만큼 넣을 준비를 한다. | ||
+ | 요소 " | ||
+ | 값은 문자열로만 저장이 가능하므로 ToString()을 사용한다. 숫자로 된 자료는 이런식으로 저장한다. | ||
+ | 그리고 완성이 된 아이템은 " | ||
+ | for문이 끝나고 나면 저장 한다. | ||
+ | |||
+ | 사용의 예) | ||
+ | <file cs> | ||
+ | using UnityEngine; | ||
+ | using System.Collections; | ||
+ | using System.Collections.Generic; | ||
+ | |||
+ | public class WriteTest : MonoBehaviour | ||
+ | { | ||
+ | void Start() | ||
+ | { | ||
+ | List< | ||
+ | |||
+ | for(int i = 0; i < 100; ++i) | ||
+ | { | ||
+ | RecItem item = new RecItem(); | ||
+ | item.Name = " | ||
+ | item.Level = 1; | ||
+ | item.Critical = Random.Range(0.1f, | ||
+ | itemList.Add(item); | ||
+ | } | ||
+ | ItemIO.Write(itemList, | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | =====불러오기===== | ||
+ | XML형식으로 저장된 파일을 불러온다. | ||
+ | 불러온 문서의 " | ||
+ | RecItem 자료형 리스트를 만듭니다. | ||
+ | 이제 for문을 돌면서 XML Document로부터 RecItem List로 값을 가져 온다. | ||
+ | 문자열이 아닌 데이터는 System.Convert.ToInt32 , System.Convert.ToSingle 를 이용하여 변환한다. (정수, 실수) | ||
+ | |||
+ | 사용의 예) | ||
+ | <file cs> | ||
+ | using UnityEngine; | ||
+ | using System.Collections; | ||
+ | using System.Collections.Generic; | ||
+ | |||
+ | public class ReadTest : MonoBehaviour | ||
+ | { | ||
+ | void Start() | ||
+ | { | ||
+ | List< | ||
+ | for(int i = 0; i < itemList.Count; | ||
+ | { | ||
+ | RecItem item = itemList[i]; | ||
+ | Debug.Log(string.Format(" | ||
+ | i, item.Name, item.Level, item.Critical, | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | |||
- | {{tag> |