본문 바로가기

반응형

로그라이크

(11)
FoV - 쉐도우 캐스팅(Shadow Casting) 들어가며 로그라이크 게임의 핵심 요소 중에는 FoV라는 것이 있다. FoV란, 'Field of View' 또는 'Field of Vision'의 약자로써, 아래 이미지 처럼 플레이가 던전과 같은 필드의 특정 위치에서 볼 수 있는 오브젝트와 가려지는 오브젝트를 구분하여 디스플레이하는 기능을 말한다. FoV를 구현하기 위해 간단하게 사용되는 방법으로는 '라이트 트레이싱(Light tracing)'이 있다. 라이트 트레이싱이란 시작점 - 일반적으로 플레이어 캐릭터 - 에서 바깥 쪽으로 가상의 빛을 쏘아 장애물에 의해 막히는 맵 셀을 탐지하는 방법이다. 라이트 트레이싱은 간단히 구현할 수 있다는 장점이 있는 반면, 아래 이미지 처럼 같은 셀에 대해 여러번 같은 연산을 수행하게 되어 CPU의 낭비가 발생한다는 ..
차례 들어가며..'The Rougelike'의 제작 계획 게임 미리 보기'The Rougelike'의 기획서모든 것의 시작..주인공 만들기Player 클래스 정의주인공 아스키 코드로 표시하기 - Unity UGUI를 이용해 주인공 오브젝트 표시모험의 시작..몬스터 만들기 - Monster 클래스 정의몬스터를 아스키 코드로 표시하기 - 유니티 프리팹 사용하기리팩토링 - 플레이어와 몬스터의 상위 추상 Character 클래스 만들기리펙토링 - Position 클래스리펙토링 - C# 제네릭을 이용하여 Singleton 패턴 구현하기던젼으로 입장!!랜덤 맵 만들기 - 랜덤 맵 알고리즘의 소개ScrollRect를 이용하여 스크롤 되는 맵 만들기(unity ui 사용법 설명, 제작 과정)주인공 움직여 보기(이동 버튼 U..
리팩토링 - 플레이어와 몬스터의 상위 추상 Character 클래스 만들기 이전 장에서 우리는 프리팹을 이용해 플레이어와 몬스터에 공통으로 쓰일 ObjectView를 만들어 보았습니다. 하지만 그 과정 중 우리는 ObjectView를 플레이어와 몬스터에게 각각 추가 해주어야 했고, SetPosition함수도 각각 수정해 주어야 했습니다. 이렇게 공통점이 많은 클래스를 각각 만들어 관리하게 된다면 공통 기능에 대한 수정이 필요한 경우 양쪽 클래스 모두를 수정해줘야 한다는 불편함이 따라 옵니다. 여기에서 우리에게 필요한 것은 '추상화'와 '상속'입니다. 공통 기능을 상위 클래스 작성하여 상속을 통해 각 하위 클래스에서 사용할수 있도록 하고, 각 클래스 별 필요한 기능들에 대해서는 하위 클래스에서 개별적으로 정의 합니다. 이렇게 작성된 코드들을 보다 유지 보수가 편리하도록 변경하는 ..
몬스터를 아스키 코드로 표시하기 이번 장에서는 몬스터 오브젝트의 뷰를 만들 차례입니다. 몬스터도 플레이어 처럼 하나의 아스키 코드로 표현 됩니다. 몬스터의 알파벳 첫글자를 따서 'M'이라고 하도록 하죠. 잠깐 몬스터 뷰를 개발하기 전에 유니티의 '프리팹'이라는 것에 대해 잠깐 알아보고 가도록 하겠습니다.(이미 잘 알고 계신다면 그냥 넘어 가셔도 괜찮습니다) 프리팹?유니티 게임 오브젝트를 인스턴스화 하는 방법은 두가지가 있습니다. 하나는 프로그래밍적으로 코드를 사용하여 인스턴스를 만드는 것이고, 다른 하나는 에디터상에서 미리 만들어진 프리팹을 로딩하는 것입니다. 프리팹을 사용 했을시 코드 상으로 최소 몇줄 이상 되어야 하는 코드들을 한줄로 줄일 수 있고, 런타임에 속성들을 변경하여 테스트 해볼 수 있습니다.프리팹은 내부적으로 하나( 혹은..
몬스터 만들기 이제 부터는 주인공과 열심히 싸워주고 경험치를 주는 몬스터를 만들어 보겠습니다. 몬스터는 각 종 수치와 액션 관점에서 플레이어와 비슷해 보이지만 개발 관점에서 보면 사실 상당히 다른 구조를 가지고 있습니다. 이전 장에서 개발한 플레이어는 프로그램의 시작에서 부터 끝까지 단 하나의 객체밖에 존재할 수 없으며 플레이어가 죽는 순간 게임은 종료 됩니다. 하지만 몬스터는 플레이어와 달리 게임 플레이중에 여러 몬스터들이 동시에 존재 할수 있고, 파괴되었다고 해서 게임이 종료 되지도 않으며, 게임 플레이 중에 지속적으로 생성과 파괴를 반복합니다. 또한 다양한 종류의 몬스터를 표현하기 위해 동일한 클래스에 데이터만 바꿔서 표현해 줄 수도 있있습니다. 위의 요구 사항들을 만족하기 위해서 몬스터 클래스를 '고정 정보' ..
랜덤 맵 만들기 update 2021.07.13 갑자기 너무나 많은 분들이 들어오셔서 일단 급한 마음에 C++로 구현한 코드 올려 봅니다. https://github.com/ChoiIngon/gamnet/tree/master/example/LobbyServer/Component/Dungeon ChoiIngon/gamnet Automatically exported from code.google.com/p/gamnet - ChoiIngon/gamnet github.com 코드에 대한 자세한 최대한 빨리 시간내서 랜덤 던전 관련 코드만 정리해서 올리도록 하겠습니다. https://github.com/ChoiIngon/gamnet/blob/master/example/LobbyServer/Component/Dungeon/Dung..
'The Rougelike'의 기획서 시나리오'The Roguelike'는 주인공이 이름 모를 던젼을 탐험하고 던젼에 숨겨진 보물을 찾으며 지하로 지하로 내려가는 턴제 게임입니다. 탐험 중에 위험한 몬스터들과 조우하기도 하고, 몬스터와 싸워 이기면 탐험에 필요한 아이템들도 얻을 수 있습니다. NPC들과 대화를 통해 퀘스트도 받고 퀘스트를 완수하면 보상도 주어집니다. 단, 로그라이크류 게임 답게 한번 죽으면 게임을 다시 시작해야만 합니다. 게임 방식성공 조건 : 플레이어가 던젼의 지하 맨 밑층까지 탐험을 완료하면 게임에서 승리하게 됩니다.실패 조건 : HP가 0이 되면 플레이어가 사망하게 되고 게임이 종료 됩니다.턴제 게임으로써 플레이어가 액션을 할때 마다 스테미너가 소모 되며, 0이 되면 그 때부터 매 턴마다 HP가 감소합니다.몬스터에게 공..
FoV(Field of Vision) 로그라이크에서 - 플레이어 캐릭터 주변 환경을 표현과 같은 - 가장 중요한 몇몇 기능들은 현재 플레이어의 위치에서 맵 위의 각 오브젝트들의 가시성을 체크하는 것이 필요합니다. 이것을 'Field of Vision' 혹은 'Field of View'(이하 FoV)라고 하겠습니다. 타일 기반 2D 게임에서 FoV를 구현하기 위해 현재 플레이어가 위치하는 방만 다 보이는 것으로 판단한다던지의 여러가지 구현 방법이 있지만 'The Rougelike'에서는 플레이어 주변 일정 범위 내에 있는 가려지지 않은 오브젝트들을 가려내는 방식을 채택했습니다.1. 맵 전체를 보이지 않는 영역으로 초기화 한다.2. 플레이어 좌표를 기준으로 원을 그린다.3. 플레이어에서 부터 원주를 이루는 하나의 점에 직선을 그린다.4. 플레이..
'The Rougelike' 제작 계획 우리가 이제부터 만들어 볼 게임은 'NetHack'으로 유명한 Rougelike 게임입니다. 로그라이크란원작 게임인 'Rouge'의 특징과 시스템을 모방한 게임들을 총칭하는 말입니다. 'Rouge'는 거의 최초의 던젼 탐험 RPG 게임으로써 지금과 같은 그래픽 기술이 없던 시절 제작 되었기 때문에 아스키 코드만으로 그래픽을 표현했습니다. 또한 요즘 처럼 데이터를 저장하고 죽으면 다시 불러오는 것이 아닌 한번 죽으면 모든것이 처음부터 시작하는 어마 무시한 룰을 가지고 있습니다. 이후 'Rouge'와 비슷한 방식으로 여러 게임들이 제작되었는데 이들을 로그라이크(Rouge-like = 로그류) 게임이라 부릅니다. 'NetHack', 'ADOM', 'Angband'등이 이런 로그라이크 게임이며, '바람의 나라'..
모든 것의 시작..주인공 만들기 게임에 등장하는 것들에는 무엇이 있을까요? 먼저 주인공과 몬스터가 있겠고, 퀘스트를 주거나 주인공을 도와 같이 싸우는 npc, 그 밖의 나무, 벽, 바위, 문, 보물 상자 등등의 다양한 것들이 있을 수 있습니다. 이런 종류의 것들을 지금 부터 '게임 내 오브젝트', 그냥 간단하게 '오브젝트'라고 부르도록 하겠습니다. 그리고 이번 장에서는 이 게임의 핵심이 되는 주인공(Player) 오브젝트를 만들어 보겠습니다. 주인공(Player) 클래스 데이터 및 오퍼레이션 정의 먼저 주인공의 기본속성 부터 생각해 보도록하죠. - 위치 : 타일 기반 2D 게임이므로 x, y 축에 대해 2차원 좌표를 가지면 됩니다. 지금은 주인공에겐 아무런 기능이 없습니다. 단지 화면에 표시 되기만 하면 되죠. 그래서 현재로는 표시 되..

반응형