초보 코린이의 성장 일지

UE4 Bow 줄 모션 추가, 파쿠르 Climb 본문

언리얼

UE4 Bow 줄 모션 추가, 파쿠르 Climb

코오린이 2023. 2. 13. 13:45

활을 다 헀지만 미처 처리 못했던 부분이 있다. 사소할 수 있지만 꼭 알아야 하는 부분이라서 다뤄야한다

줄을 당기는 모션이 없이 활이 나가기만 했다. 이 활 줄이 자연스럽게 손끝에서 당겨지도록 변경할 것이다.

 

UPrimitiveComponent = 원시적이라는 의미로, 삼각형을 그릴수 있는 최소한에 정보

UMeshComponent = 실제 모델을 어떻게 불러와서 보여줄 것인가.

UMeshComponent 타고 들어오면 또 자식 컴포넌트들이 나온다.

USkinnedMeshComponent = 뼈대가 움직였을때, 찌그러지거나 바뀌다 비는 부위가 생긴다 그 곳을 피부를 매꾸듯이 매꾸는 기능을 사용가능

UStaticMeshComponent = 정적 모델로 안바뀐다.

UWidgetComponent = UI 다룰때 사용

 

USkinnedMeshComponent 를 타고 들어와서 보면

UDestructibleComponent = 형태를 변형시킬수 있다.

UPoseableMeshComponent = 동작을 캡처해서, 프로그램에서 애니메이션을 수정 가능하다.  애니메이션이 수정이 가능하다는 뜻은, 결국 뼈대를 움직일 수 있다는 뜻을 나타내기도한다.

USkeletalMeshComponent = 애니메이션 변경이 불가능. IK나 컴포넌트 임의공간으로 변경할 순 있다.

 

궁긍적으로 중요한건 UPoseableMeshComponent 이다. 애니메이션이 수정이 가능하다는 뜻은, 결국 뼈대를 움직일 수 있다는 뜻을 나타내기도한다. SkeletalMesh의 원본을 건드리면 안되므로, 복사본을 만들어서 복사본을 가지고 수정을해 동작을 입힌다.  이를 적용해서 활줄을 당기는 손가락을 붙여서 동작을 수정해 볼 것이다.

Keyframe Animation란 본이 얼마만큼 움직였는지 보고, 변하한 만큼 기록을 한다. 즉 특성 움직임이 있을때마다 움직임을 프레임 단위로 기록한다. 언리얼뿐 아니라 2D, 3D 애니메이션을 가지고 사용하는 모든것은 이 걸 사용한다.

 

 

 

사용할 함수 및 변수, 위에서 언급한 PoseableMesh를 사용할 것이다.

Weapon_Bow 이벤트그래프

1. Mesh에 상대 위치를 저장해 준다.

World 공간으로 빼면 활줄 그대로에 위치가 나온다.

그래서 Component 공간으로 빼준다.

1. 사용할 소켓을 오른쪽 손에 하나 생성해준다. 그리고 손가락을 조금 변형시킨다.

1. 활이 장착되어 붙어있을때만 진행 할 것이다.

2. 이미 End_Equip에서 In Equip가 활성화 되어있다. 이 뜻은 이미 장착되어있다는 의미, 또 한 Bow String가 true일 때

3. 만든 소켓을 가져다가 위치를 세팅해준다. 소켓 이름은 방금 생성한 이름으로 넣어준다.

 

Unequip 시퀀스 1번

1. 에임 제거

Unequip 시퀀스 2번

1. 이벤트그래프에서 저장해 놓은 Origin Location과 나머지 정보들을 넣어준다.

 

이제 줄은 당겨지지만 하나 문제가 있다. 쏘는 중간에는 손가락을 놔야하는데 끝까지 붙어있는 상태로 동작을 한다.

이걸 이제 자연스럽게 만들어 줄 것이다.

 

BeignDoAction 끝 부분 추가

1. 쏘고나면 손가락을 때게 되므로, 원래 위치로 돌려준다.

2. 원래 위치로 돌아가는건 Tick에서 매 틱마다 진행되고있다. 그래서 Attach Bow String만 활성화 시켜주면 된다.

 

노티파이 생성

1. 가져온 무기가 활인지 캐스팅을 통해서 확인

2. 이 안에있는 Attach Bow String를 true로 변경

1. 방금 만든 노티파이 마지막 부분에 추가해주기.

2. 저 타이밍에 활줄이 붙는걸 볼 수 있다.

 

이제 활은 마무리가 됐고, 파쿠르를 시작해 보겠다.

 

1. 파쿠르 모드인지 아닌지를 확인하기 위한 Type 생성 

사용할 함수 및 변수 전에꺼에서 추가한 상태

DoParkour 뒷 부분 추가

1. if를 들어오기전은 모든 공통사항을 체크한 것 뿐이고, 이제 위에인지 옆인지 어떤 동작인 등등은 조건 체크를 해줘야한다.

2. ClimbMode가 true라면 파쿠르를 수행하고 return 해준다.

CheckClimbMode

1. return 전용으로 벽타고 올라갈 수 있는지만 체크해줄 용도이다.

2. 위에가 닿아야 올라갈수 있으므로, Ceil 결과를 가져다가 break로 hit 확인을 해준다.

3. 어차피 위가 안닿으면 끝내면 된다.

4. 머리위에 닿는게 있어야하고, 거리와 높이들이 체크되어야 하기 때문에, hit된 거리를 저장해 놓은 Hit Obstacle 보다 Min Distacne가 작아야 한다. 

5. Max Distance는 반대로 커야한다. 그 사이 값에 들어가 있는것이므로, 그래야 동작이 수행가능

6. 두께는 높이니까 핀분활 후 Z축만 사용한다. Z축이 +- 10 안에 들어오면 실행하게 만들어 준다.

7. 선도 닿고, 거리나 높이, 모든 조건이 만족하면 return 해준다.

 

 

GetData

1. for문을 통해 타입이 같다면 하나의 그룹으로 모아둘 것이다.

2. 다양한게 들어 올 수 있으므로, 배열로 add로 넣어준다.

3. 끝이나면, Datas에 index 번호로 return 시켜준다.

 

PlayParkourMontage

1. 어떤 몽타주를 수행할 것인지에 맞는 동작을 받을 것이라 세팅해준다.

2. ParkMode 세팅해준다. 그리고 Data도 연결받아서 정보를 가져온다.

3. 우선 카메라 고정이 true라면 카메라 보정하고, 몽타주 실행

4. false에서는 조건없이 그냥 몽타주 실행

5. 몽타주에 대한 정보들은 받아 온 정보들을 넣어준다.

 

DoParkour_ClimbMode

1. 몽타주를 실행시켜준다. 

2. 우선 동작은 벽을 타는 Flying으로 변경

 

https://www.youtube.com/watch?v=16d_qE1XtPA 

 

- 멈추는건 나중에 다루도록 하겠다

Comments