언리얼 엔진 5 81

[언리얼 엔진 5] Blend Space 방향 전환이 부자연스러울 경우 확인할 것

보통 이동 방향에 따른 게걸음 애니메이션 블렌딩을 위해 Blend Space를 많이 사용하는데, 일반적으로 Calculate Direction 함수의 리턴 값을 -180 ~ 180 범위로 하여 방향을 담당하는 수평 축으로 사용한다. 이때 만약 캐릭터의 후방/좌측, 후방/우측 간의 애니메이션 전환이 부자연스럽다면, 디테일 패널의 Horizontal Axis 메뉴 아래에 있는 Wrap Input 항목을 체크해보자. 이 값이 true이어야지만 Direction 값이 사이클처럼 돌아가서 Direction의 한쪽 끝에서 한쪽 끝으로의 애니메이션 전환이 자연스럽게 된다. 만약 false라면, 값을 min / max 사이로 clamp하기 때문에 방향의 후방 좌측, 후방 우측 간의 전환 시 Direction이 -180..

[UE5] 블루아카이브 TPS게임 개발일지 (6) - TPS 애니메이션 (Layered Blend, Blend Space)

지금까지 조준 기능이 카메라 줌 인 부분만 구현되어있었다. 이번에는 조준한 채로 걸어다닐 수 있고, 카메라를 좌우로 돌리면 그 방향을 조준하도록 하였다.   먼저 조준한 채로 걸어다니는 애니메이션을 만들었다. 언리얼 엔진 마켓플레이스에는 에픽게임즈에서 만든 여러 애니메이션이 들어있고, 무료인 AnimStarterPack 에셋이 있다. 그 안에는 라이플을 조준한 채로 앞, 뒤, 좌, 우 4방향으로 걷는 애니메이션이 있다.현 캐릭터와 달리 권총이 아닌 라이플을 들고있는 애니메이션이기는 하지만, 필요한 것은 하체 애니메이션 뿐이므로 그것을 사용하기로 했다.    이제 플레이어의 이동 방향에 따라 4방향 애니메이션이 적절히 섞여서 재생되어야 한다.이를 위해 블렌드 스페이스를 이용하였다.   https://doc..

[UE5] 블루아카이브 TPS게임 개발일지 (5) - Mixamo Converter 사용, 구르기 구현

지난 포스트 마지막에서, 코드를 통해 직접 구르기의 움직임을 구현하기가 곤란했었다.  이 경우 루트 모션(Root Motion)을 사용할 수 있다. https://docs.unrealengine.com/5.3/ko/root-motion-in-unreal-engine/ 루트 모션언리얼 엔진의 루트 모션 애니메이션을 살펴봅니다.docs.unrealengine.com  루트 모션 애니메이션을 사용하면 애니메이션 데이터로 캐릭터 무브먼트를 제어하여 레벨에서 보다 사실적인 무브먼트를 연출할 수 있습니다. ← 공식 문서의 루트 모션에 대한 설명이다.   간단히 말해서, 캐릭터의 움직임이 애니메이션 자체에 의해 결정되도록 하는 것이다.  그런데 구르기 애니메이션에 루트 모션을 적용하려고 하니 문제점이 있었다.    ..

[UE5] 블루아카이브 TPS게임 개발일지 (4) - EActionState 추가, 근접 공격 추가

캐릭터가 어떤 무기를 들고있는지를 나타내는 ECharacterState에 더해, 현재 어떤 액션을 취하고 있는지를 나타내는 EActionState 열거형을 만들었다. 현재 EActionState 값에 따라 플레이어가 할 수 있는 행동을 정해줄 수 있다.예를 들어, 캐릭터가 구르는 중에는 조준을 할 수 없고, 근접공격 중에는 조준을 할 수 없도록 해야 한다. EActionState: 현재 캐릭터의 액션 상태를 나타냄#pragma onceUENUM(BlueprintType)enum class ECharacterState : uint8{ ECS_Unarmed UMETA(DisplayName = "Unarmed"), ECS_ArmedWithPistol UMETA(DisplayName = "Armed With P..

[UE5] 블루아카이브 TPS게임 개발일지 (3) - 툰 쉐이딩

원작의 느낌을 살리기 위해 툰 쉐이딩을 적용해보았다.툰 쉐이딩의 기본 원리는, 한 마디로 라이팅을 단순화하는 것이다. 유튜브에 좋은 튜토리얼이 있어 그대로 따라가보았다. https://www.youtube.com/watch?v=mzydOmgN7mc&t=1555s&pp=ygUPdWU1IHRvb24gc2hhZGVy    밑에 따로 빼둔 것은 특정 액터에만 툰 쉐이더를 적용할 수 있게 해주는 그래프 파츠인데, 본 게임에서는 모든 사물이 툰 쉐이딩 되기를 바라므로 사용하지 않는다. 포스트 프로세스 머티리얼의 내용물은 화면의 각 픽셀에 대해서 병렬처리된다는 점을 기억하고, 아래 내용을 보면 좋을 것 같다.영상의 아저씨가 한 것을 하나씩 살펴보자면, 먼저 SceneTexture를 2개 가져와서 Desaturatio..

[UE5] 블루아카이브 TPS게임 개발일지 (2) - 캐릭터 state 추가, 애니메이션 개선

캐릭터의 현재 상태를 나타내는 enum을 새로 만들었다. 우선 비무장 상태, 권총 무장 상태, 소총 무장 상태 3가지를 만들었다.  캐릭터의 state는 다른 여러 클래스에서 쓰일 경우가 많다. State만을 쓰기 위해서 KannaCharacter 전체를 include하는 것은 피하고 싶으므로, 별도의 헤더 파일에 state를 정의한다. 이후 KannaCharacter.h에 ECharacterState 타입 변수를 만들어주었다.UPROPERTY(BlueprintReadWrite, meta = (AllowPrivateAccess = "true"))ECharacterState CharacterState = ECharacterState::ECS_Unarmed; 이제 기존의 애니메이션 블루프린트를 state에 ..

[UE5] 블루아카이브 TPS게임 개발일지 (1) - 조준 기능 구현

개발 일지의 첫번째이지만 사실 이미 어느정도 진행이 되어있는 상태이다.(27일 전에 시작)   현재 완료 사항:캐릭터의 움직임과 카메라 회전아이템 획득 기능추락 및 착지 애니메이션사실 해당 사항들 대부분은 언리얼 엔진 5의 Third Person 템플릿에 이미 만들어져있으므로, 혹시 본 개발일지를 참고하여 언리얼 엔진 5 개발을 시작하실 분들이 계시다면 해당 템플릿을 사용하면 될 것 같다.  제목이 조준 기능 구현이지만, 사실 이미 다른 방식으로 구현한 바가 있다. Input Action의 Trigger가 Hold일 경우 해당 인풋이 들어오는 동안은 매 틱마다 콜백 함수를 호출한다는 점을 이용해 Tick 함수에서의 애니메이션 구현처럼 만들어놓았다.유니티였다면 Dotween 라이브러리나 Lerp 함수를 썼..

[언리얼 엔진 5] Collision에 대하여

언리얼 엔진 5에서 인스턴스의 Detail 패널의 Collision 항목을 보면 다음과 같다. 기본적으로 Query and Physics로 되어있는 경우가 많을 것이다. Query Only Raycast, Sweep(hit), Overlap을 탐지하여 그에 따른 작업을 처리한다. 이 3개가 곧 Query의 의미인 '질의'라고 할 수 있다. IK(지형에 따른 자세 변화) 등 레이캐스팅을 통한 처리가 가능하다. 물리적으로 힘을 가할 수는 없다. (물리학 계산을 하지 않음) 물리 시뮬레이션은 필요없지만, 충돌 등의 감지는 하고싶을 때 쓸 수 있다. Physics Only 물리학 계산을 수행하게 할 수 있음 쿼리가 비활성화되어있다면 캐릭터의 밀침 등에 의한 상호작용은 없다. 탐지(쿼리)가 필요없는 물리 시뮬레이..

[언리얼 엔진 5] Input Action에 대하여

Value Type Axis: 상대적으로 성능이 나쁘다. 프레임단위로 입력받고 계산되어야 하는 정교한 입력(이동, 카메라 회전 등), 혹은 받아들인 값을 수치로서 사용해야 하는 Input에 사용하기 적합하다. Axis1D, 2D, 3D는 각각 float, 2차원 벡터, 3차원 벡터이다. Bool: 상대적으로 성능이 좋다. 공격, 점프 처럼 일회성 입력인 경우에는 bool을 사용하는 것이 더 효과적이다. Triggers 입력받은 Input에 대한 일종의 필터링 Trigger가 할당되어있는 Input은 Trigger 조건을 통과한 뒤에야 Input으로 인정되어 처리된다. 일정 시간 이상 꾹 누르고 있기(Hold), 입력을 종료하기(Release), 아주 짧게 입력하기(Pulse) 등이 있다. Modifier..

[언리얼 엔진 5] 헤더를 include할 때 주의할 점 (+ 포워드 선언)

우선, #include "__.h"를 사용하는 것은 해당 헤더의 소스 코드 전체를 include문의 위치에 그대로 복사 & 붙여넣기하는 것과 같다.컴파일 시에 소스 코드의 include문이 해당 헤더 파일 전체로 교체되는 것이다.    주의: 헤더에 헤더를 include하는 것은 가급적 피하는 것이 좋다.  헤더 파일의 비대화헤더파일은 기본적으로 다른 여러 소스코드에서 include되어서 사용된다.만약 자기 자신이 아닌 다른 헤더를 include하는 헤더가 있다면, 그 헤더를 include하는 것은 그 헤더 뿐만이 아니라 그 헤더가 포함하고 있는 다른 헤더까지 include하는 것과 같다.예를 들어, Item.h에서 Character 타입 변수를 사용하기 위해 #include "Character.h"를 ..