분류 전체보기 239

맵 자동 생성(12)

아마 마지막 글일듯 하다.추가한 기능은 플레이어 피격 및 체력 UI 와 게임 종료 시 효과, 몬스터 애니메이션이다. 아주 간단간단하게 구현했다. PlayController.cs 에 있는 함수이다.public void TakeDamage(int damage){ Debug.Log("플레이어가 데미지 입음!"); hearts[heartsIndex].stairs--; heartsImage[heartsIndex].sprite = heartSprites[hearts[heartsIndex].stairs]; if (hearts[heartsIndex].stairs == 0) heartsIndex--; if (heartsIndex 총알에 피격되면 이 함수가 호출되며 위와 같이 진행..

2d 자동 맵생성 2025.05.15

맵 자동 생성(11)

이번 글에서는 미니맵을 다뤄보겠다. 미니맵에 플레이어, 몬스터, 방과 통로를 렌더링하려고 한다.이 때, 아직 한번도 입장하지 않은 방은 화면에 검은색으로 보이고 미니맵에는 물음표로 표시한다. 엄청 어렵진 않다. 미니맵 카메라를 설정하고, RenterTexture를 만들어 적용하면 된다. 그리고 RawImage에 RenderTexture를 적용하면 된다. 그리고 따로 표시할 오브젝트에 미니맵 전용 스프라이트를 하나씩 추가해서 layer를 minimap으로 바꿔주고 미니맵카메라에서 culling mask를 minimap으로 바꿔주면 그 스프라이트들만 보인다. 미니맵의 크기는 스프라이트 크기와, camera컴포넌트의 size, raw image의 트랜스폼을 조절해보면 된다. 이렇게 기본적인 세팅은 ..

2d 자동 맵생성 2025.05.14

맵 자동 생성(10)

https://tpree.tistory.com/239 맵 자동 생성(9)이번 글에서는 복도에 콜라이더 설정을 해보겠다.추가로 시작 전 랜덤한 방을 선택해 그 안에서 캐릭터가 시작하도록 했다. 복도에 콜라이더를 설정해서 복도로만 다니게 해야하는데 이게 생각tpree.tistory.com 이전 글에서 복도 콜라이더 생성을 다뤄봤었다. 하지만 버그가 있었는데 일자로 복도가 생성됐을때, 중간지점에 모서리가 생겼던 것이다.또 특정한 패턴의 복도 모양에서는 모서리 쪽에 콜라이더가 이상하게 생성되는 버그가 있었다. 결국 둘 다 방향 설정의 문제다. 직선이 쭉 있다가 모서리가 생기는 것은 기존 알고리즘으로 되지만, 모서리 다음 얼마 안가서 바로 모서리를 생성해야하면기존 알고리즘에서는 해결이 불가능하다. 기존에는 랜덤..

2d 자동 맵생성 2025.05.14

맵 자동 생성(9)

이번 글에서는 복도에 콜라이더 설정을 해보겠다.추가로 시작 전 랜덤한 방을 선택해 그 안에서 캐릭터가 시작하도록 했다. 복도에 콜라이더를 설정해서 복도로만 다니게 해야하는데 이게 생각보다 까다롭다. 복도를 만들면서 일자구간, 모서리 부분에 각각 다른 콜라이더 모양을 설정해야하기 때문이다. 우선 나는 총 6가지로 콜라이더 모양을 구분했다. 밑에 두가지는 일자 통로에 사용하는 것이고, 위에 4가지가 모서리이다. 그렇다면 어떤 것이 일자로 된 통로이고, 어떤 것이 어느 방향의 모서리일까? 이를 위해 기존에 통로를 만드는 알고리즘을 활용했다. 복도이기 때문에 2중for문으로하지 않고 for문 두번을 이용해 복도를 만들었다. 이 때, x -> y 순으로 그리냐, y -> x 순으로 그리냐에 따라서 복도 모양..

2d 자동 맵생성 2025.05.13

맵 자동 생성(8)

https://tpree.tistory.com/237 맵 자동 생성(7)https://tpree.tistory.com/236 맵 자동 생성(6)이전까지 방을 생성해서 다 펼쳐놓고 그 mst를 이용해 방 들을 연결하였다.그리고 그 간선들을 이용해 문과 벽을 생성하고 통로까지 만들었다. https://tpree.tistpree.tistory.com 지난 번 몬스터 추적기능에 이어서 룸 배틀 시퀀스에 대해 다뤄보겠다. 먼저 플레이어가 방에 들어가게 되면 몬스터들이 활성화되고, 몬스터를 전부 처치하기 전까지는 방을 나갈 수 없다. 이를 위해서는 플레이어가 방에 들어온건지, 해당방은 클리어가 된 상태인지, 문을 어떤식으로 열고 닫을 건지를 다 생각해야한다. 먼저 플레이어가 방에 들어왔나? 를 체크할 때 문에..

2d 자동 맵생성 2025.05.13

맵 자동 생성(7)

https://tpree.tistory.com/236 맵 자동 생성(6)이전까지 방을 생성해서 다 펼쳐놓고 그 mst를 이용해 방 들을 연결하였다.그리고 그 간선들을 이용해 문과 벽을 생성하고 통로까지 만들었다. https://tpree.tistory.com/235 맵 자동 생성(5)이번 글에서tpree.tistory.com 여기까지만 봐도 맵 자동생성은 완성된다. 좀 더 게임답게 만들기 위한 과정이다. 부수적인 기능들을 붙인다는 것이다. 지난번까지 랜덤으로 몬스터 스폰 및 장애물 설치를 진행했다. 이번 글에서는 각 생성물들의 상호작용을 다뤄본다. 1. 몬스터 추적기능 2.룸 배틀 시퀀스 적용 이 두가지를 구현하겠다. 먼저 몬스터 추적기능은 바로 navMesh를 떠올렸다. 그런데 3D에서는 지원..

2d 자동 맵생성 2025.05.13

맵 자동 생성(6)

이전까지 방을 생성해서 다 펼쳐놓고 그 mst를 이용해 방 들을 연결하였다.그리고 그 간선들을 이용해 문과 벽을 생성하고 통로까지 만들었다. https://tpree.tistory.com/235 맵 자동 생성(5)이번 글에서는 통로를 완성시켜보겠다. 내가 몇번 살펴본 결과, 통로는 이렇게 2가지이다. ㄷ자, ㄹ자는 등장하지 않는다. 따라서 일자와 위 사진 같은 경로만 만들면 된다.그럼 어떻게할까? 간tpree.tistory.com 이번 글에서는 방 안에 몬스터와 장애물들을 랜덤으로 설치해보려고 한다. 이것으로 맵 자동 생성은 완성될 듯하다. 우선 몬스터와 장애물 프리팹들은 이미 준비가 되어있다. 아주간단하게 움직이지 않는 오브젝트에 boxCollider만 붙여놓은 것이다. 이것들을 방마다 랜덤으로..

2d 자동 맵생성 2025.05.12

맵 자동 생성(5)

이번 글에서는 통로를 완성시켜보겠다. 내가 몇번 살펴본 결과, 통로는 이렇게 2가지이다. ㄷ자, ㄹ자는 등장하지 않는다. 따라서 일자와 위 사진 같은 경로만 만들면 된다.그럼 어떻게할까? 간단하게 ㄱ자 2개를 만들기로 했다. 문과 문 사이에 지정된 범위 안에서 중간위치를 랜덤생성한 후, 시작점 - 중간위치, 중간위치 - 끝점 을 만들어주면 된다. 랜덤이 문앞에서 일어나면 부자연스러워지기 때문에 25%~75% 지점를 범위로 지정했다. 만약 각 x나 y의 값이 동일하다면 일자도 자연스레 만들어지기 때문에 이 방법을 택한다. void GenerateCorridors(GameObject parent,Vector2 v, Vector2 v2, bool mode/* true : x -> y , false :..

2d 자동 맵생성 2025.05.11

맵 자동 생성(4)

https://tpree.tistory.com/233 맵 자동 생성(3)이번 글에서는 만들어진 방들을 연결하기 위한 방법을 다뤄보겠다. 모든 방(노드)를 빠짐없이 연결하고 이를 최대한 효율적으로 연결하기 위해서는 최소스패닝트리 즉, MST알고리즘을 사용하면tpree.tistory.com 이전 글에 이어서 방 생성에 대해서 다뤄보고 문, 벽까지 완성해보려한다. 이전엔 문의 방향 위치 상관없이 그냥 생성만 해보았다. 그래서 통로와 관계없이 문이 있고 이런데 통로가 어디로 이어져 있으며, 어떻게 방향을 정해 문을 배치할 것인가를 고민해봐야 한다. 우선 a - b 를 연결하는 문과 통로를 만든다고 가정하자.a -> b 는 방향이 어느쪽인지를 파악해야한다. 그리고 그쪽 벽에 문을 설치해야한다. 방향은 간단한 벡..

2d 자동 맵생성 2025.05.11

맵 자동 생성(3)

이번 글에서는 만들어진 방들을 연결하기 위한 방법을 다뤄보겠다. 모든 방(노드)를 빠짐없이 연결하고 이를 최대한 효율적으로 연결하기 위해서는 최소스패닝트리 즉, MST알고리즘을 사용하면 된다.즉, 모든 노드를 가장 효율적으로(사이클 없이) 연결해주는 알고리즘이 MST 이며 이를 직접 구현하는 알고리즘에 Kruscal 알고리즘이 있다. 크루스칼 알고리즘의 동작방식은 간단하다.간선 정보를 받거나 만들거나 해서 그래프에 대한 엣지(간선) 데이터가 존재해야한다. 그 간선 정보들을 가중치를 정렬한다. 여기선 거리를 가중치로 뒀고 거리가 가까워야 효율적인 경로이기 때문에오름차순 정렬을 한다. 1. 그 데이터를 바탕으로 가중치가 작은 간선부터 선택한다.2. 이 간선을 트리에 추가했을 때, 사이클이 생기는가 확인한..

2d 자동 맵생성 2025.05.10