본문 바로가기

개발/내일배움캠프

02/03 애니메이션 블루프린트와 블렌드 스페이스 등

애니메이션 블루프린트를 이용해 캐릭터(폰)에 애니메이션을 지정하고 조건에 따라 출력 변경등을 다뤄봄

 

 

애니메이션 블루프린트 사용하도록 설정하는 방법은 캐릭터 블루프린트-디테일패널의 애니메이션-애님 클래스에서 지정

 

 

 

녹색은 애니메이션 시퀀스, 주황색은 블랜드스페이스

 

블랜드 스페이스 사용하기

블랜드 스페이스는 특정 값에 따라 여러 애니메이션 간의 연결을 부드럽게 해줌.

기본모션과 달리는 모션을 자연스럽게 하기위한 블랜드 스페이스 BS_RunWalk를 생성하고 아래처럼 설정함.

세로축은 속도를 사용예정이므로 Speed로 설정.

세로축 값이 0일때는 Idle애님을, 500일때는 Run모션을 설정함.

이때 0초과 500미만일때는 값에 따라 Idle모션과 Run모션 사이정도의 움직임으로 천천히 움직이게됨

 

이후 이벤트 그래프에서 해당 블랜드 스페이스를 사용하도록 지정

아까 설정된 가로세로축 None, Speed를 필요로 하는걸 볼 수 있는데, None은 이름대로 사용을 하지 않으므로 미설정

Speed는 변수 Speed를 Float로 생성후 연결.

이제 Speed값을 만들고 설정해주어야 함,

 

 

애니메이션 블루프린트 이벤트 그래프에서 속도 가져오기

이벤트 그래프에서 에서 캐릭터(폰)의 앞뒤좌우 이동값을 가져와 변수 Speed에 세팅 점프를 제외한 이동이므로 z는 사용하지않음

이후 Event BlueprintUpdateAnimation에 연결하여 적용함, 단 처음에 부모객체가 Valid한지 매번 체크를 한 뒤에 넘어가도록 함.

 

결정된 Speed변수값을 블랜드스페이스에 연결하고 애니메이션에 연결함.

플레이어의 속도에 따라 Idle 애니메이션에서 천천히 Run모션으로 변경되고, 속도에 따라 Run모션의 재생속도또한 달라짐.

 

블랜드 스페이스 대신 State Machine사용하기

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/state-machines-in-unreal-engine

애니메이션블루프린트 애님그래프에서 위처럼 설정한 블랜드스페이스를 제거하고

우클릭-애니매이션-스테이트머신 생성후 연결

이후 New State Machine을 더블클릭하여 이동.

 

우클릭-스테이트 추가를 통해 Idle과 Run을 생성하고 아래처럼 연결함

각각의 스테이트는 더블클릭하면 Output Animation Pose가 존재하는데 여기에 해당 State일때 출력될 애니메이션을 지정해주면 된다

 

State를 생성하는대신 그냥 애니메이션을 드래그드랍하고 이름을 바꿔도 상관없다

 

이는 초기상태에서 Idle로 변경되고 트랜지션 룰(Idle과 Run사이 서로를 가리키는 선)에 따라 서로 변경되도록 연결함

이후 위아래의 아이콘을 눌러 트랜지션 룰의 내용을 설정

 

Idle에서 run이 되는 조건은 속도가 0이 아닐때, Run에서 Idle이 되는 조건은 속도가 0일때로 아래처럼 설정하면 됨.

이제 컴파일 후 실행해보면 움직임에 따라 애니메이션이 즉각 반영된다. 

 

점프 애니메이션 연결하기

애니메이션블루프린트의 이벤트 그래프에 내용 추가

캐릭터의 무브먼트 컴포넌트를 가져와서 Is Falling값을 가져와 변수 IsInAir에 할당하는 내용을 추가함.
기존 움직임 부분과 깔끔한 정리를 위해 Sequence를 추가함

 

스테이트머신 내용 추가

스테이트 에일리어스:Idle/Run과

스테이트 Jump, Fall, Land를 추가하고 위처럼 분기를 추가함.

 

스테이트 에일리어스?

스테이트 에일리어스는 특정 State에서 다른 상태로 트랜지션이 가능할 경우 이를 분리해서 표현할 수 있도록 도와주는 노드이다.

만약 위 그림에서 스테이트 에일리어스가 없다면 Idle, Run상태모두에서 각각 Jump와 Fall로 이동할수 있는 트랜지션을 연결하여 그림이 복잡해졌을텐데 이를 깔끔하게 만들 수 있도록 해준다.

없어도 기능구현은 되지만 안쓸 이유가없는 기능

공식문서의 내용을 가져오면 에일리어스를 쓰고 안쓰고는 이런 시각적 차이를 만듬

가독성 차이가 매우 큼

 

 

다시 돌아와서

스테이트 에일리어스 Idle/Run은 Idle과Run상태를 지정함. 이러면 Idle과 Run상태에서 다른 노드로 트랜지션이 가능.

위 노드의 세부 설정:

Jump 또는 Fall로 가는 트랜지션 룰은 IsInAir가 True일때,

Jump에서 Fall로 가는 트랜지션 룰은 선택후 디테일 패널에서 "스테이트의 시퀀스 플레이어에 따른 자동 규칙"에 체크
이 기능은 앞선 노드의 애니메이션이 종료되면 연관된 다음 노드로 이동하도록 하는 기능이다.

Fall에서 Land로 가는 트랜지션 룰은 IsInAir이 False일 때. 즉 땅에 닿았을 때.

그리고 Land는 ~~자동 규칙으로 Idle 상태로 돌아가도록 한다.


오늘의 퀘스트 - 레벨 생성 및 기본 오브젝트 배치

[Step 1] 새 레벨 만들기

언리얼 에디터에서 File → New Level → Basic 선택

레벨 저장: MyFirstLevel이라는 이름으로 저장

[Step 2] 바닥 만들기

Place Actors 패널에서 Cube 선택

바닥 역할로 사용할 큐브를 배치하고 Scale을 아래처럼 조정

X: 20, Y: 20, Z: 0.5

[Step 3] 벽 만들기

Cube를 4개 더 추가해서 네 방향에 벽처럼 배치

각 벽은 높이(Z)를 3.0, 길이(X 또는 Y)는 20으로 설정

벽으로 사용된 큐브는 4개

각각의 트랜스폼 값은

950,0,175 | -950,0,175 | 0,950,175 | 0,-950,175인데 엑터의 피벗 위치가 중심점이기 때문에 계산이 조금 귀찮음.

 

[Step 4] 오브젝트 배치 연습

테이블이나 의자처럼 보이도록 작은 큐브를 만들어 배치

다양한 Mesh(예: Cylinder, Sphere)로 오브젝트 감각 익히기

테이블? 큐브하나랑 실린더 하나만 일단 붙임 보기힘들어서 바닥에 아무 매터리얼 넣어봄

[Step 5] 카메라 시점 바꾸기

뷰포트 조작 (마우스 우클릭 + W/A/S/D)으로 공간 둘러보기

오브젝트 위치와 크기 확인, 어색하면 수정해보기

 

 

 

 

 

배치하면서 흥미로웠던 점?

PlayerStart 액터의 콜리전이 바닥이 되는 큐브와 겹쳐 있으니 BADsize라고 경고를 보여줌

바닥에 겹치지 않도록 위치를 조정해주니 사라졌음