동영상 링크 : https://youtu.be/qPkgAsugrzk
[구현]
오브젝트
플레이어 : 기본적인 이동과 엎드리기 밑 아래점프 구현
몬스터 : Monster 부모 클래스를 상속받아 몬스터 별 세부적인 설정을 할 수 있도록 함
NPC : Button 클래스를 이용하여 Click시에 해당 NPC의 이벤트 발생
펫 : 플레이어를 따라다니도록 하며 주변의 아이템과 충돌검사로 아이템 습득
이동 : 사각형과 직선의 충돌검사를 통한 선타기 적용
포탈 : 충돌검사 후 윗방향키를 누를경우 씬전환
히든포탈 : 근처에 갈경우 활성화 되며 포탈과 동일한 로직 적용
스킬
스트라이크애로우 : AABB충돌을 통해 범위 판정
페이탈블리츠 : 스킬에 DeltaTime 인자를 주어서 일정주기로 공격
제네시스 : 큰 범위 공격을 하며 주변 지형을 파악해 추가적인 이펙트를 소환
벽력일섬 : TimeManager를 통해 게임의 시간을 느리게 흘러가도록 구현
콤보데스폴트 : CameraManager를 통해 게임화면을 움직이게 하는 효과를 구현
이펙트
오브젝트 풀링을 이용하여 데미지 이펙트와 같이 재사용성이
높은 오브젝트를 재생성하지 않도록 구현
퀵슬롯
플레이어가 퀵슬롯의 수 크기의 int배열을 갖고 있고 특정한 값을 부여하여
특정 키를 눌렀을 때 해당키에 맞는 값을 이용해 아이템, 스킬 사용
인벤토리
struct를 이용하여 장비, 소비, 기타 를 각각 나누고 배열 형태로 Player클래스가 소유 하도록 함
장착/해제 (클릭 & 클릭) : MouseManager를 통해 클릭할 경우 해당장비 위치 값을 전달
장착/해제 (더블클릭) : MouseManager를 통해 더블클릭을 판별하고 해당장비 위치 값 전달
이동 : 기본적인 Swap을 통해 해당 위치를 교환
버리기 : 장비가 선택된 상태에서 UI를 제외한 화면을 클릭할 경우 버려지도록 구현
아이템
툴팁 : 상단, 중단부, 하단부를 나눠서 합치는 방식으로 구현
스타포스 : 장비를 스타포스레벨에 따른 확률로 강화 할 수 있도록 구현
스테이터스
스탯 : 실시간으로 스탯을 찍을 시 적용되도록 구현
자동배분 : 현재남아 있는 스탯을 모두 자기 직업에 맞는 스탯으로 전환
옵션
배경음, 효과음 : SoundManager를 통해 전반적인 값 통제
스킨, 스킨효과 : 현재 플레이하는 Player에게 데미지스킨과 효과를 설정할 수 있도록 인자 값 전달
사망
사망시에 사망 UI가 나오게 되며 확인버튼을 클릭시
나오가 나타나게 되며 일정시간 뒤에 플레이어를 회복시켜줌(스킬로 구현)
인터페이스
포커싱 : MouseManager를 통해 현재 최상단에 위치한 UI를 파악하여 클릭시에 가장 앞으로 올수 있도록 구현
드래그 : UI의 윗부분에 보이지 않는 네모박스를 통해 드래그 할 수 있도록 구현
퀘스트
플레이어가 list의 형태로 퀘스트 클래스를 소유하고 있으며
특정 행동시 플레이어가 list를 순회하며 값을 변동 시키도록 함
상점
구매 목록 : NPC는 list를 통해 특정 값을 갖고 있으며 ItemManager를 통해 해당 아이템 나열
판매 목록 : Player의 Itemlist를 순회하여 아이템 나열
스크롤 : 드래그 상태를 체크하고 현재 마우스위치에 맞는 위치로 이동후 아이템 나열
보스
낙하물 : 일정 주기로 소환
찌르기 : 플레이어가 근처에 있을경우 시전
돌진 : 플레이어와 멀어질 경우 돌진을 시전
검기발사 : 랜덤한 확률로 검기 발사를 시전
HP게이지 : 선형보간을 통해 이전 HP와 현재 HP를 비교하여 나타냄
카메라
기본적인 Culling을 통해 해당 카메라 범위 밖에 있는 오브젝트는 출력하지 못하도록 함
Alpha 값이 필요한 오브젝트의 경우 Alpha 값이 존재할 경우 GdiPlus를 사용하고
그렇지 않을 경우에는 Gdi를 이용하여 출력하도록 함
[아쉬운 점]
GdiPlus의 경우 연산이 무거워 자유롭게 사용 할 수 없었다.
Plgblt를 통해 회전을 사용하고 OBB를 이용하여 충돌처리를 해보고 싶었는데 하지 못하였다.
현재는 충돌보다는 Render의 부담이 더 크기 때문에 충돌에 부담을 느끼지 못하여
O(n^2)의 일반적인 방법을 사용하였는데 추후에 SAP 혹은 BSP를 이용하여 충돌처리를 해보고 싶다.
싱글 플레이라는 가정하에 싱글톤을 남발하여 구현을 한 경향이 있는데
만약 서버의 입장에서는 데이터를 어떻게 처리해야 할지 정답을 찾지 못해 아쉬움이 남는다.
[느낀 점]
한달 전 Winapi를 처음 접했을 시점에는 새로운 프레임워크에 당황하였고
유니티에서 쉽게 사용하던 것들을 사용하지 못하여 어려움이 있었으며
해당 기능들을 직접 구현하며 많은 것을 배울 수 있던 시간이었다.
'이것저것' 카테고리의 다른 글
| [DirectX9] 라그나로크 모작 (0) | 2022.11.06 |
|---|---|
| [MFC] 엔터더건전 에디터 (0) | 2022.07.20 |
| [컬러트레이너] 다른 색 찾기 게임 제작 (Unity) (0) | 2022.02.20 |
| [도넛 2048] 2048 게임 제작 (Unity) (0) | 2022.02.15 |
| [그림판] RLE 알고리즘 효율성 테스트 (0) | 2021.10.13 |