- 혜연 : 조장, 프레임워크, 카메라, 맵툴
- 지훈 : 애니메이션, 플레이어
- 정원 : UI, AI
- 조이 : 이펙트, 쉐이더
- 석희 : 몬스터, 사운드
스테이지는 크게 메인필드, 배틀 존, 미니게임, 보스룸으로 구성되어있습니다.
- 게임에서 신이 전환되면서 로딩 없이 게임이 바로 진행될 수 있도록 처음 게임을 실행할 때 각 레벨마다 필요한 객체들을 프로토타입 패턴을 이용해 클론형으로 생성했습니다. 이는 스레드를 다중으로 이용하여 시간이 지연되는 것을 방지했습니다.
- 이렇게 클론된 객체들을 각 필요한 용도에 따라 Layer별로 분류했고, 오브젝트 풀링을 이용해 풀링 레이어 공간에 담아두었다가 필요할 때 바로 꺼내쓸 수 있도록 구현했습니다.
- 덕분에 객체 생성, 레벨 전환에 있어서 빠른 속도를 유지할 수 있었습니다.
- 해당 게임은 전투와 비전투 상태가 분류되어서 진행되는 게임입니다.
- 이를 구현하기 위해 싱글톤 형태로 배틀에 대한 정보를 관리하는 Battle Manager를 구현했습니다.
- 특정 몬스터와 충돌하면 전투 대상이 해당 몬스터로 설정되고, 해당 몬스터와 플레이어만 배틀존으로 이동하여 배틀존에서 전투를 진행하는 형태입니다.
- 몬스터가 죽고 배틀이 종료되면 다시 일반 필드로 씬이 전환되고 오브젝트 풀링을 이용해 필드에 있던 데이터들을 로드했습니다.
- 테일즈오브 어라이즈의 특징은 컨트롤할 메인 플레이어가 전환 가능하다는 점입니다.
- 전투/비전투 상황에 플레이어가 자유롭게 전환이 가능하고 이에 따라 기존에 플레이어였던 대상이 AI로 전환되게 처리했습니다.
- 이를 구현하기 위해 플레이어와 AI의 정보를 담고 AI와 플레이어의 상태를 확인하는 PlayerManager를 싱글톤 패턴으로 구현했습니다.
- 팀프로젝트를 하면서 업무 분할과 수정, 가독성 등에 있어서 효율적으로 진행하고자 상태 패턴을 활용했습니다.
- 객체들의 움직임들을 각 상태에 따라 분할하여 제어하도록 처리했습니다.
- 타격감이나 피격, 타격에 따른 처리를 위한 상세한 디테일을 처리했습니다.
- 추상 클래스에서 가진 Take_Damage 함수를 상속받아 세부적으로 구현했고, 피격을 받을 시 데미지의 타입이나, 쉐이킹, 크리티컬 등 다양한 피격 처리를 진행했습니다.
- 공격시 타겟몬스터를 설정할 수 있는 LockOn 기능이 있습니다.
- 각 몬스터마다 LockOn 게이지를 보유하고 있으며, 플레이어는 타겟팅한 대상의 LockOn 게이지를 확인할 수 있습니다.
- 추가적으로 CapsLock 키를 통해 시간을 정지 시켜 타겟 몬스터의 특정 상태를 확인할 수 있습니다.
- 정지 상태일 때 Z와 X를 통해 타겟을 전환할 수 있습니다. 이 때 카메라가 타겟을 따라가며 전환됩니다.
- 해당 타겟은 플레이어와 AI들이 공격하는 우선순위 대상이며 타겟이 죽으면 다른 몬스터가 Lock On 마크가 생기며 타겟팅 됩니다.
- 위의 일시정지 기능을 통해 동일하게 플레이어도 변경가능합니다.
- 1,2,3,4를 통해 원하는 캐릭터를 메인 플레이어로 설정할 수 있습니다.
- 플레이어와 AI의 게이지가 다 채워질 경우 부스트 어택을 사용할 수 있습니다. 이때 부스트어택 사용시 카메라가 부스트 어택을 사용한 플레이어로 변환되었다가 다시 돌아옵니다.
- 몬스터의 LockOn 게이지가 다 채워지면 시간이 멈추면서 스트라이크 어택(궁극기)를 사용할 수 있게 됩니다.
- 선택하는 플레이어에 따라 카메라 툴로 제작한 액션카메라로 카메라가 전환됩니다.
- 이때 공격하고자 하는 타이밍과 대상의 위치를 조절하여 이펙트 생성, 공격이 가능하고 액션이 끝날 시 9999데미지가 입혀집니다.
마우스의 움직임을 입력받아서 x의 이동량과 y의 이동량에 따라 플레이어를 공전하는 카메라를 구현했습니다.
플레이어와 타겟 몬스터를 하나의 화면 안에 담기위해 카메라용 가상 절두체를 생성하여 타겟인 몬스터가 절두체를 벗어나려고 할 때 카메라를 자동으로 회전시키게 했습니다.
카메라 툴을 이용하여 대상을 바라보며 움직임을 처리하는 타겟 카메라를 구현했습니다.
NPC와의 대화나, 스트라이크 스킬을 비롯한 액션씬을 카메라 툴로 구현했습니다.
미니게임 진행을 위한 미니게임 카메라가 있습니다.
- 필터 텍스처를 이용해 텍스처 스플래팅 기법을 구현했습니다. 지형에 마우스 픽킹을 통해 동적으로 필터 텍스처를 생성 가능하였고, 그것을 bmp파일로 저장 하고 불러오기가 가능하게 했습니다. 이를 레벨마다 다른 텍스처들을 융합하여 스플래팅으로 섞이도록 처리했습니다.
- Height Map으로 지형을 불러오기가 가능하게 하였고, 마우스 픽킹을 통해 모양을 세부적으로 조절할 수 있게 처리했습니다.
- 브러쉬 Shader로 마우스의 픽킹 위치와 범위를 실시간으로 볼 수 있게 했습니다.
- IMGUI툴을 이용하여 객체들을 설치하고 저장, 불러오기 기능을 하는 맵툴을 구현했습니다.
- 각 객체들을 Layer별로 설치하고 삭제할 수 있으며 해당 Layer별로 저장이 가능하게 했습니다. 저장은 가독성과 편의성을 위해 다이얼로그 기능을 구현했습니다.
- 또한 객체의 사이즈, 회전축, 등의 행렬정보를 저장하게 했습니다.
- 동일한 객체의 경우 모델 인스턴싱 기법을 통해 한번에 렌더되게 처리했습니다.
- 마우스 픽킹으로 지형의 픽킹 좌표를 구해 네비게이션을 생성하는 기능을 구현했습니다.
- 슬라이딩 벡터를 계산하야 플레이어가 네비게이션 밖을 벗어나도 미끄러지며 이동가능 하도록 처리했습니다.
- 카메라가 현재 바라보는 화면을 캡쳐하여 캡쳐한 순간의 카메라의 좌표와, 바라보는 시야의 위치를 저장하게 처리했습니다.
- 해당 캡쳐 내용을 vector 컨테이너에 담아 play 버튼을 누를 시 처음부터 끝까지 캡쳐한 순서대로 카메라의 위치와 시야가 바뀌도록 처리했습니다.
- 이동하는 방식은 Lerp함수 또는 CatRom 함수를 통해 가능하며 이는 툴 상에서 선택 가능하게 처리했습니다.
- 툴로 제작 가능한 카메라는 Target 카메라와 Action 카메라 두 개로 구분되며 용도에 따라 다른 형태로 저장됩니다.
- 레벨별로 Directional Light와 Point Light를 설치 가능하게 했습니다.
- 각 Light 마다 Diffuse , Ambient 등 빛의 속성들을 제어할 수 있고 이를 데이터 파일로 저장 불러오기가 가능하게 처리했습니다.
자세한 코드 설명은 깃허브 프로젝트 혹은 기술소개서에서 확인 가능합니다.
- 레벨 제어
- 상태 패턴
- 로딩 쓰레드
- 오브젝트 풀링
- 액션 카메라 / 카메라 툴
- 지형 스플래팅, Height Map, 지형 조절 툴
- 타격감 처리