본문 바로가기

Unreal Engine 5/모작프로젝트_OrcsMustDie!3

언리얼 엔진 5 1-3. 무기 종류에 따라 캐릭터 자세 입히기

반응형

이제는 Animation Blueprint를 만들어서 무기 종류에 따라 자세를 다르게 해보도록 하자!!!!

 

 

1. Animation Blueprint를 만들어야 하는데, 1-1에서 만든 PlayerCharacter_AnimBP가 있으므로 이걸 사용하자

 

 

 

2. 사용자가 어떤 무기를 들었는지 알아야 하므로 현재 BP_PlayerCharacter의 Ref를 만든다.

1) Event Blueprint Initialize Animation을 cast to bp_playercharacter하고 get owning actor을 통해 현재 타겟이 된 actor를 가져온다.

2) 결과물을 promote to variable해서 이름을 Character Ref로 정정해준다.

 

 

3. BP_PlayerWeapon으로 돌아가서 CurrentWeapon이라는 변수를 만들고 변수를 BPWeaponBase ObjectReference로 만들어준다.

 

 

4. 이제 BP_PlayerCharacter을 통해 BP_WeaponBase를 찾을 수 있고, BP_WeaponBase에 있는 WeaponType을 통해서 어떤 무기를 가졌는지 확인할 수 있다.

1) PlayerCharacter_AnimBP에 CurrentWeaponType이라는 WeaponType 변수를 만들어서 현재 무기를 저장할 수 있도록 하자

2) 4.에서 설명된 방법대로 무기 종류를 가져와서 CurrentWeaponType에 저장하자.

 

 

 

5. 이제 AnimGraph로 이동해보자.

 

6. 혹시 몰라 WeaponType에 Enum에 Hand를 추가하고 왔다.(필요할진 아직은 모르겠다.) 

1) 연결된 Locomotion을 잠시 해제하고, output poses에서 끌고 나와 blend poses (weapontype)을 추가한다.

2) 우클릭을 해서 Pistol Pose랑 Assault Rifle Pose를 추가한다.

 

 

3) 이제 Pistol Pose에 해당하는 애니메이션을 준비하자! 우측 하단에 Asset browser에서 이전에 사용한 Pistol Idle을 끌고온 다음에 new save cache pose를 하고 이름을 Pistol로 지어주자.

 

4) 이후 used cached pose 'Pistol'을 통해 Blend Poses에 연결해주자

 

 

5) Assault Rifle랑 Hand도 똑같이 해주자.

 

 

6) 제대로 작동하는지 확인하기 위해 Event Graph의  Set Current Weapon Type을 잠시 끊고 Anime Preview Editor의 Current Weapon Type을 Pistol로 바꿔주고 Mannequin으로 가서 Pistol_Socket에 Pistol을 Preview하도록 하고 SihoonCharacter_AnimBP를 껐다가 키면 확인할 수 있다.

 

 

7) 만약 손이나 팔, 얼굴, 몸의 일부를 조금 수정해야한다면 Transform (Modify) Bone을 추가해서 Details에 원하는 Bone을 입력해서 Translation, Rotation등을 조금 수정하면 된다. 

 

 

7.  깜빡했는데 Blend Poses (WeaponType)할때 밑에 Active Enum Value에 Current WeaponType을 연결해줘야 Current Weapon Type에 맞게 Blend 된다.

 

 

8. 이제 Play하면 실제로 확인할 수 있게 해보자

1) 먼저 필요한 변수들을 많이 만들어보자. 

Boolean 변수로는 IsCanFire, IsReloading, IsChangingWeapon을 만들고 (IsCanFire은 true로 초기화)

WeaponSlot_01, WeaponSlot_01은 BPWeaponBase Object REference로 만들자.

영어를 좀 할 줄 알면 이름에서 용도가 나오니깐 따로 설명은 안하겠다.

이후에 Weapon이라는 폴더로 정리를 하자.

 

 

2) 맞다! HasWeapon이라는 Enumeration을 하나 더 만들고 HasWeapon, NoWeapon 두개로 나누자

 

 

3) 이제 Event Graph에 add custom event를 통해 EquipWeapon을 만들고 Weapon이라는 BPWeaponBase Input을 추가해주고 무기를 교체중이지 않으면 현재 설정된 무기를 장착하도록 만들어준다.

 

 

4) 무기가 보이게 해야 하므로 ShowWeapons라는 Function을 만들어보자. ShowWeapons는 input을 weapon이라는 BPWeaponBase Object Reference를 받게 하고 이걸 Local Variable로 Promote한 다음 LocalWeaponToShow로 명명한다. 이후에 Weapon Slot 1번에 세팅하고 이 액터, 무기가 보이도록 만든다.

 

 

 

5) 이제 일반적인 FPS처럼 1이나 2를 눌러서 무기를 교체할 수 있도록 해주자. input 1을 하면 보이는 keyboard events를 이용해서 만약 무기가 없다면 Equip Weapon을 하도록 만든다.

 

 

6) 하지만, Equip Weapon에 BPWeaponBase input을 넣어줘야 하고 또, 생성되는 걸 만들어야 하므로 SpawnWeapons라는 Function을 만들자.

 

SpawnWeapons는 input으로 Weapon이라는 BPWeaponBase Class Refence를 받고 LocalWeaponClassToSpawn이라는 Local변수로 Promote하 받은 Class를 바탕으로 SpawnActor를 한다.

 

위치는 GetActorTransform을 이용해서 위치를 받는다.

 

Spawn된 Actor를 WeaponSlot1에 저장하고 이 WeaponBase의 변수로 SocketName이 있으므로 Attach Actor to Component를 진행하는데, 모든 Location, Rotation, Scale는 Snap to Target으로 한다.

 

이후에 Current Weapon을 WeaponSlot1에 있는 걸로 저장하고 

 

HasWeaponEnum을 Has Weapon으로 변경한 후 Weapon의 Ref를 Output으로 내보낸다.

 

 

7) Spawn Weapons를 이용해서 Weapon Ref를 Equip Weapon에 넘겨주도록 하고, Spawn Weapons의 Weapon 클래스를 1의 경우에는 BP_WeaponBase_AssaultRifle로, 2의 경우에는 BP_WeaponBase_Pistol로 설정해준다.

 

 

8) 이제 실행하면 에러가 뜨는 것을 확인할 수 있을 것이다.(나도 엄청 놀랐다!) 에러의 가장 우측으로 가서 문제 있는 부분으로 가보면 Current Weapon을 가져오는데 None을 Access했다고 뜨니깐 문제다.

 

 

 

9) 위에 부분이 문제이므로 무기가 없을 때도 Current Weapon을 찾으니깐 문제가 되니깐 무기가 있을 때만 CurrentWeapon을 찾도록 하면 될 것이다.

 

 

10) 1번이나 2번을 눌렀을 때 자세히 보면 총은 생기는데 자세가 안 바뀐다면 BP_WeaponBase_AssaultRifle나 BP_WeaponBase_Pistol의 WeaponType이 뭐로 초기화 되어있는지 다시 확인하길 바란다. 

 

 

 

 

 

아직은 1번 총이랑 2번 총이랑 바꾸는게 안되고 Play하고 1번, 끄고 Play하고 2번 해야 각각 총이 제대로 나오는 지 확인할 수 있지만, 조금씩 발전중이니깐 괜찮을 것 같다.

 

화이팅!!!!!!!!!!!!!!!!!!!!

반응형