포트폴리오/졸업작품

[졸작] 기능 구현 리스트

Honey Badger 2022. 12. 14. 22:13

# 졸업작품 'Strangers'는 꼭 필요한 경우를 제외하고 되도록  C++로 구현하였습니다. 

 

 

#깃허브 링크 : https://github.com/Kimsol21/UE_Strangers

 

GitHub - Kimsol21/UE_Strangers

Contribute to Kimsol21/UE_Strangers development by creating an account on GitHub.

github.com

#유튜브 링크 : https://youtu.be/NrvFqwTMVmA

 

 


 

 

< 기능 구현 List >

 

 

0. 플레이어의 입력과 기능 바인딩

   WASD(이동), 마우스 휠(카메라 Zoom), 스페이스바(점프), 마우스 클릭(공격, 콤보공격)을 입력설정에서 추가해주고, PlayerController에서 이를 바인딩 해 입력에 따른 각각의 기능을 원하는 함수로 연결해주었습니다. 

 

 

1. 카메라 Zoom 기능

    마우스 휠 입력을 바인딩해  카메라를 부드럽게 ZoomIn, ZoomOut하는 기능을 구현하였습니다. Tick함수에서 Lerp(선형보간)을 사용해 부드럽게 Zoom되도록 하였습니다.

 

 

2. 캐릭터, 몬스터, 플레이어 클래스의 제작

  MyCharacter, MyMonster, MyPlayer클래스를 제작하였습니다. 몬스터와 플레이어의 공통부분(피격처리, 데미지처리 등)을 묶어 캐릭터 클래스를 제작해 이를 몬스터와 플레이어가 상속받아 디테일을 더하는 구조로 구현하였습니다.

 

 

3. 콤보 공격 구현

   여러 애니메이션을 합쳐주고, 노티파이 등 편리한 기능을 제공하는 애니메이션 몽타주(Animation Montage)를 활용하여 콤보 공격을 구현하였습니다. 총 4개의 서로 다른 공격 애니메이션을 합쳤고, 각각의 공격 타이밍, 다음 공격이 이루어질지 체크 등을 노티파이기능을 활용해 코드와 함께 구현하였습니다. 델리게이트, 람다함수를 사용하여 코드의 편의성을 높이고 상호의존성을 낮추고자 하였습니다. 

 

 

4. 충돌체크

   콜리전 채널과 프리셋을 추가하고, SweepSingleByChannel()를 사용해 충돌여부 확인하였습니다. 구 모양이 사거리만큼 쓸고 지나가면서 오브젝트 감지하는 원리입니다. 쉽게 확인할 수 있도록 에디터 모드에서 캡슐모양으로 충돌 범위와 충돌여부 드로잉 디버깅라인을 그리고 공격 성공 시 초록색, 실패 시 빨간색으로 공격 범위가 나타나도록 구현하였습니다.

디버깅 라인 그려 충돌범위, 여부 확인

 

 

 

5. 공격 시 미세전진 기능

   공격할 때 플레이어가 조금씩 앞으로 나아가게 구현하였습니다. 부드럽게 구현하기 위해 선형보간을 사용하였습니다.

 

 

6. 아이템 박스 제작 

  아이템 박스를 제작해 원하는 무기를 넣을 수 있게 하였고, 캐릭터와 overlap 시 캐릭터에 무기를 장착하게 하였습니다. 또한 이펙트 재생 후 Destroy되도록 설계했습니다.

 

 

7. 무기 클래스 제작

  캐릭터의 소켓 시스템을 이용해 제공되는 무기 소켓에 원하는 무기를 장착가능하게 연결했으며, 향후 더 다양한 무기와 그에 따른 다양한 스텟(사거리, 공격력)등을 CSV파일로 정리해 추가할 예정입니다. 

 

 

8. CSV파일 불러오기

  플레이어와 몬스터의 스탯정보를 기획하고 벨런싱 해 엑셀에 정리하였고, 이를 CSV로 저장 후 언리얼에 임포트 했습니다. 또한 각각의 열 데이터에 맞게 구조체를 만들어 DataTable을 이용해 불러오도록 하였습니다.

CSV를 언리얼에 임포트

 

 

9. 캐릭터 스탯 제작

   캐릭터에 부착해 레벨에 따라 자동으로 스탯(CSV파일을 받아온 Data)이 상승하도록 하였습니다.   

 

 

10. 몬스터 머리 위 HP바 제작

   Widget UI와 스탯 연동하여 Monster의 HP바 제작. 델리게이트를 선언하여, HP에 변화가 생길 시 해당 델리게이트를 BroadCast해 바인딩 되어있는 모든 함수가 호출되도록 구현하였습니다. 

 

 

11. 몬스터 AI 제작

  언리얼에서 제공하는 비헤이비어 트리(Behavior Tree)모델을 활용해 몬스터 AI를 제작하였습니다. 

BT모델

일정 틱마다 Detect를 통해 Target 감지를 시도합니다. 

- 만약 Target 감지 시 공격범위안에 Target이 들어왔는지(IsInAttackRange) 검사하고 들어왔다면 플레이를 향해 Turn하며 동시에 공격합니다. 만약 공격범위 내에 감지되지 않는다면 계속해서 Target을 향해 Move합니다.

- 만약 Target이 감지되지 않는 경우 3개의 시퀀스를 반복적으로 시행합니다. 2.5초 대기 후 다음 정찰 위치를 정하고 그곳으로 이동합니다. 정찰 위치는 원래 자신의 본거지에서 일정 범위 내로 잡습니다.

 

 

12. 애니메이션 블루프린트 제작

  스테이트 머신, 몽타주 등의 기능을 활용해 플레이어와 몬스터의 애니메이션 블루프린트를 제작하였습니다. 걷기, 공격, 콤보공격, 죽음, 피격, 점프 등의 애니메이션을 구현하였습니다. 또한 AnimInstance 클래스를 만들어 애니메이션 재생에 필요한 각종 데이터 isDead, PlayerVelocity 등을 관리하도록 했습니다. 

 

 

13. 파티클 재생

  피격, 사망, 아이템 획득 등에 파티클을 붙였습니다. 향후 레벨업, 걷기, 스킬 등 좀 더 다양한 곳에 이펙트를 붙여 생동감 넘치는 게임을 만들어 볼 생각입니다.

 

 

14. 캐릭터 UI 제작

   캐릭터 UI를 스탯 데이터와 WidgetUI를 활용해 제작하였습니다. 경험치, HP, 레벨이 실시간으로 변화하는 모습을 볼 수 있습니다. 스킬 쿨타임, 포션과 ProgressBar의 보간은 향후 구현할 예정입니다. 

메인 UI 구현 내용

 

 

15. 몬스터 종류

  CSV파일로 몬스터 종류와 그에 따른 이동속도, 공격력, 잡을 시 획득 경험치 등을 다르게 적용시켰습니다. 각각의 몬스터는 블루프린트를 활용해 다른 스태틱메쉬와 ID를 적용시켜주었고, 각각의 몬스터에 부착되어있는 MonsterStatComponent에서 ID(블루프린트에서 받아온)를 이용해 각 스탯을 적용시켜주도록 했습니다. 

블루프린트로 만든 각 몬스터
몬스터 CSV파일

 

 

 

 

 

 

# 겨울방학 업데이트 목표

1. 카메라 쉐이킹, 넉백을 통해 좀 더 타격감있고 재미있는 액션을 보여주기.
2. 몬스터AI 구체화, 몬스터 Boss 구현 .
3. 인벤토리 만들기.
4. 스킬 구현.
5. 퀘스트, 다이얼로그 시스템 만들기.
6. 코드 좀 더 정리하고 구조화시키기.