본문 바로가기

언리얼엔진

12. 속력에 따른 Walk to Run / Weapon 만들기

속력에 따른 이동 애니메이션 출력하기

속력에 따라서 Idle - Walk - Run의 애니메이션이 나오도록 할 것이다.

콘텐츠 브라우저에서 콘텐츠/Mannequin/Animations 폴더 안에 새 애니메이션를 추가해줄 것이다.

우클릭을 통해서 애니메이션 - 블렌드 스페이스1D를 추가해준다.

스켈레톤은 항상 사용하던 Mannequin_Skeleton을 선택해준다.

Animation 폴더 안에서 블렌드 스페이스1D 추가하기


이름을 BS_Unarmed로 설정해주고, BS_Unarmed의 블루프린트로 들어가준다.

블렌드 스페이스 1D의 블루프린트 화면

여기서 사용할 것은 좌측의 에셋 디테일 탭의 Axis Settings 이다.

Axis Settings의 가로 축이 캐릭터가 보이는 뷰 포트탭 밑에 보이는 탭을 말하고 있다.

좌측 끝은 0.0 / 우측 끝은 100.0을 나타내고 있으며, Shift를 누르고 마우스를 올리면 초록점이 같이 움직인다.

(마우스 클릭으로도 움직여짐)

 

이제 Axis Settings의 가로 축 세팅값을 바꿔보자.

- Name : Speed

- Maximum Axis Value : 600.0

- Number of Grid Divisions : 2

Axis Setting 값을 바꾸면 탭 안의 내용도 바뀌는 것을 볼 수 있다.

이제 해당 축에 Idle, Walk, Run 애니메이션을 넣어줄 것이다.

Idle은 속력 0.0에 위치 / Walk는 속력 300.0에 위치 / Run은 속력 600.0에 위치하도록 끌어다 놓아주면 된다.

그리고 축의 초록점의 위치를 옮겨보면 현재 속력에 맞게 애니메이션이 Blend되서 나오는 것을 볼 수 있다.


이렇게 만든 BS_Unarmed를 ABP_Character에 넣어보도록 하자.

ABP_Character/Locomotion에서 기존에 만들었던 그래프 중 Idle, Run, IsFalling 노드들을 지워버리고,

BS_Unarmed를 추가해준 뒤 트랜지션 룰을 연결해준다.(트랜지션 룰은 저번에 했던 그대로 조건을 만들어줌)

BS_Unarmed로 변경

 

그리고 BS_Unarmed 내부에서는 Speed 변수를 넣어주어야 하므로 Get Speed 노드를 추가하고 연결해준다.

Speed 값을 받아와서 해당 속력에 맞는 애니메이션이 Blend되어 출력된다.

 

이제 실행해보면 잘 나오는 것을 볼 수 있는데, 속력이 올라가는 가속도를 좀 줄이고 싶다면

BP_Player/Character Movement에서 Character Movement(General Settings)에서 Max Acceleration 값을 줄이면 된다.

또한 뛰다가 멈출 때 분할 마찰(Use Separate Braking Friction)을 준다면 애니메이션의 흐름이 더 잘 보일 것이다.

가속도의 값은 알아서 잘 조절해보자


 

Weapon을 추가하기에 앞서 다른 프로젝트에 있는 Meshs폴더를 이주해왔다.

혹여나 이주하기를 한 뒤에 이러한 알람이 떴다면, 앞에 몇 개의 파일이 복사됬다는지 보고, 이주하려던 Asset이 있는

프로젝트에서 복사됬다는 파일 갯수를 비교해보고 모두 복사 됬는지 한번 확인해주자.

 

다시 우리가 쓰든 GPC_BP_12 프로젝트로 돌아와서 Meshs 폴더가 잘 이주했는지 확인해보자.

이제 콘텐츠에 있던 Mannequin 폴더는 Meshs 폴더로 이동시켜놓자.


애니메이션이 검은색으로 나오는 이유?

다른 프로젝트에서 이주해오면서 단순히 애니메이션 자체만 가져와서 어떤 bone, mesh으로 돌아가는지 잃어버린

상태이다. 따라서 bone을 다시 지정해주면 해결된다.

 

이와 같이 애니메이션의 이미지가 모두 검은색으로 보일 것이다.

 

콘텐츠 브라우저에서 필터 - 애니메이션 - 애니메이션 시퀀스로 필터링해준다.

이제 Animations 폴더 안에 있는 모든 애니메이션 시퀀스가 다 나오게 된다.

그렇게 나온 애니메이션들 중에서 이미지가 안보이는 애니메이션들을 모두 선택한 뒤,

우클릭 - 애님 애셋 리타깃 - 기존 애님 애셋의 스켈레톤 타깃을 변경합니다를 선택한다.

 

다음으로 우리가 계속 쓰던 Mannequin_Skeleton을 선택해주면 해결된다!!


Weapon 추가하기

콘텐츠브라우저에서 콘텐츠/BluePrints 폴더 안에 블루프린트 클래스 - Actor추가를 해준다.(BP_Weapon)

이 클래스로 근접무기를 만들어 줄 것이다.

Actor로 BP_Weapon 추가

 

BP_Weapon 블루프린트에서 SkeletalMesh와 Capsule Collider를 추가해준다.

그리고 SkeletalMesh를 Root로 올려준다.


※ Weapon에 SkeletalMesh 쓰는 이유?

SK_Sword를 보면 스켈레톤 트리에 Root Start end center가 구분되어있다.

아이콘을 자세히 보면 bone이 아니라 소켓이 있는 것을 볼 수 있다.

검을 휘두를 때 궤적, 이펙트가 있어야 좋다. 검 자체에 이펙트가 발생하는데, 그때 Sword 이펙트의 위치를 잡아주기

위해서 소켓을 사용한다.

보통 Weapon에 SkeletalMesh를 쓰는 경우는 활과 총같이 무기 자체에 애니메이션이 있을 때 사용한다.

사실 지금 보는 검이나 둔기같은 것에는 StaticMesh를 써도 된다.


다시 돌아와서 BP_Weapon의 자손 블루프린트를 하나 추가해준다.

BP_Weapon 우클릭 - 자손 블루프린트 클래스 생성(BP_Sword)

자손 블루프린트 클래스 BP_Sword 추가

 

BP_Sword 블루프린트에 들어와서 SkeletalMesh에 SK_Sword를 넣어준다.

이제 뷰포트에 Sword의 모습이 보일 것이다.

SkeletalMesh 설정

 

이어서 Capsule Collider 컴포넌트의 위치를 무기에 맞게 수정해준다.

- Capsule의 Z위치 : 70.0

- Capsule Radius : 11.0

Capsule Collider 설정

※ Capsule Collider를 검날의 크기에 딱 맞춰버리면 충돌 판정이 안좋아질 수 있다. 일부러 여유롭게 크기를 설정한다.


충돌 판정을 위해서 미리 멤버 변수들을 추가해보자.

- BP_Weapon에서 멤버 변수 추가 : (float)Damage

- BP_Character에서 멤버 변수 추가 : (float)LifeNow / (float)LifeMax


캐릭터의 무기 위치를 잡아주기 위해서 SK_Manequin을 한번 살펴보자.

아까 Sword SkeletalMesh를 봤을 때 bone 대신 소켓이 추가되었던 것을 여기서도 사용해볼 것이다.

 

위치 상 hand_r이 가장 무기 위치가 어울리는 곳이긴 한데 정확한 위치로는 맞지 않는다.

따라서 hand_r 우클릭 - 소켓 추가(hand_r_weapon)을 만들었다.

hand_r 밑에 hand_r_weapon 소켓을 추가

 

이제 소켓을 움직여서 Sword의 적절한 위치를 맞춰주면 되지만, 이것만으로는 정확한 위치를 판별하기 어렵기 때문에

소켓에 Sword를 프리퓨 애셋으로 추가해줄 것이다.

hand_r_weapon  우클릭 - 프리뷰 애셋 추가 - SK_Sword를 선택해주면 뷰 포트에서 Sword가 보인다.

프리뷰 애셋으로 Sword의 정확한 위치를 볼 수 있음

 

만약 애니메이션 재생 상태에서의 Sword 위치를 확인해보고 싶다면 우측 상단에 애니메이션 화살표 클릭하고

원하는 애니메이션을 찾아보면 Character가 해당 애니메이션을 취하고 있는 것을 볼 수 있다.

Idle 애니메이션 상태에서 Sword를 확인하기

※ 만약 Sword의 길이가 맞지 않는다고 소켓의 Scale을 늘려버리면, 해당 소켓에 쥐어지는 무기들 모두 Scale에 적용을

    받아서 문제가 생길 위험이 있다.