1-3. ํƒํ—˜ ์ค‘ ์ „ํˆฌ๊ฐ€๋Šฅํ•œ ๋ฐฉ ํŒŒ์•… ( ๊ฐฏ์ˆ˜ ๋ฐ ์œ„์น˜, ์ตœ์†Œ 6x3 )

์ œ ๊ฒŒ์ž„์˜ ๊ฒฝ์šฐ 3x3 ๋Œ€์—ด์˜ ์•„๊ตฐ์ด 3x3๋Œ€์—ด์˜ ์ ๊ตฐ ํ•˜๊ณ  ์‹ธ์šฐ๋Š”๊ฒŒ ์ „ํˆฌํ™”๋ฉด์ด๋ผ

์ „ํˆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋งต์˜ ๊ฒฝ์šฐ ์ตœ์†Œ 6x3์˜ ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค .๊ทธ๋ž˜์„œ 6x3์ž„


BuildBlock์ด๋ผ๋Š”๊ฒŒ while loop์—์„œ ๋Œ๋ฉด์„œย 

์ข€ ๋žœ๋คํ•˜๊ฒŒ ๊ฑธ์–ด๊ฐ€์„œ๋Š” ์ข€ ๊ทธ ์œ„์น˜์— ๋ฐ”๋‹ฅ์ด ์—†์œผ๋ฉด ๊นŒ๋Š” ํ˜•ํƒœ์ž„

์ด์ „์— ๊น”์•„๋†“์€ ๋ฐ”๋‹ฅํƒ€์ผ์€ย GroundBlocksArray์ด๋ž€ ๋†ˆ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด๋ง์ธ์ฆ‰์Šจ? ์ด๋†ˆ์„ ๋‹ค ์ฝ์œผ๋ฉด์„œย 

x, y ์œ„์น˜์—์„œ x + 5, ย x+2 ์œ„์น˜๊นŒ์ง€ ๋ฐ”๋‹ฅ ํƒ€์ผ์ด ๊น”๋ ค์žˆ์œผ๋ฉด ์ „ํˆฌ์šฉ๋ฐฉ์œผ๋กœ ๋นผ๋ฉด ๋œ๋‹ค๋Š” ๋ง์”€!

๊ทผ๋ฐ ๋„“์€ ๋ฐฉ์—์„œ๋Š” ๋ฐฉ๋ผ๋ฆฌ ์œ„์น˜๊ฐ€ ๊ฒน์น ์ˆ˜๋„ ์žˆ๊ฒ ์ง€? ๊ทธ๋Ÿฐ๊ฒƒ๋„ ๋นผ์ค˜์•ผํ•จ

์—ฌํŠผ ์šฐ๋ฆฌ๋Š” ๊ทธ ํ•จ์ˆ˜์ด๋ฆ„์„ StoreBattleRoom()์ด๋ผ๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

GroundBlockArray ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋ฐ”๋‹ฅํƒ€์ผ์„ ๋ฃจํ”„๋Œ๋ฉด์„œ ์ „ํˆฌ๊ฐ€๋Šฅํ•œ ๋ฐฉ์˜ ์ขŒํ•˜๋‹จ ๊ธฐ์ค€์  ( ํ”ผ๋ด‡ )์„ ๋ฝ‘๋Š”๊ฑฐ์—์˜.


์˜ ๊ฐœ๋ณต์žกํ•˜๋‹ˆ ์†Œ์Šค๋ฅผ ๋ถ™์—ฌ๋„ฃ์Œย 

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

void Start() {

GroundBlocksArray.Add(gameObject);

Vector3 SpawnPoint = transform.position;

Vector3 StartPoint = new Vector3(SpawnPoint.x, SpawnPoint.y, SpawnPoint.z);

Vector3 EndPoint = BuildBlocks(numberOfGroundTilesToSpawn, SpawnPoint);

print( "์‹œ์ž‘์ง€์  : " + StartPoint + ", " + EndPoint);


transform.name = levelName;


StoreBattleRoom();

}


private void StoreBattleRoom(){

// ํ•ด๋‹น ์œ„์น˜์— ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ์—ฌ๋Ÿฌ๋ฒˆ ์กฐํšŒํ•ด์•ผ ๋˜๋‹ˆ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

// ํ•ด๋‹น ํ‚ค๋กœ ์ ‘๊ทผ์‹œ ๊ฒฐ๊ณผ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ’์ด ๋„์ผ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ bool?๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Dictionary<Vector3, int> dicGroundExist = new Dictionary<Vector3, int>();

ArrayList listBattleRoom = new ArrayList();

Dictionary<Vector2, bool> isInRoom = new Dictionary<Vector2, bool>();


int len = GroundBlocksArray.Count;

GameObject tmpObj;


// ์œ„์น˜ ๋งŒ์œผ๋กœ ํ•ด๋‹น ์œ„์น˜์— ๋ฐ”๋‹ฅ์ด ๊น”๋ ค์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋งŒ๋“ฌ

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

tmpObj = GroundBlocksArray[i] as GameObject;

dicGroundExist.Add(tmpObj.transform.position, i);

}



Vector3 tmpVector;

Vector2 tmpPivotRoom;

int tmpVal;

bool? tmpPivotExist;

Vector2 tmpNewPivotRoom;

List<Vector2> listNewRoomGround;

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

tmpObj = GroundBlocksArray[i] as GameObject;

tmpVector = tmpObj.transform.position;


bool isBattleRoom ย = true;

for(int y = 0; (y < 3) && isBattleRoom; ++y){

for(int x = 0; (x < 6) && isBattleRoom; ++x){

if( !dicGroundExist.ContainsKey(tmpVector+new Vector3(x,y,0)) ){

print("false!");

isBattleRoom = false;

}

}

}

print( "isBattleRoom : " + isBattleRoom + ", " + tmpVector);



if(isBattleRoom){ // ํ˜„์žฌ ์œ„์น˜ tmpVector๊ฐ€ ์ „ํˆฌ์šฉ ๋งต์„ ๋งŒ๋“ค๊ธฐ์— ์ ์ ˆํ•œ ์‹œ์ž‘์ง€์ ์ž„ ( ๋ฐ”๋‹ฅ์ด ๋นˆ์นธ์ด ์•„๋‹˜ )

tmpPivotRoom = new Vector2(tmpVector.x, tmpVector.y);

listNewRoomGround = new List<Vector2>();

if(!isInRoom.ContainsKey(tmpPivotRoom)){

bool roomBoundColision = false;

for(int y = 0; y < 3; ++y){

for(int x = 0; x < 6; ++x){

tmpNewPivotRoom = new Vector2( tmpPivotRoom.x + x , tmpPivotRoom.y + y );

if( !isInRoom.ContainsKey(tmpNewPivotRoom) ){

listNewRoomGround.Add(tmpNewPivotRoom);

} else {

roomBoundColision = true;

}

}

}

if(!roomBoundColision){

listBattleRoom.Add(tmpPivotRoom);

for(int k = 0; k < listNewRoomGround.Count; ++k){

isInRoom.Add( listNewRoomGround[k], true );

}

}

}

}

}


int length = listBattleRoom.Count;

Vector3 tmpVector3 = new Vector3(0,0,0);

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

tmpVector3.x = ((Vector2) listBattleRoom[i]).x;

tmpVector3.y = ((Vector2) listBattleRoom[i]).y;

tmpVector3.z = 0;


GameObject obj = (GameObject) GroundBlocksArray[dicGroundExist[tmpVector3]];

obj.GetComponent<SpriteRenderer>().color = new Color32(255,0,0,255);

}

}

---- ์ ˆ์ทจ์„  ( ํ•จ์ˆ˜ ๋ ) ---

ย C#์—์„œ๋Š” Dictionary์—์„œ ํ‚ค๋ฅผ ๋„ฃ์–ด์„œ ๊ฐ’์„ ๋บ„๋•Œ ํ•ด๋‹น ๊ฐ’์ด ์—†์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฒ„๋ฆฐ๋‹ค!

ย ์ž๋ฐ” hashMap์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๋ฉด ๋งํ•จ์˜ ๋ฐ”๋‹ค์— ํ—ค์—„์น˜๊ฒŒ ๋˜๋Š” ๊ฒƒ!

ย ContainsKey๋กœ ๊ผญ ํ™•์ธํ•˜๋„๋ก ํ•œ๋‹ค.

์—ฌํŠผ ์†Œ์Šค๋ฅผ ๊ฐˆ์•„์น˜์šฐ๊ณ  ์žฌ์ƒ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด


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


์ด๋ ‡๊ฒŒ ๋‚˜์˜จ๋‹ค ๋นจ๊ฐ„์ƒ‰์ด ํ”ผ๋ด‡์ธ๋ฐ 2์นธ์ด ์šฐ์ธก๋ฐฉํ–ฅ ํ˜น์€ ์ƒ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์žˆ๋Š”๊ฑด ํŒจ๋งํ•œ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด๊ฒŒ ์†Œ์Šค์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๊ณ  ์›๋ณธ ์†Œ์Šค ์—…๋กœ๋”์˜ ํ›ผ์ดํฌ๊ฐ€ ๋ถ€๋ฅธ ์ˆ˜์ž‘์ž„,ย 

๋ญ”๊ฐ€ 2์นธ์”ฉ ๋˜์–ด์žˆ๋Š”๊ฒƒ์ด ์‹ฌ์ƒ์น˜ ์•Š์•„ scene๋ทฐ์—์„œ w๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋นจ๊ฐ„์นธ์„ ์„ ํƒํ•ด๋ณด๋‹ˆ


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

๋ญ”๊ฐ€ ์‹ฌ์ƒ์น˜ ์•Š๋‹ค. ํ”ผ๋ด‡์ด ๊ธฐ๋ณธ ๊ฒŒ์ž„์˜ค๋ธŒ์ ํŠธ๋ผ๋ฉด ํ”ผ๋ด‡์ด bottom center๊ฐ€ ์•„๋‹๊ฑด๋ฐ?

๊ทธ๋ž˜์„œ ํฌ๊ธฐ์ง€์ •์ธ tํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ๋ดค๋‹ค.


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

ํ›ผ์ดํฌ๋‹ค ใ……ใ…‚ใ„ป! ์‚ฌ์‹ค ์ด๊ฑด ๋ฐ”๋‹ฅ ํƒ€์ผ ํ•˜๋‚˜์˜€๋‹ค! ๋ฐ”๋‹ฅํƒ€์ผ ํ•˜๋‚˜๊ฐ€ 2x2 ์…€์— ๊ทธ๋ ค์กŒ๋‹ค.

์—ฌ๊ธฐ์„œ ์˜์‹ฌํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ offset Distance์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์ด 2์˜€์ฃ .

๊ทธ๋ž˜์„œ 1๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์ข€๋” ์ด˜์ด˜ํžˆ ๊ทธ๋ ค์ง€๋Š” ๊ฒƒ์™ธ์— ๋ฐ”๋‹ฅํƒ€์ผ ํ•˜๋‚˜๊ฐ€ 2x2์— ๊ทธ๋ ค์ง€๋Š” ๊ฑด ํ•ด๊ฒฐ์ด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด, ์›ํ‰์„ ์ฐพ์•„์•ผ์ง€!

ํ•˜์ด์–ด๋ผํ‚ค ์ฐฝ ( ๊ณ„์ธต์ฐฝ )์— ๋“ค์–ด๊ฐ€๋ฉด Ground(Clone)์ด๋ผ๊ณ  ์žˆ๋„ค์š” ์›๋ณธ ํ”„๋ฆฌํŒน์˜ ์ด๋ฆ„์ด Ground ์ธ ๋ชจ์–‘

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

Prefabsํด๋”์— ๋“ค์–ด๊ฐ€๋ฉด Ground๋ผ๋Š” ๋†ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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


์ด๋†ˆ์ด ์ˆ˜์ƒํ•˜์ฃ .

SpriteRender๋ผ๊ณ  ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ๊ทธ๋ ค์ฃผ๋Š” ๋†ˆ์ž…๋‹ˆ๋‹ค.


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


์ด ์Šคํ”„๋ผ์ดํŠธ ๋ Œ๋”๋Ÿฌ์—๋Š” ๋ญ”๊ฐ€ ํฌ๊ธฐ๋ฅผ ๋งŒ์งˆ๋งŒํ•œ

์˜ต์…˜์ด ์—†๋„ค์˜

๊ทผ๋ฐ ground๋ผ๋Š” ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ์“ฐ๋„ค์—ฌ ์ด๋†ˆ์ด ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

Spritesํด๋”์— ๋“ค์–ด๊ฐ€๋ฉด ์ด ground๋ผ๋Š” ๋†ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


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

์ด๋†ˆ์„ ๋”๋ธ”ํด๋ฆญํ•ด์„œ ๊ฟ€๋ทฐ๋กœ ์—ฝ๋‹ˆ๋‹ค. ( ์ €๋Š” ๊ทธ๋ฆผํŒŒ์ผ ๋ทฐ์–ด๊ฐ€ ๊ธฐ๋ณธ ๊ฟ€๋ทฐ๋ผ์„œ์˜, ๋‹ค๋ฅธ๋ถ„์€ ์„ค์น˜ํ›„ ๋Œ์–ด๋„ฃ์œผ์„ธ์—ฌ )

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

( ์žก์•˜๋‹ค ์ด๋†ˆ! )

์ด๋ฏธ์ง€๋Š” 256 x 256์ธ๋ฐ Pixel Per Unit์„ 128์„ ํ•ด? ์ด ์ • ๋งž์„๋†ˆ!

Pixel Per Unit์ด ์œ ๋‹ˆํ‹ฐ ์ขŒํ‘œ๊ณ„์—์„œ ๊ธธ์ด 1๋งŒํผ์— ๋ช‡ํ”ฝ์…€ ๊ทธ๋ฆด๊ฑฐ๋ƒ์ด๊ฑด๋ฐ ์ด๋ ‡๊ฒŒ ํ•ด๋†“์œผ๋‹ˆ

128x128 ํ”ฝ์…€์„ ์œ ๋‹ˆํ‹ฐ ์ขŒํ‘œ๊ณ„ 1x1 ์‚ฌ๊ฐํ˜•์œผ๋กœ ๊ทธ๋ฆฌ๋‹ˆ 256 x 256์€ 2x2๊ฐ€ ๋ ์ˆ˜๋ฐ–์— ์—†์ฃ ..

๊ทธ๋Ÿผ 128์„ 256์œผ๋กœ ๋ฐ”๊พธ๊ณ  Apply๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์š”.

๊ทธ๋ฆฌ๊ณ  ์žฌ์ƒํ•˜๋ฉด


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

๊ทผ๋ฐ ์™ ์ง€ ๊ฒฝ๊ณ„๊ฐ€ ์ž˜ ์•ˆ๋ณด์ด๋‹ˆ ํ™•์‹คํžˆ ๊ตฌ๋ถ„์ด ์•ˆ๊ฐ‘๋‹ˆ๋‹ค.


->|viewimage.php?id=2abcdd23dad63db0&no=29bcc427b38a77a16fb3dab004c86b6fefd5355bb21004331d884566e8f3c82281c334425808cce4b3470d1beefe817017093b46da24f80ff6ce|<------ ์ด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›์•„์š” ์ž˜ ์•ˆ๋ณด์ด๊ฒ ์ง€๋งŒ ์žˆ์Œ.

์ด๊ฑธ ๊ฒœ์ฐฝ์žผ์— ๋ƒˆ์œผ๋ฉด ์šฐ์Šน์ธ๋ฐ....

์‚ฌ์ง„ ์—…๋กœ๋“œ๊ฐ€ ์•ˆ๋˜์„œ ๋‹ค์ŒํŽธ์—