준비물 )
- Resources 폴더에 들어있는 text 파일 ( UTF-8로 인코딩 되어있어야 한다 )
직업 렙 체력 마나
----------------------------
<text 내용>
전사 1 1000 50
전사 2 1200 60
전사 3 1400 70
전사 4 1600 80
전사 5 1800 90
전사 6 2000 100
각 단어들 간의 간격은 '\t' 로 일정하다. 위의 데이터들을 아래와 같은 Dictionary에 넣어보려 한다.
Dictionary<string, Dictionary<int, StatData>>();
StatData는 class로, hp와 mp를 멤버변수로 가지고 있다.
public class test : MonoBehaviour { Dictionary<string, Dictionary<int, StatData>> DicDatas; // Start is called before the first frame update void Start() { DicDatas = new Dictionary<string, Dictionary<int, StatData>>(); TextAsset textAsset = Resources.Load<TextAsset>("Datas"); string[] lines = textAsset.text.Split('\n'); foreach(string line in lines) { string[] words = line.Split('\t'); // 키를 가지고 있지 않다면 if(!DicDatas.ContainsKey(words[0])) { DicDatas.Add(words[0], new Dictionary<int, StatData>()); } DicDatas[words[0]].Add(int.Parse(words[1]), new StatData(int.Parse(words[2]), int.Parse(words[3]))); } Debug.Log("전사 랩 2 체력 : " + DicDatas["전사"][2].hp); } }
public class StatData { public int hp, mp; public StatData(int _hp, int _mp) { this.hp = _hp; this.mp = _mp; } }
TextAsset.Resources.Load<TextAsset>("파일명") 을 이용하여 TextAsset에 text파일을 담아둘 수 있다.
이 후에 string 배열에 '\n', 즉 엔터를 기준으로 string들을 담는다. 여기에 사용되는 함수는 textAsset.text.Split("'\n'"); 이다.
각 줄마다 foreach를 돌면서 다시 string 배열에 '\t'를 기준으로 잘라주면, 여러 개가 합쳐져 있던 정보들이 한 개씩 잘라진다.
한 개씩 자르는데 사용한 함수는 string.Split('\t'); 이다.
DicDatas.ContainsKey("값") 은 '값'에 해당하는 Key가 존재하는 지 bool형을 return 해주는 함수이다.
텍스트 내용에서 "전사"가 key가 될 것이므로, Dictionary에 "전사"라는 key를 담아주어야 한다.
따라서 "전사" 키가 존재하지 않는다면 생성해주기 위해 Dictionary.ContainsKey()를 이용한 것이다.
"전사" 키를 생성해 주었다면 words 배열에 각각 저장된 정보들을 Dictionary.Add() 해주면 된다.
값을 출력하기 위해서는, 위와 같은경우 먼저 첫 번째 string이 키가 되고 이 string 키에 맞는 Dictionary 중 첫 번째 int가 key가 되므로,
DicDatas["전사"][2].hp 와 같이 접근해야 한다.
'Unity 공부시작' 카테고리의 다른 글
유니티 :: 코루틴 ( Coroutine ) (0) | 2019.01.13 |
---|---|
유니티 :: 오브젝트 풀링 (0) | 2019.01.12 |
유니티 :: 컬렉션 ( List, Stack, Dictionary ) (0) | 2019.01.11 |
유니티 :: 프로퍼티와 싱글턴 오브젝트 (0) | 2019.01.09 |
유니티 :: 좌표계 (0) | 2019.01.07 |