속력에 따른 이동 애니메이션 출력하기
속력에 따라서 Idle - Walk - Run의 애니메이션이 나오도록 할 것이다.
콘텐츠 브라우저에서 콘텐츠/Mannequin/Animations 폴더 안에 새 애니메이션를 추가해줄 것이다.
우클릭을 통해서 애니메이션 - 블렌드 스페이스1D를 추가해준다.
스켈레톤은 항상 사용하던 Mannequin_Skeleton을 선택해준다.
이름을 BS_Unarmed로 설정해주고, BS_Unarmed의 블루프린트로 들어가준다.
여기서 사용할 것은 좌측의 에셋 디테일 탭의 Axis Settings 이다.
Axis Settings의 가로 축이 캐릭터가 보이는 뷰 포트탭 밑에 보이는 탭을 말하고 있다.
좌측 끝은 0.0 / 우측 끝은 100.0을 나타내고 있으며, Shift를 누르고 마우스를 올리면 초록점이 같이 움직인다.
(마우스 클릭으로도 움직여짐)
이제 Axis Settings의 가로 축 세팅값을 바꿔보자.
- Name : Speed
- Maximum Axis Value : 600.0
- Number of Grid Divisions : 2
이제 해당 축에 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 내부에서는 Speed 변수를 넣어주어야 하므로 Get Speed 노드를 추가하고 연결해준다.
이제 실행해보면 잘 나오는 것을 볼 수 있는데, 속력이 올라가는 가속도를 좀 줄이고 싶다면
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)
이 클래스로 근접무기를 만들어 줄 것이다.
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 블루프린트에 들어와서 SkeletalMesh에 SK_Sword를 넣어준다.
이제 뷰포트에 Sword의 모습이 보일 것이다.
이어서 Capsule Collider 컴포넌트의 위치를 무기에 맞게 수정해준다.
- Capsule의 Z위치 : 70.0
- Capsule Radius : 11.0
※ Capsule Collider를 검날의 크기에 딱 맞춰버리면 충돌 판정이 안좋아질 수 있다. 일부러 여유롭게 크기를 설정한다.
충돌 판정을 위해서 미리 멤버 변수들을 추가해보자.
- BP_Weapon에서 멤버 변수 추가 : (float)Damage
- BP_Character에서 멤버 변수 추가 : (float)LifeNow / (float)LifeMax
캐릭터의 무기 위치를 잡아주기 위해서 SK_Manequin을 한번 살펴보자.
아까 Sword SkeletalMesh를 봤을 때 bone 대신 소켓이 추가되었던 것을 여기서도 사용해볼 것이다.
위치 상 hand_r이 가장 무기 위치가 어울리는 곳이긴 한데 정확한 위치로는 맞지 않는다.
따라서 hand_r 우클릭 - 소켓 추가(hand_r_weapon)을 만들었다.
이제 소켓을 움직여서 Sword의 적절한 위치를 맞춰주면 되지만, 이것만으로는 정확한 위치를 판별하기 어렵기 때문에
소켓에 Sword를 프리퓨 애셋으로 추가해줄 것이다.
hand_r_weapon 우클릭 - 프리뷰 애셋 추가 - SK_Sword를 선택해주면 뷰 포트에서 Sword가 보인다.
만약 애니메이션 재생 상태에서의 Sword 위치를 확인해보고 싶다면 우측 상단에 애니메이션 화살표 클릭하고
원하는 애니메이션을 찾아보면 Character가 해당 애니메이션을 취하고 있는 것을 볼 수 있다.
※ 만약 Sword의 길이가 맞지 않는다고 소켓의 Scale을 늘려버리면, 해당 소켓에 쥐어지는 무기들 모두 Scale에 적용을
받아서 문제가 생길 위험이 있다.
'언리얼엔진' 카테고리의 다른 글
14. Draw 애니메이션 / AttachActorToComponent / 인터페이스 (2) | 2023.05.19 |
---|---|
13. 프리뷰 애셋 / 소켓 / 캐릭터에 무기 생성 / For Each Loop (0) | 2023.05.17 |
11. Jump애니메이션/블렌드 세팅 (0) | 2023.05.13 |
10. PlayerController / Game Mode Base (2) | 2023.05.11 |
9. 캐릭터 좌우 이동 수정하기 (0) | 2023.05.10 |