[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 Project / FruitsPuzzle] 2. Tile & Texture Manager
·
프로젝트/FruitsPuzzle
개요이번 포스팅에서는 퍼즐의 기본이 되는 타일과, 타일에 입혀지는 텍스처를 관리하기 위한 텍스처 매니저에 대해 정리해보도록 하겠습니다.Tile 구현 아이디어타일은 개별적으로 생성되며, 생성과 동시에 타일의 타입과 인덱스를 지정받아 현재 자신의 타입에 따라 텍스처를 업데이트하도록 만들고 싶었습니다. 일반적으로 생각했을 때, 타일에 Texture의 배열을 만들고 현재 타일의 타입에 따라 배열에서 값을 선택해 적용시켜줄 수 있지만, 타일의 개수가 많아지게 되면 굳이 중복되는 불필요한 데이터(타일별 Texture배열)를 가지게 됩니다. 즉, Texture를 관리하는 Manager 클래스를 만들어 시작과 동시에 Texture Manager에 접근해 빠르게 원하는 Texture만을 뽑아오게 만들었습니다. 다음으로는..
[UE Project / FruitsPuzzle] 1. 프로젝트 개요
·
프로젝트/FruitsPuzzle
개요안녕하세요, 이번 포스팅에서는 청년취업사관학교(SeSAC)에서 수강한 언리얼 엔진 과정 1Day 개인 프로젝트에 대해 이야기해보겠습니다.프로젝트 개요 및 특이점이번에는 네트워크 수업으로 넘어가기 전 넥토리얼 및 넷마블 등등 여러 인턴을 준비하는 시간에 맞춰 간단히 하루동안 코딩실력에 도움이 되는 퍼즐 게임을 제작하게 되었습니다. 강사님이 요구하신 프로젝트에 포함되어야 할 기획은 다음과 같습니다. 위 기획을 바탕으로 10/14 ~ 10/15일 하루간 열심히 작업한 결과물에 대해 앞으로 정리해보고자 합니다.
[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로 관리할 예정입..