[UE Team Project/T.A.] 13. 프로젝트 마무리 (최종)
·
프로젝트/TimelessAdventure
정리청년취업사관학교(SeSAC)에서의 두번째 C++ 프로젝트를 마무리 짓게 되었습니다. (09.11 - 10.08) 이번 프로젝트는 개발 실력 향상을 위해 모두가 같은 코드를 작업하고 잘된 것을 뽑아 취합하는 특이한 프로젝트였습니다. 모두가 같은 내용을 작업하다 보니 결국 전체 프로젝트를 혼자 만드는 것과 비슷한 개발 시간이 필요했으며, 이를 위해 일정 관리가 필수적이였습니다. 노션을 통해 간트 차트를 제작하여 나름 열심히 관리한다고 해보았지만, 다른 팀원분들은 거의 처음 해보는 작업이 대다수였기에 예상 작업 시간을 정확히 예측하지 못해 일정이 지연되었고, 결국 완성된 제 결과물을 대부분 사용하게 되었습니다. 마지막으로 프로젝트를 진행하며 아쉬웠던 점을 정리해보면 다음과 같습니다.작업 인원/기간에 비해 ..
[UE Team Project/T.A.] 11. Boss AI
·
프로젝트/TimelessAdventure
개요지금까지는 전부 팀원 개개인별로 같은 내용을 제작하고, 가장 좋은 결과물을 뽑는 방식으로 진행했습니다. 하지만 프로젝트 기한이 얼마 남지 않은 시점에서, 팀원들 전부 구현을 마무리짓지 못해 제가 만든 코드만 사용하다 보니,, 개인 프로젝트가 될 것 같아 이후부터는 작업을 나눠 진행하게 되었습니다. 남은 부분은 몬스터(일반 몬스터, 보스 몬스터), 기믹(시간 정지, 그랩)이며 팀원들이 선택하지 않은 보스 몬스터를 제가 맡아 구현하게 되었습니다. 그래서 이번 포스팅에서는 보스 몬스터에 대해 정리해보도록 하겠습니다.보스 구현 아이디어 설명학원 수업에서는 AI와 관련된 부분을 블루프린트로 진행했지만, 몬스터를 처음 작업해보기에 C++을 활용해 Task, Service, Decorator 노드 등을 제작해 볼..
[UE Team Project/T.A.] 10. 무기 교체 (CombatComponent, UI)
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 여러 종류의 무기를 교체하는 방식에 대해 정리해보도록 하겠습니다.구현 아이디어 설명포스팅에서 다루지는 않았지만 무기는 총 4종류(맨손, 검, 활, 횃불)가 존재하며, 프로젝트 기획에서 무기는 장비 창을 통해 교체하는 것이 아닌 위젯을 띄워 선택된 위젯을 바탕으로 교체되도록 만들기로 하였습니다. 생각해낸 아이디어는 무기 교체 버튼을 누름과 동시에 위젯을 화면에 띄우고 마지막으로 마우스 Hover 이벤트를 받았던 무기로 교체하는 것입니다. 즉, 주먹/검/활/불 칸을 버튼으로 제작하고, Hover 이벤트 발생 시 위젯에 마지막으로 들어온 버튼이 무슨 버튼인지 체크하며 이후 해당 값에 따라 실제 무기를 교체하는 방식으로 제작하게 되었습니다.Combat Component 무기 교체 로직 구현..
[UE Team Project/T.A.] 9. 아이템 및 인벤토리 - 3 (UI - Inventory)
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 이전 포스팅에 이어 실제 Slot을 사용한 Inventory 위젯을 제작해보도록 하겠습니다.Inventory 디자인 이전 포스팅에서 제작한 Slot을 가로 / 세로 박스에 넣고, 소비 / 기타창을 구분하기 위한 버튼과 골드량을 추가하였으며, 슬롯의 경우 해당 칸 수에 따라 인덱스를 저장해주었습니다.Inventory Wiget (C++)기존에는 meta = (BindWidget) 키워드를 통해 각각의 위젯을 코드와 바인딩시켰으나, 이와 같이 반복되는 위젯의 양이 많은 경우 하나씩 추가해서 관리하는 것보다는 다음과 같이 TArray를 통해 묶어서 관리하는 것이 편하다고 생각하였습니다. 이제 모든 슬롯들을 런타임 도중 찾아서 해당 배열에 추가해야 했으며, WidgetTree를 통해 모든 ..
[UE Team Project/T.A.] 8. 아이템 및 인벤토리 - 2 (UI - Slot)
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 이전에 만든 인벤토리를 UI에 띄우는 방법에 대해 정리해보도록 하겠습니다.Slot 구조 및 디자인Slot은 실제로 상점, 인벤토리, 퀵슬롯에 사용되는 슬롯을 위한 클래스입니다. 이전 포스팅에서 제작한 인벤토리나 상점에서 데이터를 가져오기 위해 슬롯은 자신의 Owner를 알아야 하며, 이를 위해 Custom Widget 클래스를 간단히 제작하였습니다. Slot 클래스는 Custom Widget 클래스를 상속받았으며, 슬롯의 주인과 타입에 따라 정보를 가져와 반영해줘야 합니다. 디자인은 심플하게 배경, 아이템 아이콘, 수량으로만 다음과 같이 구성하였습니다. 우선 디자인했던 위젯을 C++에서 바인딩해주고, 추가적인 정보를 선언해주도록 합니다. 슬롯의 타입과 인덱스는 인벤토리와 같이 여러 ..
[UE Team Project/T.A.] 7. 아이템 및 인벤토리 - 1 (Component)
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 아이템과 인벤토리를 구현하는 방법에 대해 정리해보도록 하겠습니다. 생각보다 다룰 내용이 많아 구현 아이디어와 실제 Inventory Component의 코드를 리뷰하고 UI와 관련된 부분은 다음 포스팅에서 진행하도록 하겠습니다.구현 아이디어 설명저는 이전에 아이템과 인벤토리를 데이터 애셋을 활용해 제작해본 경험이 있습니다. 하지만 이번에는 데이터 테이블을 사용해보자는 의견이 있었고, 해당 의견에 맞춰 구현을 진행하게 되었습니다. 우선 아이템의 정보를 저장하기 위한 클래스가 필요합니다. 아이템의 이름, 아이템의 아이콘, 최대 수량 등 아이템 정보를 관리하기 위한 구조체가 필요하며, 실제 인벤토리에서는 아이템 액터를 들고있는 것이 아닌 아이템 정보인 구조체만 TArray로 관리할 예정입..
[UE Team Project/T.A.] 6. 원거리 공격(활) 구현 / 에임 오프셋
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 활을 사용한 원거리 공격을 구현하는 방법에 대해 정리해보도록 하겠습니다.구현 아이디어 설명우선 가장 중요한 것은 활입니다. 활 자체에 애니메이션이 있는 애셋도 있지만, 직접 IK를 통해 플레이어의 오른손 위치를 강제로 맞춰주다 보니 애니메이션이 약간 어색하게 보여서 결국 플레이어의 손에 활 시위(joint5 bone)를 맞추는 방식으로 구현하게 되었습니다. 여기서 가장 중요한 것은 활 시위가 당겨졌다가 원래 위치로 돌아가야 한다는 점입니다. 즉, 위 이미지와 같이 joint5는 플레이어의 손에 부착시켜준다고 해도, 화살을 발사할 때 활 시위가 다시 원래 위치로 돌아와야 하므로, 시작과 동시에 joint5 소켓의 Local Transform을 저장해야 한다는 의미입니다. 쉽게 전체 로..
[UE Team Project/T.A.] 5. 콤보 공격
·
프로젝트/TimelessAdventure
개요원래는 모든 구현 과정을 블로그로 정리하려고 했지만, 10.08일 최종 발표이며, 아직 구현하지 못한 기능이 많고 빠르게 기능 구현을 진행하다 보니 이미 정리했던 부분과의 차이가 너무 벌어지게 되었습니다. 그래서 이번 포스팅에서는 콤보 공격의 구현 아이디어와 로직을 중점으로 정리해보도록 하겠습니다. 콤보 공격 구현 아이디어콤보 공격은 AnimMontage를 사용해 구현할 수 있습니다. 우선 여러 ComboAttack 애니메이션을 구한 뒤 하나의 몽타주에서 섹션을 나눠 섹션간의 연결을 끊어주도록 합니다. 위와 같이 구성하게 되면 Combo1의 공격 모션이 종료되면 콤보 공격을 위해 JumpToSection() 함수를 사용해 Combo2로 넘기는 방식으로 콤보를 자연스럽게 이어갈 수 있습니다. 제가 구현..