본문 바로가기
# 게임/# Unity

Procedural Dungeon Generation in Unity #1

by 쁘레레레레레 2020. 7. 23.

https://atli-yeondi.tistory.com/28

 

[완성] Procedural Dungeon Generation

참고 : https://github.com/a327ex/blog/issues/7 Procedural Dungeon Generation #2 · Issue #7 · a327ex/blog 2015-08-30 22:29 This post explains a technique for generating randomized dungeons that was..

atli-yeondi.tistory.com

지난 글을 바탕으로 구성된 글입니다.

 

일단 완벽하게 rect를 그려주었고 이젠 타일을 채워줄 순서다.

 

 

붉은 선은 메인룸을 의미하는데

메인룸만 따로 지정한 타일들로 채워주었다.

 

일단 갈피가 잘 안 잡혀서 메인룸의 리스트를 불러와서 

바닥타일
경계타일

바닥, 천장, 벽, 경계 타일을 각각 나눠서 불러온 뒤 채워주고 

hall이 놓인 위치에 따라 타일을 거두어줄 예정이다.

정확히는 각기 다른 종류의 타일들을 얇게 깔아준 후 hall + α 범위만 피해서 다시 깔아줄 생각이다.

 

함수 자체는 간단하다.

프리 팹 혹은 타일 형식으로 배열로 만들어 인스펙터에서 알맞은 값을 넣어준 후

 

새로 만든 함수에서 mainRoom의 리스트를 차례대로 불러와서 해당 사각형의 0,0부터 깔아주면 된다.

 

내 함수의 경우

float xSize = ((main.pos.x + main.pos.width) - main.pos.x)+1;
float ySize = ((main.pos.y + main.pos.height) - main.pos.y)+1;

for(int i=0;i<xSize;i++)
{
	for(int j=0;j<ySize;j++)
    {
    	GameObject toInstantiate = floorTiles[Random.Range(0,floorTiles.Length)];
        
        if(i==0 || i == main.pos.width || j==0 || j==main.pos.height)
        	toInstantiate = outLineWalls[0];
        
        Instantiate(toInstantiate,new Vector2(main.pos.x + i,main.pos.y + j),Quaternion.identity) as GameObject;
	}
}    

이런 식이다. mainRooms 반복 문안에 들어있는 코드인데

 

대강 설명을 하자면 xSize는 가로축으로 깔아야 하는 타일의 수이고

ySize는 세로축으로 깔아야 하는 타일의 수이다.

 

그리고 인스턴스화를 위해 floorTiles를 넣어주되 외곽 경계 타일을 제외한 그 외 타일은 랜덤 성을 부여할 예정이기 때문에 아직 하나밖에 넣지 않았지만 나중을 위해 랜덤 설정을 해두었고

 

if문의 경우 붉은색 테두리의 경우 0번이거나 끝번이니 그곳에 경계타일을 깔아주었다.

 

약간 마음에 안들긴해서 나중에 수정할 수도 있지만 현재는 그냥 둘 생각이다.

 

마지막으로 인스턴스화를 해준다.

main.pos.x는 사각형의 좌하단에 위치하니 i혹은 j값을 증감해서 깔아주는데

끝에 as GameObject는 후에 트랜스폼이나 나중에 컴포넌트 불러와야 할 상황에 대비해 달아 두었고 그를 위한 인스턴스 전용 변수도 따로 선언해둔 상황이긴 하나 이 역시 잘 모르겠다.

 

 

앞으로 해야할 일은

1. 타일을 얇게 깔아준다.

2. 가로홀 / 세로 홀을 나누어주고 세로 홀의 경우 사다리 타일이 오도록 유도한다.

3. 필요한 타일의 형식들에 프리팹이나 타일을 추가한다.

4. 위 방식대로 홀에도 적용해주어 깔아준다.

5. collider와 rigidBody를 추가해준다.

6. 캐릭터를 떨구어주어 테스트를 한다.

 

 

사실 사이드 스크롤링 게임이기에  A라는 방 기준으로 복도가  위 - 오른쪽으로 꺾여있다면

어떻게 처리해야할지가 고민이다.

 

'# 게임 > # Unity' 카테고리의 다른 글

FSM #1  (0) 2020.08.04
Procedural Dungeon Generation in Unity #4 점검  (0) 2020.07.30
움직임 입력값  (0) 2020.07.29
사다리 만들기  (0) 2020.07.29
유니티 개발일지 + Procedural Dungeon Generation in Unity #3  (0) 2020.07.27