(4-1 ์—์„œ ์ด์–ด์„œ)

ํ”Œ๋ ˆ์ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด?


viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38a77a16fb3dab004c86b6fefd5355bb21004331c884566e8f3c822af7c0ca390a7254bf5c693c22aee4294214a6e7e9131e44cc196

๊ฐœ๊พธ๋ฅด?

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")); // ํด๋” ๊ฒฝ๋กœ๊ฐ€ ์ข€ ๋ฐ”๋€Œ์—ˆ์ฃ 

๋‹ค์ŒํŽธ์—์„œ๋Š” ๋ถˆ๋Ÿฌ์˜จ ๋งต๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์„ ํ•ฉ๋‹ˆ๋‹ค.