(4-1 ์์ ์ด์ด์)
ํ๋ ์ด ๋ฒํผ์ ๋๋ฅด๋ฉด?
๊ฐ๊พธ๋ฅด?
D1ํ์ผ์ด ์๊ฒผ๊ณ ์ํ๋ ์์์ ๋ง๋ค์.
(์ค๊ฐ์ ์ฅ)
1. ์ค๋์ ์์
2-1. ๋งต ํ ์คํธ ํ์ผ์์ ๊ฒ์์ผ๋ก ๋ถ๋ฌ์ค๊ธฐ
์ ๋ํฐ์์ ํ ์คํธ ํ์ผ ๋ถ๋ฌ์ฌ๋๋ TextAsset์ด๋ผ๋ ํด๋์ค๋ฅผ ์ฐ๋๋ฐ์.
์ ๋ ๋ณดํต ์์ ์ ์ ๋ฆฌํ ๋ฐธ๋ฐ์ค ํ์ผ?
๋ญ ์์ดํ ์ธ๊ธฐ๋ผ๋๊ฐ ์ค๋ช
๋ชฌ์คํฐ ์คํฏ๋ฑ, ์ด๋ฐ๊ฑฐ ์ ๋ฆฌํ ๋ด์ฉ์์ฃ ? ๊ทธ๋ฐ๊ฑด csvํ์์ผ๋ก ๋ง๋ ํ
ํ์ฅ์๋ง txt๋ก ๋ฐ๊ฟ์ ๋ถ๋ฌ์ฌ๋ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฐ ์ญํ ์ ํ๋ TextUtil์ด๋๊ฑธ ๋ง๋ค์์ต๋๋ค.
----------- ์ ์ทจ์ -------
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
namespace ceo {
public class TextUtil {
private static TextUtil instance;
delegate object parseObject(string[] lines);
event parseObject parse;
private TextUtil(){
}
public static TextUtil getInstance(){
if (instance == null) {
instance = new TextUtil ();
}
return instance;
}
public object getTextData (string path){
TextAsset _txtFile = (TextAsset)Resources.Load(path) as TextAsset;
if (_txtFile == null) {
Debug.Log("TextUtil - input path's file was not exist");
return null;
}
string doc = _txtFile.text;
string[] lines = doc.Split ('\n');
if (lines.Length == 0) {
Debug.Log("TextUtil - line length = 0");
return null;
}
if (lines.Length == 1) {
Debug.Log("TextUtil - line length = 1");
return null;
}
//Debug.Log ("TextUtil - file title : " + lines [0]);
//Debug.Log ("TextUtil - cols : " + lines [1]);
return (object) parse (lines);
}
public TextUtil setParser(string dataType){
switch (dataType) {
case "Race":
parse = parseAllRace;
break;
case "Skill":
parse = parseAllSkill;
break;
default :
break;
}
return this;
}
---- ํ ์คํธ ์ ํธ ---
ํผ๋ฐ์์ ์ ์ฝ์ด๋ณด๋ฉด ์ด๊ฒ C#์ ํน์ดํ ๊ธฐ๋ฅ ๋๋ฆฌ๊ฒ์ดํธ๋ผ๋๊ฑด๋ฐ
์ ๋ c#์ ์ ํต์ผ๋ก ๋ฐฐ์ด๊ฒ ์๋๊ณ ๊ทธ๋ฅ ์๋ฐ ๋น์ทํ๊ตฌ๋ง ํ๊ณ ์ฐ๋ ์์ด๋ผ
์ดํดํ๋๋ก๋ง ์ค๋ช ํฉ๋๋ค.
delegate object parseObject(string[] lines);
์ ๋ ฅ๊ฐ์ string๋ฐฐ์ด๋ก ๋ฐ๊ณ ๋ฆฌํด๊ฐ์ด object์ธ ๋ parseObject๋๋์ ํจ์ํฌ์ธํฐ? ํจ์์๋ฃํ?์ฒ๋ผ ์ฌ์ฉํ๊ฒ ๋ค.
ํจ์๋ ์ผ์ข ์ ๋ณ์์ฒ๋ผ ์๋ฃํ ๋น์ทํ๊ฒ ์ฌ์ฉํ๊ฒ ๋ค๋ ๋ง์
event parseObject parse;
event๋ ์์ ๋๋ฆฌ๊ฒ์ดํธ๋ก ์ ์ธ?ํ ๋์ ์ฌ์ฉํ๊ฒ ๋ค๋ ๊ทธ๋ฅ ํค์๋๊ฐ๊ณ
parseObjectํ ํจ์ํฌ์ธํฐ ๋ณ์ parse๋ผ๋ ๋์ ์ด ํด๋์ค๊ฐ ๋ฉค๋ฒ๋ก ๊ฐ์ต๋๋ค.
์ด์ ์ด parse๋ผ๋ ํจ์ํฌ์ธํฐ๋ณ์์ ํน์ ํจ์๋ฅผ ํ ๋นํฉ๋๋ค.
parse = func1;
์ด๋ func1์ ์ด ํด๋์ค ์๋์ ์ ์๋ ํจ์์ ์ด๋ฆ์ ๋๋ค
object func1(string[] lines){
.... return ...;
}
๊ฐ์ ์์ด๊ฒ ์ฃ , ํจ์๋ ๋ณ์์ฒ๋ผ ๋ค๋ฃจ๊ณ ์ถ๋ค ์ด๊ฒ๋๋ค. ๋น์ทํ ์ญํ ์ ํ๋ ํจ์๋ฅผย
์ด๋ฆ ๋ฐ๊ฟ๊ฐ๋ณ์
ํ ์คํธ ํ์ผ์ ์ฝ์ด์ ๋ผ์ธ๋จ์๋ก ์ ์ฅํ๊ณ ์๋ string๋ฐฐ์ดย
string[] arr; ์ ๊ฐ์ง๊ณ
parseAllRace( arr ); // ์ฝ์ด์ค๋ ํ์ผ์ด ๋ชจ๋ ์ข ์กฑ์ ๋ณด์ผ๊ฒฝ์ฐ
parseAllSkill( arr ); // ์ฝ์ด์ค๋ ํ์ผ์ด ๋ชจ๋ ์ข ์กฑ์ ๋ณด์ผ ๊ฒฝ์ฐ.
์ด๋ ๊ฒ ํ๋์ฉ ๋ง๋๋๋
TextUtil.setParser("Race").parse("CSV/Race");
TextUtil.setParser("Skill").parse("CSV/Skill");
์๋์ฒ๋ผ ํ๋๊ฒ ํธํ๋ค๋๊ฑฐ์ฃ
setParser๋ parse๋ผ๋ ํจ์ํ๋ณ์๋์ ๋ฐ๊พธ๋ ์ญํ ๋ง ํ๋ Case๋ฌธ์ด๊ตฌ์.
์ฌํํผ ๊ทธ๋ ์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ค๋์ ๋ฌด์์ ํ๋๋
setParser์ case๋ฌธ์ย
case "Dungeon" :
parse = parseDungeon;
์ ์ถ๊ฐํ๊ณ
public object parseDungeon(string[] lines){
}
ํจ์๊ฐ ๋์๊ฐ๊ฒ ๋ง๋ค๋ฉด ๋๋์ฃ .
๋ชจ๋ csvํ์ผ ๋ฐ ๋ฐ์ดํฐ, ์คํ๋ผ์ดํธ ๋ฆฌ์์ค๋ฑ์
๊ฒ์ ๋งค๋์ ( ๊ฒ์๊ด๋ฆฌํ๋ ๊ฐ์ฅ ์์์์ ์กฐ์ข ํ๋ ํด๋์ค์ ์ ๊ฒฝ์ฐ CEOGameManager๋ผ๋ ๋์ )
--- ์ ์ทจ์ ---
public object parseDungeon(string[] lines){
int width, height;
string[] mapSize;
int[,] map;
mapSize = lines[0].Split(',');
width = int.Parse(mapSize[0]);
height = int.Parse(mapSize[1]);
map = new int[ width, height-1 ];
int tmpInt;
for(int y=1; y<height; ++y){
for(int x=0; x<width; ++x){
tmpInt = int.Parse( lines[y].Substring(x,1) );
map[x,y-1] = tmpInt;
}
}
return map;
}
--- ์ ์ทจ์ ---
์ด๋ ๊ฒ ํจ์๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉํ ๋๋
๋ฉค๋ฒ๋ก ์ด๋ ๊ฒ ๋ง๋ค์ฃ
[HideInInspector] public Dictionary<int, int[,]> maps;
๊ทธ๋ฆฌ๊ณ Awakeํจ์์์ ์ด๋ ๊ฒ ํฉ๋๋ค.
util.setParser("Dungeon");
maps = new Dictionary<int, int[,]>();
maps.Add(1, (int[,])util.getTextData("Text/MapGenerator/D1")); // ํด๋ ๊ฒฝ๋ก๊ฐ ์ข ๋ฐ๋์์ฃ
๋ค์ํธ์์๋ ๋ถ๋ฌ์จ ๋งต๋ฐ์ดํฐ๋ฅผ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๊ฒ์ ํฉ๋๋ค.
๋๊ธ 0