2d 자동 맵생성

맵 자동 생성 (1)

게임만드는학생 2025. 5. 9. 15:08

맵 자동 생성에서 방을 어떻게 만들 것인가에 대해서 알아보겠다. 

 

우선 방의 구조는 이렇다.

이처럼 룸 자식오브젝트로 실제 오브젝트를 둔다. 이러한 구조는 방을 펼칠 때를 위한 구조이다. 

 

씬에 RoomGenerator 오브젝트를 두고, RoomGenerator.cs 스크립트를 붙였다.

그리고 버튼을 누르면 방을 생성하게끔 한다.

 

 

우선 RoomGenerator.cs 에서 이 방을 어떤식으로 만들었는지를 살펴보겠다. 

 

void GenerateRoom(Vector3 sv);

이 GenerateRoom 함수는 호출하면 하나의 방을 생성해준다. 

 

int xLen = Random.Range(minRoom, maxRoom);
int yLen = Random.Range(minRoom, maxRoom);

이렇게 크기를 랜덤하게 정해서 방을 만든다. 

 

그 후, 2차원 배열을 통해서 어떤 타일을 만들지를 세팅한다. 

(지금은 바닥타일만 만들 것이기에 필요없긴하다.)

 

    int[,] arr = new int[yLen, xLen];

    // 배열값에 따라 맞는 프리팹 생성
    int yOffset = yLen / 2;
    int xOffset = xLen / 2;
    for (int i = 0; i < yLen; i++)
    {
        for (int j = 0; j < xLen; j++)
        {
            GameObject inst;
            inst = Instantiate(floorTile, Vector3.zero, Quaternion.identity);
            inst.transform.SetParent(go.transform);
            inst.transform.localPosition = new Vector3(j - yOffset, i - xOffset, 0);

            
        }
    }
    go.SetActive(false);
}

이렇게 2차원 배열로 미리 어떤 타일을 지정할까 세팅해준다. 지금은 바닥타일(0) 으로만 설정한다. 

 

그 후, 2중 for문으로 타일을 생성한다. go 오브젝트가 실제 타일들의 부모오브젝트이다. 

타일 size는 1이기 때문에 i,j for문을 돌며 상대위치를 바로 지정해주면 된다. 

x,y Offset 변수는 부모오브젝트가 0,0 기준인데, Vector3(i,j,0) 으로 생성하면 기준에서 벗어나기 때문에

offset으로 맞춘다. 

 

 

아주간단하게 방 하나를 구현할 수 있다.

 

다음은 방을 여러개 만들고 어떻게 펼칠 것인가를 작성한다.

'2d 자동 맵생성' 카테고리의 다른 글

맵 자동 생성(5)  (2) 2025.05.11
맵 자동 생성(4)  (0) 2025.05.11
맵 자동 생성(3)  (0) 2025.05.10
맵 자동 생성(2)  (1) 2025.05.09
맵 자동 생성 (0)  (0) 2025.05.09