던그리드식 맵 생각하고 만들었는데 완성까지 7시간 걸림

나처럼 로그라이크 만들고싶은사람이 찾아볼수도 있고 

일단 나도 나중에 다시 찾아볼 일 있을 것 같아서 기록용으로 쓰기는 하는데 글솜씨는 없어서 걱정이네




일단 각 방마다 종류를 적용(이동 포인트가 수평, 수직, 모든 방향)한 다음에

근접 방 설정 종료 여부와 각 방향별로 근접한 방 설정 완료 여부(rightSetted 등)를 확인하는 bool 변수를 만들어놓고

제일 먼저 영점에 시작 방을 생성하고

이후엔 생성된 방 중 랜덤으로 하나를 지정한 다음 근접 방 설정 종료 또는 여부 확인, 미종료된 방이면 근접 방 생성


방을 생성할 때는 랜덤 지정된 방의 종류를 확인하는데,

이 때 수평 방이면 좌, 우 중 랜덤 위치에 수평, 모든 방향 중 랜덤,

수직 방이면  상, 하 중 랜덤 위치에 수직, 모든 방향 중 랜덤,

그리고 모든 방향으로 지정된 방이면 상하좌우 중 랜덤 위치에 수평, 수직, 모든 방향 중 랜덤의 방을 생성하도록 한다


단, 생성하기 이전에 해당 방향(상하좌우)에 이미 방이 생성되어 있는지 확인하는 과정을 거친다

이 때 두 개의 안전장치를 두었는데

하나는 방마다 그곳이 방이 생성된 위치인지 알 수 있는 오브젝트를 삽입한 것이고(레이어 마스크를 사용하여 OverlapCircleAll로 감지)

다른 하나는 위에서 말한 각 방향별로 근접한 방 설정 완료 여부를 확인하는 bool 변수를 넣은 것이다


이렇게 이중으로 설정하면 얻을 수 있는 장점이

일단  B - A 이런식으로 A에서 왼쪽으로 B가 생성됐는데

B가 다시 A의 위치로 C를 생성하는 겹침 문제를 방지할 수 있고(B가 생성되는 시점에서 이미 rightSetted가 활성화되므로)

또 만약 

A - B

|

C - D 

이런식으로 D와 B가 이어져 있지는 않으나 위치상으로 D 바로 위에 B가 있는 경우에

upSetted가 활성화되어있지 않더라도 D 위에 무언가 있는지 한 번 확인하는 과정을 거치기 때문에

D 위에 E를 생성하는 경우의 수가 나오더라도 생성 확인용 오브젝트를 식별해서 그냥 생성하지 않고 넘기게 할 수 있다


방이 생성되고 나면 위치에 따라서 방향별로 근접한 방 설정 여부를 true로 바꿔준다

예를 들어 


B

|

A


이렇게 A 위에 B가 생성되면

A는 upSetted를, B는 downSetted를 true로 바꿔준다

이런식으로 지정하면 위에서 말했듯이

B - A 이런식으로 A에서 왼쪽으로 B가 생성됐는데

B가 다시 A의 위치로 C를 생성하는 겹침 문제를 방지할 수 있다


방을 생성할 때 일정 간격, 특정 순서에 특수 방을 생성할 수 있도록 해 두기도 했는데

이건 방 생성할때마다 createCount를 더해주고

이 createCount가 8의 배수일 때 특수 방을, 5일 때 무기 방을 생성하도록 했다

그리고 createCount가 8의 배수 또는 5가 아닐 때 일반 방을 생성하도록 구성했다


방을 생성하면 nearRoomCount가 1 증가하는데

이 Count가 1보다 크면 생성할 때 랜덤 확률로 근접 방 설정 종료를 활성화시키고(항상 최소 1개의 방은 생성할 수 있도록 1까지는 활성화 X)

최대치(수직, 수평 방은 2, 모든 방향 방은 4)에 도달하면 100%로 근접 방 설정 종료를 활성화한다

근접 방 설정 종료가 활성화 된 방에서는 새 방이 생성되지 않도록 설정했다