본문 바로가기

레퍼런스

Hand IK 무기장착

https://youtu.be/5zmuj29F3Bg

3인칭 템플릿으로 프로젝트를 하나 만들고  마켓플레이스에서 FPS Weapon Bundle, Animation Starter Pack을 프로젝트에 추가

https://www.unrealengine.com/marketplace/ko/product/fps-weapon-bundle

 

https://www.unrealengine.com/marketplace/ko/product/animation-starter-pack

 

BP_WeapnBase로 블루프린트를 만들자. 박스콜리전을 만들어주자 Box Extention은 64,32,16

부모는 액터로 하자. 컴포넌트로 스텔레탈메시를 넣어주고 SK_AR4_X로 설정해준다.

 

EventGraph로 가서 EventActorBeginOverlpap 노드에 OtherActor를 끌어 Ue4ASP_Character노드를 추가해준다.  캐릭터가 총과 충돌하면 캐릭터에 총을 달아주기 위해서다.   Ue4ASP_Character는 애니메이션스타터팩을 깔면 포함되는 TPC 캐릭터 블루프린터이다.

As UE4ASPCharacter핀을 우클릭후 변수로 승격해준다.

AttachActor To Component노드를 추가해주자 옵션은 SnapToTarget으로 하면 된다.

UE4ASPCharater와 Parent를 연결해주면 자동으로 Mesh가 생긴다 안되면 GetMesh노드를 추가하고 연결한다.

다음 2개의 변수를 만들고

 뒤에 Set노드를 추가해준다.

 

여기서 Mesh는 UE4ASPCharacter블루프린트의 Mesh이면 캐랙터의 메시이다.  메시의 오른손에 총을 장착할 예정이다.

스켈레톤에디터를 열고 스켈레톤트리에서 hand_r본 위를 우클릭후 Add Socekt을 한후 이름을 rh(right hand)로 해주자

위치를 손바닥 근처로 옮겨준다.

rh는 BP_WeaponBase의 EventGraph의 attachActorToComponent에 socketName에 적어주자 이러면 총이 캐릭터의 오른손에 달라 붙는다.

UE4ASPCharacter에 isHoldingWeapon?이라는 변수를 Bool로 만들어주고 Lh는 Transform으로 만들어준다.

애니메이션 스타터팩에 있는 애니메이션블루프린트를 열어준다.

이벤트그래프의 EventBlueprintUpdateAnimation노드 뒤에 Sequence를 넣어주고

TryGetPawnOwner의 리턴Value에서 핀을 끌어 CastToUe4ASP_Character를 넣어주고 Get Lh노드를 추가후 변수로 승격시켜주자.

 Get Holding Weapon? 변수노드도 추가하고 변수로 승격시켜준다.  LH와 isHoldingWepons?변수는 CastToUe4ASP_Character에서 이전에 만든 변수이다.

이제 BP_WeaponBase에 사용된 스텔레탈메시의 스텔레탈트리로 가서 루트를 우클릭후 소켓을 만들어주자. 이름을 Lh로 변경한다.

소켓의 위치는 대략 총구의 왼쪽이다. 그 부분에 손목이 와야 손이 총구를 잡을것이다.

BP_WeaponBase EventGraph의 EventTick에서 다음 노드를 추가하고

총구의 Lh소켓의 Transform을 UE4ASPCharacter의 변수인 Lh에 설정해준다.

2노드 사이를 연결해준다.

 이제 Ue4ASP_HeroTPP_Animblueprint로>EventGraph로 이동해서  캐릭터의  Get LH노드를 추가할 수 있고.

캐릭터의 LH를 애니메이션그래프의 LH변수에 설정할수 있다.

마찬가지로 캐릭터의 isHoldingWepon? 변수도 애니메이션 블루프린트의  변수에 저장할 수 있다.

애님그래프로 이동해서 FABRIK이라는 노드를 추가하자 캐릭터의 툭종본을 원하는  위치로 배치할수 있다.

Fabrik 디테일에서 EndEffector의 Target은 잘 안움직이는 root 나  pelvis이고 solver는 움직이고 싶은 범위 입니다.

 

FABRIK노드를 Locomotion과 OutPose사이에 연결해주고 EffectorTransform입력과 LH를 연결해줍니다. 총구의 위치입니다. 이 위치로 .캐릭터의 왼쪽을 움직여줍니다.

Output Pose 앞에 BlendPosesbyBool노드를 넣어주고 조건으로 isHoldingwepon?를 연결해줍니다.

LocoMotion을 카피해서 FalsePose에 연결해줍니다.

플레이해보고 총으로 다가가면 총을 잘 잡습니다.

 

플레이시 왼손과 총이 잘 안 맞는다면 플레이후 총을 선택하고 총의 스켈리톤을 열어 소켓의 위치와 로테이션을 보면서 조정할수 있습니다.

다른 무기를 사용할때도 새로운 무기의 스켈리톤메시에 LH라는 소켓이 있어야하고 손에 맞게 적당한 위치로 배치해야 합니다. 총액터의 위치도 0,0,0으로 되어 있어야 합니다.

 

'레퍼런스' 카테고리의 다른 글

PCG Swimming  (0) 2024.05.08
CubeMap InteriorMapping  (0) 2024.05.07
Lumen 설정  (0) 2024.05.03
Unreal Engine Game Framework  (0) 2024.05.01
애니메이션 블루프린트 점프 랜드 에러 땅속으로 사라지는 현상  (0) 2024.04.30