Stack O Bot 프로젝트 애셋을 이용해 3인칭 캐릭터 게임의 기본기를 익힌다.

 

캐릭터 블루프린트 클래스

ㄴ 어떤 skeletal mesh를 사용할 것인지

 

애니메이션 블루프린트 클래스

ㄴ 애니메이션 상태 머신

 

캐릭터 블루프린트에 spring arm과 카메라 컴포넌트 추가하기

 

캐릭터 auto possess player 속성을 player 0으로 지정하면 게임 시작할때 자동으로 attach 됨

ㄴ 어떤 playerController가 해당 캐릭터(폰)을 possess 할 것인지를 지정하는 옵션

 

Input Action & Input Mapping Context

캐릭터에 사용할 mapping, 아날로그 스틱에는 modifier로 dead zone을 추가한다.

 

캐릭터 블루프린트의 이벤트 그래프에 input 로직을 구성 (상하좌우 이동, 회전)

 

1. 카메라 구성 방법 - Over the shoulder Camera

ㄴ 3인칭 게임 fps 게임 등에서 기울이기를 하면 카메라 시점이 좌우로 이동하는 기능을 구현할 때 사용

 

action value type - digital (기울이기 키를 토글식으로 사용할 경우)

trigger pressed 설정하면 계속 누르고 있어도 한 번만 발동

 

카메라의 부드러운 감속을 위한 타임라인 노드를 추가 (카메라 위치를 blend 하기 위한 계수로 사용됨)

 

over the shoulder 카메라를 위한 이벤트 로직

 

2. 카메라 구성 방법 - Freely Rotating Camera

 

캐릭터 블루프린트 -> Use Controller Rotation Yaw 끄고

character movement 컴포넌트의 OrientRotationtoMovement 키기

spring arm의 Use Pawn Control Rotation 키기

 

MyGameMode 에 MyPlayerController 세팅해서 카메라 회전 범위를 지정할 수 있다.

 

애니메이션을 위한 블렌드 스페이스

2D 블렌드 스페이스는 파라미터 두 개, 1D 블렌드 스페이스는 파라미터 한 개

아래 예제는 Idle 애니메이션과 Run 애니메이션을 Horizontal Axis Value에 기반해 섞는다. (0 ~ 500)

애니메이션 블루프린트에서는 애니메이션 클립 대신에 블랜드 스페이스를 사용할 수 있다.

ctrl 키를 누른 상태로 마우스를 움직여 value에 따른 애니메이션을 확인할 수 있다.

 

애니메이션 블루프린트

애니메이션 블루프린트는 이벤트 그래프나 애니메이션 그래프를 사용할 수 있다.

ㄴ 블렌드 스페이스를 애니메이션 그래프에서 추가한다. 블렌드 스페이스를 제어할 값을 변수로 승격시킨다.

ㄴ 이벤트 그래프에서 이 변수를 제어하여 값을 update 해주기만 하면 된다.

ㄴ 매 틱마다 Pawn의 movement 컴포넌트의 velocity의 xy값만으로 벡터의 크기를 구하고 이 값을 변수에 저장

 

break 노드는 여러 속성을 가진 객체를 분리시킨다.

 

캐릭터의 최대 이동 속도를 블렌드 스페이스에 맞추는 작업도 필요

ㄴ 캐릭터 블루프린트 -> 캐릭터 무브먼트 -> max walk speed 속성

ㄴ 블렌드 스페이스 값의 단위가 cm/s 인 듯하다..

 

블렌드 스페이스와 상태 머신, 기울이기 구현

노드의 return value 부분을 우클릭하여 split 할 수 있다.

 

상태 머신 하나로 관리한다
상태 머신 내부의 동작들은 트랜지션으로 연결되어 있다.
각 동작 상태들은 클립 하나로 표현되거나 블렌드 스페이스로 표현될 수 있다.

 

매 틱마다 Calc Lean 함수를 호출하여 기울기 값을 얻는다. 이전 프레임의 회전 값과 현재 프레임의 회전 값을 비교하여 기울기 값을 구한다.

 

Jump 추가, Jump 느낌 수정하기

ㄴ 캐릭터의 Jump를 사용하되 캐릭터 블루프린트 -> Character Movement 컴포넌트 -> Jump 관련 속성들을 수정하여 점프의 느낌을 다르게 만들 수 있다.

 

Jump 애니메이션, 캐시 포즈

캐시 포즈를 사용하여 땅에 붙어있을때의 state machine과 점프했을 때의 state machine을 분리 시킬 수 있고, 트랜지션이 간단해진다.

 

Conduit

ㄴ 한개의 상태에서 여러 개의 상태 중 하나로 선택하여 전이함

ㄴ 트랜지션 조건에 따라 정해짐

Land에서 LandRun으로 전이될지 LandIdle로 전이될지 결정하는 변수는 MovementInput으로 정한다.

 

제트팩 추가하기

started : 최초의 trigger 발동되는 순간 한 번 호출, Completed : 트리거가 끝날 때 (키를 누르고 있다가 뗄 때)

 

Jump 이벤트의 트리거가 아닌 Started에 연결함으로써 캐릭터의 MovementMode에 따라 Jump를 할 수도 있고 Jetpack을 토글할 수도 있다.

 

매 틱마다 호출되는 UpdateJetpack 함수
인자 두개를 받아 Jetpack의 상태를 조정하는 Toggle Jetpack 함수

 

FX, SFX, 메타사운드 트리거

 

오디오 컴포넌트의  Execute Trigger Parameter 노드를 사용하면 메타사운드에서 트리거를 호출할 수 있다.

ToggleJetpack 에서 소리 재생 중(이미 활성화 된 상태)에 Deactive된 경우에는 메타사운드 에셋의 JetpackOff 트리거를 발동시켜 바로 불이 꺼지는 사운드가 들리도록 한다.

 

JetpackOff 트리거가 발동될 때 실행되는 노드들 (메타 사운드)

 

TryGetPawnOwner로 Pawn을 얻고, BP_StackBot으로 캐스팅하여 Jetpack의 활성화 여부 변수를 얻어 애니메이션 블루프린트 내의 변수인 IsHovering?을 세팅하는데 사용한다.

+ Recent posts