일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 유니크포인터
- c++
- 디자인패턴
- 멀티쓰레드
- thread
- Design Pattern
- Multithread
- sequential
- 멀티코어 프로그래밍
- 복사생성자
- 프레임워크
- 쓰레드
- 옵저버 패턴
- observer pattern
- Unreal
- random access
- 메모리관리
- 멀티코어
- 옵저버
- stl
- 한국산업기술대학교
- MultiCore
- EFFECTIVE C++
- multi-core
- material
- 게임공학과
- 스마트포인터
- C
- Atomic
- vector
- Today
- Total
태크놀로지
스폰지밥 게임 모작 - 3D 액션 어드벤처 게임 본문
개발환경
- DirectX11
- C++
개발기간
- 2달
컨텐츠 - 보스전 (로보샌디)
- 보스는 총 3페이즈가 존재하며, 각 페이즈가 넘어갈때마다 게임의 개연성을 주기위한 연출을 구현하였습니다.
- 보스의 전체체력은 9이며, 체력이 3씩 줄어들때마다 페이즈가 변경됩니다. (페이즈마다 체력을 색으로 구분하였습니다.)
- 기본공격으로 공격이 불가능하며, 특수 공격패턴에서 공격을 성공했을때만 체력이 감소됩니다. (각 페이즈마다 공격방식이 변경됩니다.)
- 각 페이즈 혹은 상황에 따른 나레이션을 해주는 아나운서 유아이가 존재합니다.
> 1페이즈
첫번째. 가라테찹 / 퀵찹 두가지 공격패턴을 진행합니다.
두번째. 공중에 떠서 아래로 내려찍는 슬램 공격을 진행합니다.
세번째. 보스는 잠시 기절 상태에 들어가며, 공격성공 / 공격실패 두가지 경우로 나뉘게 됩니다.
- 공격성공시, 전기 충격 모션 재생 이후 체력이 감소됩니다.
- 공격실패시, 다시 처음부터 반복합니다.
※ 보스 공격방법
슬램 공격시, 캐릭터가 공중에 강제점프됩니다. 이때 바닥에 표시된 UI에 맞춰 내려찍기 공격을 해야합니다.
> 중간 연출
3페이즈 컨텐츠 진행을 위한, 이벤트 오브젝트인 스코어보드가 떨어집니다.
> 2페이즈
링을 이용한 새로운 공격패턴이 추가됩니다.
※ 보스 공격방법
1페이즈와 동일하게 공격했을경우, 새로운 공격패턴이 하나더 추가됩니다. 보스는 머리를 들어올리며 기절상태가 되면, UI가 안내하는 해당 위치에 가서 이단점프를 통해 공격해야합니다.
> 중간연출
캐릭터가 스폰지밥에서 뚱이로 플레이 변경됩니다. (뚱이는 이단점프대신, 물건을 집어서 던질 수 있습니다.)
> 3페이즈
2페이즈와 공격패턴은 동일합니다.
※ 보스 공격방법
보스 기절시, 보스 머리가 분리되는데 뚱이의 기술을 통해, 머리를 집어 스코어보드로 던져주어야합니다.
> 아웃트로
보스 체력이 다 소모되면, 보스 처치에 대한 보상 유아이가 등장하며 마무리 연출이 진행됩니다.
기술적요소
버텍스 텍스처 패치(VTF)를 통한 스킨드 인스턴싱
맵에 배치되어있는 관중 NPC에게 각각의 애니메이션을 적용시켜주었습니다.
2D 텍스쳐를 사용하여, 행과 열로 분리하여 인스턴싱마다의 데이터를 분리하였습니다.
열 : 인스턴스버퍼에 들어가있는 인스턴스 아이디대로, 나열
행 : 각 인스턴스의 본 마다의 애니메이션 최종변환행렬을 텍스처 행에 담아주었습니다.
플레이어 카메라
플레이어 이동방식
플레이어는 조작키에 따라 자전하며 이동합니다.
- 좌우키로 이동시 카메라가 바라보는 방향에서의 90도 제한 조건으로 회전됩니다.
- 플레이어의 룩벡터와, 이동하려는 방향간의 내적을 통해 각도를 계산하였습니다.
- 플레이어가 회전하려는 방향은 두 벡터의 외적을 통해 결정해주었습니다.
카메라
플레이어를 서서히 따라가며, 플레이어와 동일한 룩방향을 바라보지 않은 공전이 가능한 카메라입니다.
- 이전 프레임의 플레이어 위치와, 현제 프레임의 위치를 보간하여 카메라가 바라봐야할 At을 지정해주었습니다.
- 이전의 At과 현재의 At을 통해 카메라가 바라봐야할 방향을 구할때, 노말라이즈를 하지 않음으로서 플레이어 이동 델타거리에 비례하여 따라가도록 하였습니다.
- 카메라 공전은, 아핀변환 곱 순서를 적용하여, 카메라의 부모행렬을 플레이어 월드행렬로 두어 계산하였습니다.
프레넬
비눗방울, 보스 로보샌디 머리 유리창에 프레넬을 적용해주었습니다.
- 카메라의 위치를 버텍스 세이더에 넘겨주어, 현재 정점의 위치와 카메라 위치를 통한, 반사벡터를 구해주었습니다.
- 반사벡터와 노말벡터간의 내적을 통해, 프레넬의 보간 계수를 구해주었습니다. (pow를 통해 점점 더 진해지는 범위를 조절하였습니다.)
UI 정렬방식
기본 UI 우선순위를 지정해주었습니다.
- Layout - Frame - View - Priority - Top Priority
위에 방식만으로는 모든 UI의 우선순위를 정렬해주기에 한계가 있어, 상황에 따른 UI 우선순위를 적용해주었습니다.
- 예시1) 일시정지시 나타나는 UI 배너가 인게임 UI를 가려야 하는 경우
- 예시2) 이펙트 UI와 마우스 커서는 대부분의 UI 위에 그려져야한다.
- 상황별 열거체) Ingame, Banner, SubBanner, Effect, Cursor
'포트폴리오' 카테고리의 다른 글
IT TAKES TWO 모작 - DirectX11 (2) | 2022.01.12 |
---|---|
메이플스토리 모작 - 2D 횡스크롤 RPG 게임 (0) | 2022.01.09 |
EVERSPACE 모작 - 3D 비행 슈팅게임 (0) | 2021.12.28 |
METAL SLUG 모작 - 2D 아케이드 슈팅게임 (0) | 2021.12.28 |
CACHE CACHE - DirectX12 (0) | 2020.09.29 |