[UE Team Project/T.A.] 7. 아이템 및 인벤토리 - 1 (Component)
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 아이템과 인벤토리를 구현하는 방법에 대해 정리해보도록 하겠습니다. 생각보다 다룰 내용이 많아 구현 아이디어와 실제 Inventory Component의 코드를 리뷰하고 UI와 관련된 부분은 다음 포스팅에서 진행하도록 하겠습니다.구현 아이디어 설명저는 이전에 아이템과 인벤토리를 데이터 애셋을 활용해 제작해본 경험이 있습니다. 하지만 이번에는 데이터 테이블을 사용해보자는 의견이 있었고, 해당 의견에 맞춰 구현을 진행하게 되었습니다. 우선 아이템의 정보를 저장하기 위한 클래스가 필요합니다. 아이템의 이름, 아이템의 아이콘, 최대 수량 등 아이템 정보를 관리하기 위한 구조체가 필요하며, 실제 인벤토리에서는 아이템 액터를 들고있는 것이 아닌 아이템 정보인 구조체만 TArray로 관리할 예정입..
[Unreal Engine 5] AI Controller
·
Game Programming/Unreal Engine
개요이번 포스팅에서는 몬스터 AI를 구현하기 위해 필요한 AI Controller에 대해 다루어보도록 하겠습니다.Controller언리얼 엔진의 Controller는 Pawn(폰) 또는 Character(캐릭터)처럼 폰에서 파생된 클래스를 빙의(Possess)하여 동작을 제어할 수 있는 액터입니다. 크게 사람이 조종하는 폰에 사용되는 PlayerController와 AI를 구현하기 위해 필요한 AI Controller로 구분되며, 두 컨틀롤러 모두 Possess 함수를 통해 Pawn(폰)의 제어권을 획득하고, Unpossess 함수로 소유권 해제가 가능합니다. 컨트롤러는 제어중인 폰에 발생하는 다수의 이벤트를 받으며, 기본적으로 Pawn(폰)과 1:1 대응 관계를 가집니다. 즉, 각각의 컨트롤러는 하나의..
[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(좌/우..
[백준 / C++] N과 M (9)(실버2, 15663)
·
코딩테스트/백준 (Study)
https://www.acmicpc.net/problem/15663문제N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오.N개의 자연수 중에서 M개를 고른 수열입력첫째 줄에 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8)둘째 줄에 N개의 수가 주어진다. 입력으로 주어지는 수는 10,000보다 작거나 같은 자연수이다.출력한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다.수열은 사전 순으로 증가하는 순서로 출력해야 한다.예제 입력 13 14 4 2예제 출력 124예제 입력 24 29 7 9 1예제 출력 21 71 97 17 99 19 79 9예제 입..
[UE Team Project/T.A.] 2. 레벨 디자인 (Landscape / Paint / Foliage)
·
프로젝트/TimelessAdventure
개요이번 포스팅에서는 랜드스케이프를 활용해 레벨 디자인을 하는 방법에 대해 정리해보려고 합니다. 현재 진행하는 팀 프로젝트의 경우 모든 기능 구현을 팀원이 모두 구현한 뒤 가장 좋은 결과물을 채택하는 서바이벌 개념의 프로젝트지만, 레벨 디자인은 4개로 나눠 각자의 컨셉을 가지고 만든 뒤 모두 사용하기로 하였습니다. 제가 만들 레벨은 게임의 시작지점인 초원 레벨입니다.레벨 생성 및 지형 제작어드벤처 장르의 게임을 만들기 위해 회의한 결과 각각 12600 * 12600의 랜드스케이프 4개을 사용하기로 하였으며, 이를 위해 랜드스케이프를 생성해주었으며, 이후 간단히 랜드스케이프 기능을 통해 지형의 굴곡을 만들어 주었습니다. (추후 디테일이 필요할 경우 챙겨줄 예정)랜드스케이프 페인팅생성한 지형에 알맞은 텍스처..