분류 전체보기(12)
-
보스 제작(FSM)
이번에는 보스 몬스터를 제작했다. 네크로댄서의 데스메탈 보스를 구현해봤다. 필드 몬스터는 단순하게 이동->멈춤->이동->멈춤을 반복했다면 보스 몬스터는 좀 더 다양한 패턴이 존재한다. 보스 몬스터가 상황마다 어떻게 행동할지 명확하게 하기위해 이번엔 FSM을 이용해 보스 패턴을 구현했다. 데스메탈 보스는 처음에 방패를 들고 등장한다. 방패를 들었을땐 플레이어를 추적하며 이동하고, 방패를 든 방향에서 플레이어의 공격이 들어오면 피해를 입지 않고 몬스터를 소환한다. 일정이상 데미지를 입으면 방패는 사라지고, 그때부턴 플레이어에게서 멀어지는 방향으로 도망치기 시작한다. 일정 턴 도망친 후에는 몇턴간 몬스터를 소환하는 액션을 취하고, 소환이 끝나기 전에 공격하지 않으면 몬스터를 소환한다. 방패가 없을때 공격을 받..
2020.04.29 -
카메라 흔들기
이번에는 공격 시나 벽을 파괴할때 카메라가 흔들리는 효과를 넣어주는 작업을 진행했다. (이외에도 FMOD를 이용해 배경음, 효과음을 추가하는 작업과 이동시 바닥 타일의 색상 변경 작업을 했다.) 카메라를 어떻게 흔들지 결정하는 파라매터는 Amplitude(진폭), Duration(흔드는 시간), Frequency(흔드는 빠르기) 세가지로 정했다. 카메라를 흔들기 전에 원래 카메라의 위치를 기억하기위한 멤버변수도 추가해주었다. ShakeCamera()를 호출하면 원래 위치를 저장하고 흔들기를 시작한다. 설정한 파라매터를 이용해 카메라를 흔든다. 이때 랜덤성을 주기위해서 랜덤한 값에서 시작하도록 해준다. 실행 결과(사운드 주의)
2020.04.27 -
몬스터 행동패턴
이번에는 몬스터들이 플레이어를 추적해 이동하고 공격하도록 하는 작업을 진행했다. 네크로댄서의 몬스터들은 A* 알고리즘을 사용하지 않는다. 모든 몬스터를 조사해보진 않았지만, 적어도 1스테이지의 몬스터들은 이동 가능한 최단경로를 탐색하지 않는다. 슬라임은 플레이어를 추적하지 않고 같은 행동을 반복한다. 해골은 플레이어와 직선상에 위치했을때 벽에 가로막혀 있다면 벽이 없는 최단경로를 탐색하지 않고 그대로 이동하지 못한다. 필드보스(미니보스)의 경우 벽을 파괴하고 플레이어를 추적한다. 몬스터가 이동하는 조건 네크로댄서에서 몬스터는 두가지 조건에서 이동한다. 첫번째는 플레이어가 이동에 성공했을 경우 함께 이동한다. 두번째는 플레이어가 이동에 실패했을 경우(키를 입력하지 않거나 비트에 맞춰 입력하지 않은 경우)에..
2020.04.23 -
아이템 루팅
이번엔 아이템이 있는 타일로 이동하면 아이템을 습득하는 것을 구현했다. 습득한 아이템에 따라 해당 슬롯으로 이동하는 모션을 넣고 싶었다. 예를 들어 무기 습득시에는 무기 슬롯으로 아이템이 이동하는 모션을 넣고, 음식 습득시에는 음식 슬롯으로 이동하도록 구현하기로 했다. 따라서 습득한 아이템의 클래스를 런타임중에 알아야 했는데, 가장 처음에 든 생각은 단순하게 런타임중 Item을 상속받는 모든 형들에 캐스팅을 해보는 것이었다. 위와 같은 방법도 작동은 하겠지만, 아이템 종류가 많아질수록 if문이 한없이 많아지고 런타임중 형변환을 여러번 하는 것을 피하고 싶었기에 다른 방법을 생각해봤다. 먼저 Item 클래스는 상속받는 클래스들이 EquipItem 함수를 구현하도록 순수가상함수를 선언했다. 플레이어가 아이템..
2020.04.14 -
아이템 상자 스폰
이번에는 방마다 랜덤하게 상자를 생성하는 작업을 진행했다. 무기 상자, 음식 상자 두가지 상자중 하나를 방마다 랜덤하게 배치하고, 상자에 담겨있는 아이템도 실행시마다 랜덤하게 나오도록 구현했다. 아이템 상자 아이템 상자는 무기 상자와, 소비 아이템인 음식 상자 두가지를 배치했다. 상자 클래스는 상자를 열면 나타날 아이템을 하나씩 가지고 있고, 상자에서 나올 수 있는 아이템 리스트를 가지고 있어야 한다. 그리고 상자가 가질 아이템을 생성하는 SetItem 함수와 상자를 열고 아이템을 바닥에 배치하는 OpenChest 함수를 가진다. 아이템 리스트는 지난번 몬스터를 랜덤생성할때 사용했던 Spawner 클래스를 활용했다. 기존 Spawner 클래스는 MonsterSpawner 클래스로 변경하고, ItemSpa..
2020.04.14 -
플레이어 공격 1
이번에는 플레이어가 몬스터를 공격하는 작업을 진행했습니다. 네크로댄서는 일반적인 게임과 다르게 충돌체 충돌로 공격을 처리하지 않습니다. 플레이어가 이동키를 입력했을때 이동할 방향에 적이 있으면 이동 대신 공격이 나가는 방식입니다. 플레이어와 적이 직접 충돌하지 않은 상태로 공격을 판정해야 하기 때문에, 입력한 방향에 적이 존재하는지 파악하는 로직이 필요합니다. 가장 먼저 떠오르는 방법은 이동시마다 공격 범위 안에 적이 있는지 모든 적 객체를 순회하며 좌표를 대조해보는 것이었습니다. 하지만 이동시마다 이 작업을 반복하는건 자원 낭비가 심하고 레벨에 몬스터가 많아질수록 아직 화면에 보이지도 않는 적때문에 렉을 유발할 수도 있습니다. 괜찮은 방법을 생각하다 지난번 맵을 구현했던 타일에 자신의 타일위에 있는 액..
2020.04.07