프로그래밍 공부
작성일
2024. 1. 11. 16:02
작성자
WDmil
728x90

언리얼에서 블렌드 스페이스를 활용하여, 케릭터 애니메이션을 적용해보자.

 

우선 블루프린터 Player와 애니메이션 블루프린터의 차이점을 알아야 한다.

 

각각 Class형태로 운영되는 한개의 코드뭉치인건 같으나,

 

블루프린트는 object의 움직임, 행동, 연산처리 자체에 관여하는 코드뭉치이고

 

Animation BluePrint는 메쉬에 해당되는 본 데이터를 DeltaTime에 연관하여 일정 규칙을 가지고 움직이게 하는것 이다.

 

여기에서 우리는 언리얼의 강력한 기능중 하나인 블렌드 스페이스를 활용하여 애니메이션 셋을 구축할 것 이다.

 


블렌드 스페이스 만들기

콘텐츠 브라우저에, 블렌드 스페이스를 저장할 폴더를 만들고,

 

해당 폴더의 빈공간에 오른쪽 마우스 클릭을 하여 에니메이션-> 블렌드 스페이스 로 들어간다.

 

해당되는 블렌드 스페이스로 들어가면 다음과 같은 UI창을 볼 수 있다.

여기에서 우리가 사용할 스켈레톤 메쉬를 선택해서 애니메이션을 움직이게 할 것 이다.

 

이렇게 지정하여 사용하는 이유는, 본 데이터가 각 메쉬마다 다를 수 있기 때문이다.

 

다른 본, 즉. 데이터의 사이즈가 다른 배열에 없는 본 정보를 참조하려고 하면, 프로그램이 터지기 때문이다.


블렌드 스페이스 다루기

위와같은 창이 보이면 성공이다.

 

우리는 스켈레톤 메쉬에 애니메이션을 블랜드하여 기입할 것 이다.

 

1D는, 가중치가 한개인 에니메이션 보간작업을 진행한다는 의미이다.

 

왼쪽에 Axis Settings에서 내가 사용하려는 데이터의 이름, 최대 최소 사이즈를 지정할 수 있다.

 

우리는 달리기와 걷기 Idel을 사용할 것 임으로, number of를 3개. min은 그대로 두고 Max만 600으로 설정하자.

위와같이 설정하면 된다.

그리고 그 이후는 매우 쉽게 사용할 수 있는데,

 

그냥 오른쪽 에셋 브라우저에서, 사용할 애니메이션을 드래그해서 Speed 칸 안에 넣어주면 된다.

위와같이 드래그해서 놓아주자.

 

사용할 애니메이션은 idel과 Run Walk이다.

배치한 애니메이션은 저 마름모를 눌러서 드래그하여, 위치를 변경할 수 있다.

위와같이 배치하였으면, 초록색 마름모가 눈에 띌 것이다.

 

초록색 마름모를 좌우로 드레그 해주면 캐릭터가 뛴다! 걷는다!.

 

즉, Speed축에 비례하여 최대 600까지의 값을 3칸으로. 4축으로 분할하고.

4축으로 분할된 애니메이션 분할구간에 배치한 대기모션, 걷는모션, 달리는모션

 

의 3가지를 해당 축에 배치하여 Speed가 해당지점에 도착했을 때, 애니메이션을 바꾸어주는 것 이다.

 

애니메이션 블랜드를 통해 우리는 3개의 애니메이션을 넣었지만, 중간중간. 걷는듯 뛰는, 천천히 걷는. 살금살금 걷는.

등의 에니메이션 효과를 모두 누릴 수 있다.

 

 

위와같이 움직이면 된다.


애니메이션 블루프린트(ABP)

 

이제 블랜딩된 에니메이션을 만들었으니 이 블랜딩 에니메이션을 사용해보아야 하지 않겠는가.

 

애니메이션을 직 간접적으로 적용시켜주는 블루프린트를 만들어보자.

콘텐츠 브라우저->오른쪽클릭->에니메이션->애니메이션 블루프린트

위와같이 클릭했으면 다음과 같은 UI가 나를 마주본다.

 

우리는 이미 C++을 사용하면서 상속과 비상속, 부모자식 Class에 대해 이해하였다.

 

위의 상속은. 어떤 블루프린트를 바탕으로 이 코드를 수정. 제작 하겠는가? 라고 물어보는 것 이다.

밑의 타깃 스켈레톤은.

 

이 애니메이션 블루프린트가 어떤 스켈레톤을 움직이게 할 것 인가 를 지정한다.

지정한다면 그 스켈레톤만 움직이게 할 수 있다.

위와같이 지정해준뒤 확인을 누른다.

 

 

이름은 대충 ABP_Player라고 짓자.


애니메이션 블루프린트 다루기

ABP UI창

위와같은 창이 나를 반겨준다면 성공이다.

 

여기에서 애니메이션 블루프린트를 수정해보자.

 

오른쪽 하단에 에셋 브라우저가 보이는가?

 

여기에서 우리가 만든 블렌드 스페이스를 드래그해서 놓아준다.

그리고, Result부분을 드래그해서 이어 연결해준 뒤 좌측상단의 컴파일을 눌러주면 다음과 같이된다.

 

저기 Speed가 보이는가?

 

저 Speed값이. 현재 재생할 에니메이션의 블랜딩된 값을 의미한다.

 

저 Speed값을 변경하면 케릭터가 달리거나 걷는걸 볼 수 있다.

 

이걸 만들었으면 이제, ABP와 BP를 연결해서

 

애니메이션 블루프린트가 어떤 블루프린트의 객체를 움직여야 하는지 알려주자.

 

보통, 상속관계 상. BP가 ABP를 소유하는 형태로 이루어짐으로. BP로 이동하자.

BP에서 우리가 애니메이션을 적용해야할 객체는 메쉬 임으로

 

메쉬를 클릭하면, 애니메이션을 선택하라고 친절하게 나타난다.

 

여기에 우리가 만들었던 ABP를 지정해준다.

그러면 이제 ABP에서 BP를 참조할 수 있게 되었다!

 

여기에서 위와같이 설정하면 우리가 데이터를 연결하였는지 아닌지를 확인할 수 있다.

 

객체가 NULL로 나타나면,  연결이 안되었다는 의미이고. 어떤 pointer가  Not Null이면 연결되었다는 의미이다.

 

이제 이걸 활용해서 스피드를 구해보자.

먼저 블르푸린트에서 변수를 만든다.

 

우선 블루프린트, ABP에서 사용할 Speed변수를 만들어준다.

해당 변수를 사용해서 현재 Mesh의 속도를 저장할 것 이다.

여기에서 Speed를 구해보자.

 

현재 Pown의 Owner를 반환하는 TryGetPawnOwner를 사용해서 Character를 가져온다음,

 

해당 Character에 Velocity를 연결하고, 해당 가속도의 DeltaTime시간상 이동거리를 Speed로 대입해주면 된다.

 

그러면 움직일 때 달리기를 사용한다!

 

728x90