[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로 넘기는 방식으로 콤보를 자연스럽게 이어갈 수 있습니다. 제가 구현..
[UE Team Project/T.A.] 4. 플레이어 달리기 / 구르기 구현
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 CombatComponent(전투)와 함께 구르기, 달리기 기능을 정리해보도록 하겠습니다. CombatComponent 구조 설명CombatComponent는 전투와 관련된 기능을 모아둔 컴포넌트입니다. 프로젝트 기획상 데쉬와 구르기 동작은 스테미너를 소모하고, 스테미너가 다 떨어졌다면 더이상 수행하지 못하는 동작입니다. 이를 구현하기 위해 스테미너와 관련된 모든 전투 요소들을 CombatComponent에서 구현하게 되었습니다. 전체적인 행동을 FSM 방식으로 관리하기 위해 상태를 구분하기 위한 열거형을 사용했습니다.달리기 기능 구현우선 입력을 받기 위한 IA_Dash와 이에 바인딩될 함수를 InputComponent에서 구현해주도록 합니다. InputComponent.h더보기....
[UE Team Project/T.A.] 3. 플레이어 입력 및 기본 이동 (EnhancedInput)
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 이동기능을 추가한 플레이어를 제작한 방법에 대해 정리해 보겠습니다. 시작하기 앞서, 서바이벌 개념의 프로젝트이기에 모든 기능들을 전부 컴포넌트 형식으로 제작해보자는 의견이 나왔고, 입력과 기본 이동 등을 컴포넌트로 빼서 구현해본 경험이 없기에 구조가 약간 난잡할 수도 있습니다.플레이어 - 향상된 입력 (EnhancedInput) 기본 설정플레이어 입력 방식은 기존의 입력 방식이 아닌 향상된 입력을 사용하기로 했습니다. 우선 향상된 입력을 사용하기 위해서는 bulid.cs 파일에 "EnhancedInput" 모듈을 추가해줘야 합니다.에디터에서 사용할 InputMappingContext와 InputAction을 제작해주도록 합니다. IA_Move는 기본적으로 WS(전/후), AD(좌/우..
[UE Team Project/T.A.] 2. 레벨 디자인 (Landscape / Paint / Foliage)
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 랜드스케이프를 활용해 레벨 디자인을 하는 방법에 대해 정리해보려고 합니다. 현재 진행하는 팀 프로젝트의 경우 모든 기능 구현을 팀원이 모두 구현한 뒤 가장 좋은 결과물을 채택하는 서바이벌 개념의 프로젝트지만, 레벨 디자인은 4개로 나눠 각자의 컨셉을 가지고 만든 뒤 모두 사용하기로 하였습니다. 제가 만들 레벨은 게임의 시작지점인 초원 레벨입니다.레벨 생성 및 지형 제작어드벤처 장르의 게임을 만들기 위해 회의한 결과 각각 12600 * 12600의 랜드스케이프 4개을 사용하기로 하였으며, 이를 위해 랜드스케이프를 생성해주었으며, 이후 간단히 랜드스케이프 기능을 통해 지형의 굴곡을 만들어 주었습니다. (추후 디테일이 필요할 경우 챙겨줄 예정)랜드스케이프 페인팅생성한 지형에 알맞은 텍스처..
[UE Team Project/T.A.] 1. 팀 구성 및 프로젝트 초기화
·
프로젝트/TimelessAdventure
개요안녕하세요, 이번 포스팅에서는 청년취업사관학교(SeSAC)에서 수강한 언리얼 엔진 과정 2번째 팀 프로젝트에 대해 이야기해보려 합니다.프로젝트 개요 및 특이점이번 프로젝트는 'TimelessAdventure' 라는 어드벤처 장르의 자작 게임을 만드는 것이 목표로 했습니다. 특이한 점은 4명이서 같이 하는 팀 프로젝트지만 모든 작업을 팀원과 경쟁하는 구도로 구현하며, 잘 된 결과물을 하나 선택하여 합쳐야 하는 서바이벌(?) 프로젝트라는 점입니다. 즉, 누가 잘할지 모르니 모두 타인의 코드와 자신의 코드를 명확하게 해석해야 하며, 최대한 컴포넌트 기반의 기능 구현으로 합치는 과정에서 문제가 생기지 않도록 해야하는 신기한 프로젝트를 진행하게 되었습니다.게임 흐름 차트시간을 중심으로 꿈에서 탈출하기 위한 모..
[UE Team Project/Issac 3D] 5. 프로젝트 마무리 (최종)
·
프로젝트/Isaac 3D
정리청년취업사관학교(SeSAC)에서의 첫 C++ 프로젝트를 마무리 짓게 되었습니다. (08.27 - 09.05) SeSAC의 가장 큰 장점 중 하나가 이렇게 공부한 내용을 즉시 적용해보라는 의미로 짧은 기간의 프로젝트를 랜덤한 팀으로 구성해서 진행해보는 것이라고 생각합니다.  전체 기간은 2주일 정도지만, 저는 개인적인 일정으로 인해 2일 늦게 시작하게 되어 약 1주일간 목표했던 부분에 대해 구현하는 시간을 보냈으며, 팀원들 중 협업을 처음 경험해보시는 분들이 많아서 많은 사건 사고가 있었던 1주일이라고 생각합니다. 개인적으로 전체 프로젝트를 진행하며 아쉬웠던 점을 정리해보면 다음과 같습니다.원작 게임이 2D 기반의 게임이라 3D 모델 및 애니메이션을 구할 수가 없었다.N x M의 크기를 동적으로 생성할..