로그라이크 (13) 썸네일형 리스트형 랜덤 던전 - 오토 타일링 들어가며이전 포스트 '랜덤 던전 생성(Procedural Dungeon Generation)'에서는 절차적으로 랜덤 던전을 생성하는 방법과 그에 필요한 기술들을 알아 보았다. 이번 포스트에서는 이전 포스트에서 생성된 던전 데이터를 기반으로 실제 우리가 '게임'이라 불릴만한 그래픽이 적용된 결과를 만들어 보도록 하겠다.본 포스트에 사용된 예제는 유니티를 이용해 제작 되었으며 전체 프로젝는 여기에서 확인할 수 있다. 부록 1. 같이 읽으면 좋은 글본 포스트에 사용 된 스프라이트 : https://pixel-poem.itch.io/dungeon-assetpuck 랜덤 던전 생성(Procedural Dungeon Generation) 들어가며필자는 픽셀 던전과 같은 던전을 탐험하는 로그라이크 게임을 좋아한다. 세상에는 이미 천재들이 만들어 놓은 명작 로그라이크 게임들이 존재하지만, 항상 나만의 스토리와 퀘스트를 가진 나만의 로그라이크 게임을 가지는 꿈을 가지고 있다.그 시작으로 이번 포스트에서는 로그라이크 게임의 메인 요소인 '랜덤하게 생성되는 던전'에 대한 내용을 다뤄 보도록하겠다. 본 포스트에서는 랜덤 던전을 만들기 위한 기술과 알고리즘들 살펴 볼 것이며, 필자가 이 포스트를 위한 예제를 만들며 직접 겪은 경험들과 생각들 또한 더해보도록 하겠다.본 포스트에 사용된 예제는 유니티 기반으로 개발 되었으며 전체 프로젝트는 [여기]에서 확인할 수 있다. 만일 여러분이 코드를 분석하고자 한다면 주요 알고리즘과 자료 구조는 DungeonGe.. 보이어 왓슨(Bowyer-Watson) 알고리즘 들어가며보이어 왓슨(Bowyer-Watson) 알고리즘은 델로네 삼각분할(Delaunay Triangulation)이라는 공간 분할법을 구현하는 여러가지 방법 중에 하나다.보이어 왓슨 알고리즘에 앞서 델로네 삼각분할을 간략하게 살펴 보도록 하자.델로네 삼각분할은 공간을 분할하는 방법 중에 하나로써 평면 위의 임의의 점들을 삼각형 형태로 연결하는 방법이다. 다만 단순 삼각형을 만드는 것이 아니라, "삼각형의 내각의 최소값이 최대가 되도록 한다"라는 규칙을 가진다. 간단히 말하면 최대한 정삼각형에 가까운 삼각형들을 만드는 것이다.다음 그림을 살펴 보자 :위 그림의 A의 네 점들을 연결하여 삼각형을 만든다고 생각해 보자. 두 가지 선택이 가능한데, B의 경우 처럼 세로로 분할 해 긴 삼각형 형태를 만들거나, .. A*(Astar) 길찾기 알고리즘 들어가며로그라이크의 근본은 누가 뭐래도 작은 타일들로 이루어진 복잡한 미로 속에서 몬스터와 싸워나가며 결국엔 던전을 클리어하고 보물을 얻는것이라 생각한다. 그런데 던전에서 캐릭터와 몬스터들이 이동하는 것을 보니 한 가지 궁금한것이 생긴다. 복잡한 미로 속에서 캐릭터는 어떻게 유저가 이동하라는 곳으로 자연스럽게 이동하는 것일까? 몬스터는 어떻게 장애물들을 피해 플레이어를 공격해 올 수 있는 것일까? 이번 포스트 이런 물음에 답을 주기 위해 게임을 만드는데 필수 요소 중의 하나인 길 찾기(path finding) 알고리즘에 대해 살펴 보도록 하겠다.다익스트라 vs A*알고리즘을 조금이라도 공부해본 사람이라면 길 찾기 알고리즘이라고 하면 가장 먼저 다익스트라 알고리즘을 떠올릴 것이다. 다익스트라 알고리즘은 '.. FoV - 쉐도우 캐스팅(Shadow Casting) 들어가며 로그라이크 게임의 핵심 요소 중에는 FoV라는 것이 있다. FoV란, 'Field of View' 또는 'Field of Vision'의 약자로써, 아래 이미지 처럼 플레이가 던전과 같은 필드의 특정 위치에서 볼 수 있는 오브젝트와 가려지는 오브젝트를 구분하여 디스플레이하는 기능을 말한다. FoV를 구현하기 위해 간단하게 사용되는 방법으로는 '라이트 트레이싱(Light tracing)'이 있다. 라이트 트레이싱이란 시작점 - 일반적으로 플레이어 캐릭터 - 에서 바깥 쪽으로 가상의 빛을 쏘아 장애물에 의해 막히는 맵 셀을 탐지하는 방법이다. 라이트 트레이싱은 간단히 구현할 수 있다는 장점이 있는 반면, 아래 이미지 처럼 같은 셀에 대해 여러번 같은 연산을 수행하게 되어 CPU의 낭비가 발생한다는 .. 차례 들어가며필자가 로그 라이크 게임을 만들어 가는 과정을 기록해 보고자 한다. 그래픽과 엔진에서 제공하는 기능에 대한 것들은 이미 다른 유수의 책과 인터넷이 충분히 설명하고 있으므로, 여기에서는 엔진에 대한 사용법과 그래픽을 표현하는 방법에 대해서는 최대한 자제하고 시스템을 어떻게 구축하면 되는지에 대해 집중적으로 연구해 볼것이다.기획퀘스트모든 것의 시작..주인공 만들기Player 클래스 정의주인공 아스키 코드로 표시하기 - Unity UGUI를 이용해 주인공 오브젝트 표시모험의 시작..몬스터 만들기 - Monster 클래스 정의몬스터를 아스키 코드로 표시하기 - 유니티 프리팹 사용하기리팩토링 - 플레이어와 몬스터의 상위 추상 Character 클래스 만들기리펙토링 - Position 클래스리펙토링 - C#.. 리팩토링 - 플레이어와 몬스터의 상위 추상 Character 클래스 만들기 이전 장에서 우리는 프리팹을 이용해 플레이어와 몬스터에 공통으로 쓰일 ObjectView를 만들어 보았습니다. 하지만 그 과정 중 우리는 ObjectView를 플레이어와 몬스터에게 각각 추가 해주어야 했고, SetPosition함수도 각각 수정해 주어야 했습니다. 이렇게 공통점이 많은 클래스를 각각 만들어 관리하게 된다면 공통 기능에 대한 수정이 필요한 경우 양쪽 클래스 모두를 수정해줘야 한다는 불편함이 따라 옵니다. 여기에서 우리에게 필요한 것은 '추상화'와 '상속'입니다. 공통 기능을 상위 클래스 작성하여 상속을 통해 각 하위 클래스에서 사용할수 있도록 하고, 각 클래스 별 필요한 기능들에 대해서는 하위 클래스에서 개별적으로 정의 합니다. 이렇게 작성된 코드들을 보다 유지 보수가 편리하도록 변경하는 .. 몬스터를 아스키 코드로 표시하기 이번 장에서는 몬스터 오브젝트의 뷰를 만들 차례입니다. 몬스터도 플레이어 처럼 하나의 아스키 코드로 표현 됩니다. 몬스터의 알파벳 첫글자를 따서 'M'이라고 하도록 하죠. 잠깐 몬스터 뷰를 개발하기 전에 유니티의 '프리팹'이라는 것에 대해 잠깐 알아보고 가도록 하겠습니다.(이미 잘 알고 계신다면 그냥 넘어 가셔도 괜찮습니다) 프리팹?유니티 게임 오브젝트를 인스턴스화 하는 방법은 두가지가 있습니다. 하나는 프로그래밍적으로 코드를 사용하여 인스턴스를 만드는 것이고, 다른 하나는 에디터상에서 미리 만들어진 프리팹을 로딩하는 것입니다. 프리팹을 사용 했을시 코드 상으로 최소 몇줄 이상 되어야 하는 코드들을 한줄로 줄일 수 있고, 런타임에 속성들을 변경하여 테스트 해볼 수 있습니다.프리팹은 내부적으로 하나( 혹은.. 몬스터 만들기 이제 부터는 주인공과 열심히 싸워주고 경험치를 주는 몬스터를 만들어 보겠습니다. 몬스터는 각 종 수치와 액션 관점에서 플레이어와 비슷해 보이지만 개발 관점에서 보면 사실 상당히 다른 구조를 가지고 있습니다. 이전 장에서 개발한 플레이어는 프로그램의 시작에서 부터 끝까지 단 하나의 객체밖에 존재할 수 없으며 플레이어가 죽는 순간 게임은 종료 됩니다. 하지만 몬스터는 플레이어와 달리 게임 플레이중에 여러 몬스터들이 동시에 존재 할수 있고, 파괴되었다고 해서 게임이 종료 되지도 않으며, 게임 플레이 중에 지속적으로 생성과 파괴를 반복합니다. 또한 다양한 종류의 몬스터를 표현하기 위해 동일한 클래스에 데이터만 바꿔서 표현해 줄 수도 있있습니다. 위의 요구 사항들을 만족하기 위해서 몬스터 클래스를 '고정 정보' .. 기획 세계관 개요이 게임의 배경은 마법과 검이 공존하는 판타지 세계입니다. 오래전, 누군가에 의해 거대한 던전이 만들어졌습니다. 사람들은 이 던전을 **‘마법사의 미궁’**이라 부르며, 그곳에 엄청난 보물이 숨겨져 있다는 소문이 퍼졌습니다. 하지만 이 던전의 기원에 대해선 아무도 정확히 알지 못합니다.누가 지었는가? 고대의 위대한 마법사일지도 모릅니다.왜 지었는가? 그의 가장 소중한 보물을 지키기 위해서일지도 모릅니다.언제 지었는가? 수백 년 전일지도, 수천 년 전일지도 모릅니다.그 진실은 안개 속에 가려져 있습니다.던전의 특징무한히 변화하는 구조던전에 들어설 때마다 내부의 구조가 무작위로 변형됩니다.각 층마다 서로 다른 함정과 몬스터가 기다리고 있습니다.마법적 에너지로 가득한 공간던전 내부에는 강력한 마법적.. 이전 1 2 다음