초보 코린이의 성장 일지

UE4 TPS Weapon IK, Fire 본문

언리얼

UE4 TPS Weapon IK, Fire

코오린이 2023. 3. 22. 02:28

1. 한번에 여러가지 동작을 동일하게 수정하거나 할때 사용하는 방법이다.

Local Space = 수정 불가

Mesh Space = 언리얼 엔진에 연산에 의해서

Skeleton Reference Pose = 처음에 나온 포즈에서 섞을것인지.

Selected animation scaled = 커졌다, 작아졌다 하는 효과줄때

Selected animation frame = 매 프레임마다 섞을 것인지.

 

1. 에임 오프셋 생성해준다.

1. 에임은 90도로만 사용, 애니메이션도 센터, 위, 아래 3동작을 사용할 것이므로, 2칸으로 나눈다.

2. 중앙은 Center 나머지는 알맞게 Up, Down 애니메이션을 넣어준다.

CAnimInstance.h
CAnimInstance.cpp

1. 보간에 필요한 Pitch, Direction 변수 생성

2. 회전과 Pitch, Direction 값을 보간해준다.

1. 애니메이션 BP로 가서 생성해준 Direction, Pitch 값을 에임 오프셋에 넣어주고 연결.

2. 만들어준 레이어 포즈에 연결해주기.

CPlayer.h
CPlayer.cpp

1. 카메라 각도 제한을 걸어 위, 아래 방향 조정.

1. 무기든 상태도 동일하게 편집해준다.

2. 에임 오프셋 만들어주고, 동일하게 2칸으로 나눠서 에임 센터, 위, 아래 애니메이션 넣어준다.

Cweapon.h
CWeaponComponent.h
CWeaponComponent.cpp

1. 컴포넌트하네 명령을 내리기전인 부모 Weapon에서 Aim을 판단할 bool 함수를 생성해준다.

2. 컴포넌트로가서 함수를 콜해준다.

3. return이 있으므로, 체크할때 Result 사용.

CAnimInstance.h
CAnimInstance.cpp

1. bool bInAim 생성 후 부모인 Weapon에 함수 콜해준다.

1. 총을 들고있는 애니메이션은 뛰는 동작이 없을것이므로, 걷는것만 알맞은 방향으로 세팅해준다.

1. 이제 만들어 놓은 블랜드 스페이스와, 에임 오프셋을 bool값으로 판단할 수 있게 연결해서 최종 애니메이션에 연결해준다.

1. 조준을 해보면, 옳은 동작이 잘 나오게 된다. 하지만 조준중인데 계속 몸이 움직이게 된다. 

2. 상체를 흔들리지 않게 해볼 것이다.

1. 애니메이션으로 돌아와서 수정한 Fixed 애니메이션 본마다 레이어로 불러서 연결해준다.

2. 설정란에서 Bone를 상체인 spine_02로 설정해주고 Rotation을 켜준다.

3. 이제 하체와 상관없이 상체만 움직이게 될 것이다.

4. 이제 조준을해도 거의 움직임이 없지만, 하나 더 문제가 있는 조준중에 왼손이 벌어지는걸 처리해 볼 것이다 여기서 FABRIK를 써야 할 것이다.

 

CAnimInstance.h
CAnimInstance.cpp

1. IK를 적용시킬 체크용으로 bool 변수를 생성해준다.

2. UnarmedMode일때만 적용시키도록 설정.

1. 레이어 생성 후, 섞어야하므로, 오른쪽 디테일창에서 입력을 추가해준다. (입력 포즈)

2. 캐시 포즈 저장을 불러서 IK가 적용되는지 아닌지 판단을 위해 연결해준다.

3. IK가 사용이 안된다면 저장한 Input Pose를 False에 연결.

4. IK를 적용시키려면,  Local 공간을 컴포넌트로 바꿔줘야한다. 그리고 FABRIK를 불러서 연결

5. 위치만 사용할 것이므로, 핀분활 해서 사용.

6. 왼손이 움직여야할 기준은 오른손이 되고, 공간은 Bone로 설정해줘야한다.

7. 오른손은 총을 잡고있는 기준이므로, 변할게 없다 그래서 No Change로 설정.

8. Tip Bone는 이제 내가 IK를 적용할 위치, Root Bone는 어디까지 IK를 계산할 것인지, 총을 다룰때는 관절이 어깨 까지이므로, 어깨로 설정해준다.

9. Precision은 수치를 높게 줄 수록 IK가 정밀해진다. 하지만 높일수록 연산량이 엄청 많아진다.

10. Max Iterations는 정밀도를 높이기 위해 계속 반복적으로 계산을 하게된다. 동일하게 높을수록 정밀도는 올라가지만 연산량은 많아진다.

 

CWeapon.h
CWeapon_AR4

1. Weapon에서 앞으로 다룰 무기마다 위치가 달라지므로, 변수 생성

2. 애니메이션에서 적용한 무기인 AR4에 Equip에 아까 IK에 적용했던 수치 그대로 입력.

CWeapon.h
CWeaponComponent.h
CWeaponComponent.cpp

1. 동일하게 return 해줄 인라임 함수 생성.

2. CWeaponComponent에서도 만들어준다.

3. 체크해주고, return 해주기.

CAnimInstance.h
CAnimInstance.cpp

1. 애니메이션에서도 생성해주고, 부모에 있는 Weapon에 함수 호출해준다.

1. 다시 애니메이션으로 와서 생성해준, LeftHandLocation 호출 후 연결, 설정안에 값은 디버깅 편하기 하기 위해 기본값 설정해준 값으로 맞춰준 것이다.

 

1.이제 손이 잘 적용된걸 알 수 있다. 하지만 장착 모션중일때 왼손이 먼저 가있는 동작이 보이게 된다. 이것도 수정해 줄 것이다.

2. 커브 생성 후, 커브 설정.

3. 손 IK가 붙어있는 상황을 0, 떨어져있는 상황을 1로 설정. (동작을 다 바꿔야 하는 상황이 발생할 수 있기 때문에 간단하게 설정)

1. Get Curve Value 생성 후, 커브이름 알맞게 넣어주고, 뒤집어서 사용할거라 -1 을 곱해준다. 그리고 깔끔하게 해주기 위해 절대값도 씌어준다.

 

CWeapon.h
CWeapon.h
CWeapon.cpp

1. 발사를 할때 어떠한 기준 위치에서 발사될 것인지 설정.

2. 카메라와 충돌이 일어 날 수 있기 때문에 값을 조절.

3. 직접 발사하는 지점을 보기위한 디버그.

CWeaponComponent.h
CWeaponComponent.cpp

1. 동일하게 컴포넌트로 넘어와서 검증 후 넘겨준다.

CPlayer.cpp

1. Player로가서 발사 연결해주면 된다.

1. 발사했을때 카메라 기준으로 나가는 것을 볼 수 있다.

 

https://www.youtube.com/watch?v=IUXOq387p4w 

 

'언리얼' 카테고리의 다른 글

UE4 TPS Weapon AutoFire, Widget  (0) 2023.03.24
UE4 TPS Weapon Fire, Sound, Widget  (0) 2023.03.22
UE4 TPS Weapon, AnimNotifyState  (0) 2023.03.17
UE4 TPS Weapon  (0) 2023.03.16
UE4 MultiTrace, TPS 세팅  (0) 2023.03.15
Comments