์˜ค๋Š˜์˜ ํ• ์ผ

0. ์–ด์ œ ๋ชป๋‹คํ•œ ์ˆ™์ œ ํ•ด๊ฒฐ

1-4. ํƒํ—˜ ์ค‘ ์•„์ดํ…œ ํš๋“ ํ•  ๋ฐฉ ํŒŒ์•… ( ๊ฐฏ์ˆ˜ ๋ฐ ์œ„์น˜, ์ตœ์†Œ 3x3 - ์ „ํˆฌ์šฉ ๋ฐฉ๊ณผ๋Š” ์•ˆ๊ฒน์น˜๊ฒŒ ) -> ์ด๊ฑด ํ•ด๊ฒฐ๋จ

์ข์€ ๋ฐฉ์—๋Š” ์•„์ดํ…œ์ด ๋–จ์–ด์ ธ์žˆ์–ด ์ฃผ์šธ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. -> ์ด๊ฑด ๋’ค๋กœ ๋ฏธ๋ฃธ

๋ฒฝํƒ€์ผ ๋ฆฌ์ŠคํŠธ๋„ ์–ป๊ธฐ -> ์ถ”๊ฐ€

๋ฒฝํƒ€์ผ ๋ฆฌ์ŠคํŠธ๋ฅผ ์–ป์œผ๋ ค๋ฉด BorderBuilder.csํŒŒ์ผ์„ ์—ด์–ด๋ด์•ผ ๋ฉ๋‹ˆ๋‹ค.


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

์•ž์˜ BlockBuilder์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ GroundBlocksArray๋ผ๋Š” ๋ฐ์— ๋ฐ”๋‹ฅ ํƒ€์ผ์„ ์ €์žฅํ•˜๋Š” ์–ด๋ ˆ์ด๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทผ๋ฐ ํ•ด๋‹น ์–ด๋ ˆ์ด๋ฆฌ์ŠคํŠธ์— ๋ฌด์Šจ ํ˜•์‹ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”์ง€ ํ‘œ์‹œ๊ฐ€ ์•ˆ๋˜์„œ ํ—ท๊ฐˆ๋ฆฌ๋‹ˆ๊นŒ

using System.Collections.Generic;์„ ์ƒ๋‹จ์— ์ถ”๊ฐ€ํ•˜๊ณ 

ArrayList -> List<GameObject>๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

BorderBlocksArray๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๊ณ  BlockBuilderํด๋ž˜์Šค์˜ GroundBlocksArray๋„ ์ถ”๊ฐ€ํ–ˆ์–ด์š”

๊ทธ๊ฒƒ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋‹ค๋ฅธ ๋ถ€๋ถ„ ๋ณ„๋กœ ์•ˆ๋ฐ”๊ฟ”๋„ ๋˜๋”๋ผ๊ตฌ์š”.


๊ทธ๋‹ค์Œ์— ์•„๋ž˜ BuildBorderArray์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ย ArrayList๋ผ๋Š” ๋†ˆ์„ ๋ฐ›๊ณ , GroundBlocksArray ๋ผ๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š”๊ฑธ ๋ณด๋ฉด

์•„ ์ด๋†ˆ์ด BlockBuilder ( ๋ฐ”๋‹ฅ๊นŒ๋Š”๋†ˆ ) ์—์„œ ์ƒ์„ฑ๋œ ๋ฐ”๋‹ฅํƒ€์ผ(๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ)๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ›์•„์™€์„œ ๋ชจ์„œ๋ฆฌ ์™ธ๊ณฝ์„ ์ธ์ง€ ์ฒดํฌํ•œํ›„

๋นˆ๋ถ€๋ถ„์— ๋ณด๋” ( ์™ธ๊ณฝ์„  )์„ ๋งŒ๋“œ๋Š”๊ตฌ๋‚˜ ์•Œ์ˆ˜์žˆ์ฃ .


์•ž์— ํด๋ž˜์Šค๋ฅผ ์ง ๊ฑธ ์ƒ๊ฐํ•ด๋ณด๋ฉด ย ๊ทธ ๋ณด๋”(๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ)๋“ค์€ BuildBorderArrayํ•จ์ˆ˜ ํ•œ๋ฒˆ๋Œ๋ฆฌ๊ณ  ๋‚˜๋ฉด

BorderBlocksArray์— ์ €์žฅ๋œ๋‹ค๋Š”๊ฑธ ์•Œ์ˆ˜์žˆ์–ด์š”.

์šฐ๋ฆฌ๋Š” getBorderBlocksArray() ํ•จ์ˆ˜๋งŒ ํ•˜๋‚˜ ๋งŒ๋“ค๋ฉด ๋˜๊ฒ ๊ตฐ์š”.

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

๊ทธ๋ฆฌ๊ณ  ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ๋กœ ๊ฐ€์„œ GenerateBorder์— ์ฒดํฌ๋ฅผ ํ•˜๋ฉด


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

์•„๋งˆ ๋ณด๋”๊ฐ€ ์ƒ๊ธฐ๊ฒ ์ฃ ? ์›๋ž˜ ๋ธ”๋ก๋นŒ๋”( ๋ฐ”๋‹ฅ๊นŒ๋Š”๋†ˆ )์—์„œ ์–ด๋””์„œ ๋ณด๋”๋ฅผ ๋งŒ๋“œ๋Š”๊ฐ€ ํ–ˆ๋”๋‹ˆ

BuildBlocks(๋ฐ”๋‹ฅ๊นŒ๋Š” ํ•จ์ˆ˜)์˜ ๊ฐ€์žฅ๋์— ์žˆ๋„ค์š”.


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


๋ฐฐ์—ด๋กœ ์ƒ์„ฑํ›„ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ถœ๋ ฅ -> ์ถ”๊ฐ€

๊ทธ๋ž˜์„œ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜์ธ SaveTextFile ํ•จ์ˆ˜๋Š” BuildBlocksํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ ๋’ค์— ์‹คํ–‰๋˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ์š”.

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

๊ทธ๋ฆฌ๊ณ  SaveTextFileํ•จ์ˆ˜๋Š” ์ด๋Ÿฐ์ˆœ์„œ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ฐ”๋‹ฅ,๋ฒฝ ํƒ€์ผ์˜ x์ขŒํ‘œ ์ตœ์†Œ/์ตœ๋Œ€๊ฐ’, y์ขŒํ‘œ ์ตœ์†Œ/์ตœ๋Œ€๊ฐ’์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

์ตœ๋Œ€๊ฐ’-์ตœ์†Œ๊ฐ’+1๋กœ ์ „์ฒด ๋ฐฐ์—ด์˜ ๊ฐ€๋กœ/์„ธ๋กœ ๊ฐ’์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.


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

์ด๋ ‡๊ฒŒ์š”.

๊ทธํ›„ ์œ„์˜ ์˜ˆ ๊ฐ™์œผ๋ฉด

int[,] map = new int[44,45];

๊ฐ™์ด ํ•ด์„œ ํ•ด๋‹น ๋ฐฐ์—ด์— ๊ฐ’์„ ์ฑ„์›๋‹ˆ๋‹ค.

๋ฐ”๋‹ฅ์€ 1, ๋ฒฝ์€ 2, ์‹œ์ž‘์  3, ๋์  4, ์ „ํˆฌ์šฉ๋ฐฉ๊ธฐ์ค€์  5, ์•„์ดํ…œ๋ฐฉ๊ธฐ์ค€์  6

( ๋ฐฉ ๊ธฐ์ค€์ ์€ ์›๋ž˜ ์ขŒํ‘œ๋กœ ๋‚จ๊ธฐ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ž˜ ๋๋Š”์ง€ ํ™•์ธ์ด ์–ด๋ ค์›Œ์„œ ์ด๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. )

์•„์ง ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ๋Š” ์•ˆ๋ฝ‘์•„๋ณด๊ณ  ๋ฐฐ์—ด๊นŒ์ง€๋งŒ ์™„์„ฑํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋Š” SaveTextFileํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

----- ์ ˆ์ทจ์„  ----

private void SaveTextFile(){

int len = GroundBlocksArray.Count;

Vector2 minXY = new Vector2(0,0);

Vector2 maxXY = new Vector2(0,0);

GameObject tmpObj;


for(int i = 0; i < len; ++i){

tmpObj = GroundBlocksArray[i] as GameObject;

if(tmpObj.transform.position.x < minXY.x){

minXY.x = tmpObj.transform.position.x;

}

if(tmpObj.transform.position.y < minXY.y){

minXY.y = tmpObj.transform.position.y;

}

if(tmpObj.transform.position.x > maxXY.x){

maxXY.x = tmpObj.transform.position.x;

}

if(tmpObj.transform.position.y > maxXY.y){

maxXY.y = tmpObj.transform.position.y;

}

}



List<GameObject> BorderBlocksArray = GetComponent<BorderBuilder>().getBorderBlocksArray();

len = BorderBlocksArray.Count;

for(int i = 0; i < len; ++i){

tmpObj = BorderBlocksArray[i] as GameObject;

if(tmpObj.transform.position.x < minXY.x){

minXY.x = tmpObj.transform.position.x;

}

if(tmpObj.transform.position.y < minXY.y){

minXY.y = tmpObj.transform.position.y;

}

if(tmpObj.transform.position.x > maxXY.x){

maxXY.x = tmpObj.transform.position.x;

}

if(tmpObj.transform.position.y > maxXY.y){

maxXY.y = tmpObj.transform.position.y;

}

}


print (minXY);

print (maxXY);

Vector2 widthHeight = new Vector2();

widthHeight.x = maxXY.x - minXY.x + 1;

widthHeight.y = maxXY.y - minXY.y + 1;


print( widthHeight.x + "," + widthHeight.y );


int[,] map = new int[ Mathf.FloorToInt(widthHeight.x), Mathf.FloorToInt(widthHeight.y)];

len = GroundBlocksArray.Count;

for(int i = 0; i < len; ++i){

tmpObj = GroundBlocksArray[i] as GameObject;

map[Mathf.FloorToInt(tmpObj.transform.position.x - minXY.x), Mathf.FloorToInt(tmpObj.transform.position.y - minXY.y)] = 1;

}

len = BorderBlocksArray.Count;

for(int i = 0; i < len; ++i){

tmpObj = BorderBlocksArray[i] as GameObject;

map[Mathf.FloorToInt(tmpObj.transform.position.x - minXY.x), Mathf.FloorToInt(tmpObj.transform.position.y - minXY.y)] = 2;

}


map[Mathf.FloorToInt(StartPoint.x - minXY.x), Mathf.FloorToInt(StartPoint.y - minXY.y)] = 3;

map[Mathf.FloorToInt(EndPoint.x - minXY.x), Mathf.FloorToInt(EndPoint.y - minXY.y)] = 4;


len = listBattleRoom.Count;

for(int i = 0; i < len; ++i){

map[Mathf.FloorToInt(listBattleRoom[i].x - minXY.x), Mathf.FloorToInt(listBattleRoom[i].y - minXY.y)] = 5;

}

len = listItemRoom.Count;

for(int i = 0; i < len; ++i){

map[Mathf.FloorToInt(listItemRoom[i].x - minXY.x), Mathf.FloorToInt(listItemRoom[i].y - minXY.y)] = 6;

}



string result = "";

int height = Mathf.FloorToInt( widthHeight.y );

for(int y = 0; y < widthHeight.y; ++y){

for(int x = 0; x < widthHeight.x; ++x){

result += map[x,height-1 - y];

}

result += " ";

}

print (result);

}

ย ---- ํ•จ์ˆ˜๋ ---


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

๋ณด๋”๋Š” ์ž˜ ๋‚˜์˜ค๋Š” ๊ฑฐ ๊ฐ™๊ตฌ์š” . ์ผ๋ถ€ ๊ฒฝ์šฐ ๋ณด๋”๊ฐ€ ์ข€ ๋ฐ”๋‹ฅํƒ€์ผ ์ฃผ๋ณ€์„ ์™„๋ฒฝํžˆ ๊ฐ์‹ธ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์šฐ์„ ์€ ๋ฌด์‹œํ•ฉ์‹œ๋‹ค.


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

์›๋ž˜ ๋†’์ด๊ฐ€ 53์นธ ์งœ๋ฆฌ์ธ๋ฐ ํ…์ŠคํŠธํŒŒ์ผ์ด๋ผ ๋”์ด์ƒ์€ ์บก์ณ๊ฐ€ ์•ˆ๋˜๋„ค์—ฌ

ํ•˜์—ฌํŠผ ๋น„์Šทํ•˜๊ฒŒ ๋‚˜์˜ต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์„ธ์ด๋ธŒ ๊ธฐ๋Šฅ์€

http://worldeye.tistory.com/entry/Unity-ํ…์ŠคํŠธ-ํŒŒ์ผ์ž…์ถœ๋ ฅ

๋ธ”๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ๋”ฐ๋ผํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

WriteDataํ•จ์ˆ˜๋งŒ ๊ฐ€์ ธ๋‹ค ์“ฐ๋ฉด ๋˜๊ฒ ์ฃ .

using System.IO; ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ 

ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ• ์ˆ˜ ์žˆ๊ฒŒ ๋ฐ”๊พธ๊ตฌ์š”

ย  ย ย public void WriteData(string path, string strData) {

ย  ย  ย  ย FileStream ย f = new FileStream( path, FileMode.Append, FileAccess.Write);

ย  ย  ย  ย StreamWriter writer = new StreamWriter(f, System.Text.Encoding.Unicode);

ย  ย  ย  ย writer.WriteLine(strData);

ย  ย  ย  ย writer.Close();

}

Assetsํด๋” ์•ˆ์— Texts๋ผ๋Š” ํด๋”๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ ,


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

ํ•˜์ด์–ด๋ผํ‚ค ์ฐฝ์—์„œ Level Generator์˜ levelName์„ ย D1์ด๋ผ๊ณ  ํ•˜๊ณ  ( ๋˜์ „ 1์ธตํ˜น์€ 1๋ฒˆ ์ด๋ž€ ๋œป์ธ๋ฐ ์›ํ•˜๋Š” ๋‹ค๋ฅธ๊ฑธ ํ•˜์…”๋„ ์ข‹์ฃ  )

ํ”Œ๋ ˆ์ด๋ฅผ ๋ˆ„๋ฅด๋ฉด... ์œฝ.. ์‚ฌ์ง„ํŒŒ์ผ ์ดˆ๊ณผ๋กœ ๋‹ค์Œ์žฅ์š”


1-5. ์‹œ์•ผ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด์•ผ ํ•œ๋‹ค. -> ์ด๊ฒƒ๋„ ๋’ค๋กœ ๋ฏธ๋ฃธ.. ์ธ๊ฒŒ์ž„์—์„œ ๋„ฃ์–ด์•ผ

1. ์˜ค๋Š˜์˜ ์ž‘์—… ๋ชฉํ‘œ

2-1. ๋งต ํ…์ŠคํŠธ ํŒŒ์ผ์—์„œ ๊ฒŒ์ž„์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

2-2. ๋งต์ด๋™ ์ƒํƒœ์—์„œ ์ „ํˆฌ์šฉ ๋ฐฉ์— ๋ชฌ์Šคํ„ฐ ์Šคํฐ / ์•„์ดํ…œ ๋ฐฉ์— ์•„์ดํ…œ ์Šคํฐ

ย  ย  ย  ์‹œ์ž‘์ง€์ ์— ์˜ฌ๋ผ๊ฐ€๋Š” ๊ณ„๋‹จ ์Šคํฐ, ๋์ง€์ ์— ๋‚ด๋ ค๊ฐ€๋Š” ๊ณ„๋‹จ ์Šคํฐ

2-3. ๊ฐ„๋‹จํ•œ ์‹œ์•ผ๊ธฐ๋Šฅ

2-4. ๊ฐ„๋‹จํ•œ ์ž๋™์ด๋™ย 

2-5. ์Šคํฐ๋œ ๋ชฌ์Šคํ„ฐ๋ž‘ ์ถฉ๋Œ์‹œ ์ „ํˆฌ์‹œ์ž‘ ๋ฆฌ๋” ์œ„์น˜๋กœ ๋ชจ์˜€๋‹ค๊ฐ€ 3x3์œ„์น˜๋กœ ํ™•์‚ฐ, ๋ชฌ์Šคํ„ฐ๋Š” ์šฐ์ธก์—์„œ ๋“ฑ์žฅ

ย  ย  ย  ๋ฒˆ์ฉ์ด๋Š” ์ดํŽ™ํŠธ ์ถ”๊ฐ€

ย  ย  ย  ์•„์ดํ…œ๊ณผ ์ถฉ๋Œ, ํ„ฐ์น˜์‹œ ์•„์ดํ…œ ํš๋“

2-6. ์ „ํˆฌ ์ข…๋ฃŒ ํ›„ ๋งต์ด๋™ ์ƒํƒœ๋กœ ์ „ํ™˜

2-7. ๋์ง€์ 