초보 코린이의 성장 일지

UE4 무기 장착 및 모션 본문

언리얼

UE4 무기 장착 및 모션

코오린이 2023. 1. 4. 15:44

칼을 뺴고 나면 Equiping가 해제되어야 하는데 지금은 계속 유지되고 있는 상태이다

그래서 애니메이션 상태에서 중간에 이벤트인 Notifies 하나 만들어서 이 과정을 순차적으로 만들것이다.

 

Notifies를 만드는 방법은 원하는 동작의 애니메이션을 들어가 모션을 보여주는 수치를 나타낸 곳에 우클릭을 누른 후 노티파이추가를 누르면 된다. 그 중에 자신이 만든 노티파이를 추가해주면서 원하는 지점에 제어를 해줄 수 있다.

 

관리를 편하게하기 위해 폴더를 하나 생성해주고 내가 앞으로 할 동작을 노티파이로 만들어 준다.

오른쪽 마우스를 누른 후 -> 블루프린 클래스 생성 -> 부모 클래스 선택 창에서 하단 모든 클래스에 검색 -> Animnotify

선택을 하면 된다.

 

만든 노티파이를 들어가면 왼쪽 상단에 오버라이드를 확인 할 수 있다.

클래스로부터 상속을 받게되면 먼저 찾아야 할 것은 오버라이딩이 가능한 함수를 찾는 것이다 (Virtual함수)

 

그 중 GetNotifyName는 말 그대로 노티파이 이름을 알려주는 기능을 하고, 이름을 정할 수 있다.

Received_Notify는 애니메이션이 특정한 구간을 지나갈때 호출될 기능을 수행한다.

이제 필요한 역할을 정의해줄 것이다.

Receiver Notify에 Mesh Comp는 = 애니메이션을 플레이 시킬 Mesh를 나타낸다. 그게 위에 그림에 있는 플레이어를 말한다. 

Get Owner = 소유자를 가져오는 기능

과정 : Get Owner -> BP_Player로 캐스팅 -> BP_Player에 만들어 놓은 End_Equip 함수를 호출 시켜준다 -> 반환 노드에 연결 (반환로드연결 할때 ture, false는 없다)

 

 

 

작성한 노티파이 표시

동작 할 애니메이션에 들어가 노티파이를 넣어 줄 것이다. 여기서 실행 %가 중요한데 70% 넘기게 되면 문제가 생긴다.

또한 근접하게 너무 타이트하게 해서도 위험하므로 조금 여유있게 설정해주는게 좋다.

 

Equip에서 장착을하고 Equipped가 체크 되어 있을것이다. End_Equip은 완료 되었다는 뜻으로 false로 노드를 연결해준다.

Unequip도 하나 만들어준다. 해제 했을때를 말하는 것이다.

해제가 끝나고 다시 돌아가기 위한 동작

그럼 위에 Sword를 뽑을때 동작이 갈리게 될 것이다.

 

노티파이를 이름에 알맞게 하나 더 생성해준다.

똑같이 노드를 만들어 동작원리대로 연결해준다. 이제 플레이어에게 동작이 들어가게 된다.

이제 작성한 노티파이를 토대로 애니메이션 구간을 설정해준다.

이제 애니메이션 2가지 동작인 Sheath_Sword_1, Sheath_Sword_2를 연결해주고 조건을 넣어준다.

BS_Sword -> Sheath_Sword_1
Sheath_Sword_1 -> Sheath_Sword_2

30% 미만 남았을때 넘어간다.

Sheath_Sword_2 -> BS_Unarmed

30% 미만 남았을때 넘어가게 설정

만든 변수 Sheathing를 만들어서 플레이어가 알 수 있도록 연결해준다. 그럼 이제 칼 빼고 넣는 동작이 완료된다.

 

 

이제는 칼을 뺏을때 전방을 바라보도록 만들것이다. 

 

무기장착이 끝나고 플레이어의 움직임이 카메라 시점을 따라 움직일 수 있도록 Rotation Yaw를 따르도록 해준다. 그리고 검을 뽑을때 움직일 수 없게 CanMove를 false로 바꿔준다.

 

반대로 맨손으로 돌아온 End_Unequip일떄는 위와 반대로 뒤집어 주면된다. 그럼 전방을 향한게 아닌 원래대로 방향키를 누르면 그 방향을 보고 이동하게된다.

 CanMove를 동작시키기 위해서는 Move에서도 수정을 해줘야한다 중간에 보면 if문으로 Can Move를 받게된다

동일하게 다른 동작에서도 제어를 해주면 된다.

 

이제 칼을 만들어서 캐릭터 모션과 연결시켜주고, 칼이 뽑히는 위치까지 정해 줄 것이다.

 

플레이어가 장착 할 검도 화면에 보여줘야 하기 때문에 Actor를 상속받아 블루프린트 클래스로 만들어 준다.

이런 구체가 하나 생기게 되는데 이걸 토대로 검을 입히고 값을 측정해 캐릭터가 원하는 위치에서 칼이 뽑힐 수 있도록 만들것이다.

컴포넌트 추가를 눌러 SkeletalMesh를 받아준다.

그리고 가져온 메시를 선택해서 검을 가져온다.

가져온 검을 캐릭터가 자연스레 들 수 있도록 값들을 수정해준다.

 

게임이 시작되면 당연하게 검이 캐릭터가 원하는 부위에 같이 나와야 한다 그래서 이벤트를 추가해 줄 것이다.

1. 우선 게임시작할때라는 조건이 있기때문에 BeginPlay이벤트를에서 시작을 한다.

2. SpawnActor from class를 가져온다. 등장시켜야하는게 검이기 때문에 Class에서 BP_Sword를 선택해준다.

3. Spawn Transform은 필수로 꼭 들어가야하는 파라미터다. 이 것 또한 구조체이며, 구조체기 때문에 Make Transform(어느방향으로 회전 할 것인지)을 가지고 있다. 선언 후 연결해준다. (C++에서는 구조체 타입을 직접적으로 제어하는게 불가능하지만 언리얼에서는 가능하게 해준다 = Refraction)

4. 그리고 소유자는 자기자신이 되여야 하기 때문에 Self를 선언해 연결해준다.

5. 이미 위에 동작만 선언해주면 화면에 칼은 실체하게 된다.

6. 이제 장착을 시킨 상태를 저장하기 위해 Sword를 선언해주고 AttachActorToComponent를 선언해준다.

7. 붙여야하는 곳이 Mesh기 때문에 가져와 노드를 Parent(부모)에 연결해준다. 

 

이제는 실체하는 칼을 캐릭터 특정부위에 장착시킬 것이다.

Skel_Mannequm을 들어가 Thigh_L(좌측 골반)을 누른다 저 모든 이름이 캐릭터에 뼈대가 된다.

그 후 소켓 추가를 해준다. 이름은 Holster_Sword로 지어준다. 그리고 만들어진  Holster_Sword

눌러서 프리뷰 애셋 추가 -> Sword를 선택해준다.

너무 크기 때문에 값들을 수정해준다.

수정이 끝났다.

 

이제 실행해보면 이 상태가 된다.

 

근데 이 상태로 실행하게되면 손이 빼는 동작에 칼이 바로 붙어버리게 된다. 우리는 칼을 뺄때 검이 손에 오도록 지정해 줄 것이다. 그래서 Notifies를 한개 더 만들어 준다.

 

노티파이 구조를 이렇게 연결해주면 된다.

 

이제 이벤트그래프도 넣어 줘야 한다. AttachActorToComponent - 타깃(누구안에 있는 함수를 호출 할 것인)

은 Sword로 지정해주고 캐릭터에 연결되야 하기 때문에 Mesh도 연결해준다. 그리고 소켓 이름은 Hand_Sword로 넣어준다.

 

칼을 차고 있지만 꺼낼 때 도 보여줘야 하므로 오른쪽 손에 지정을 해줄 것이다. 그래서 Hand_Sword를 소켓으로 생성해준다. 그리고 똑같이 프리뷰 애셋을 Sword로 추가해준다. 그리고 값을 똑같이 캐릭터 위치에 맞게 수정해준다.

 

똑같이 위와 동일하게 만들어주고 뼈대를 지정한 소켓 이름으로 Holster_Sword로 지정해준다.

 

이제 노티파이를 생성하고 위와 동일하게 진행해준다. 

뽑는 동작 및 뽑고 나서에 동작 2가지 노티파이에 들어가 애니메이션을 구역으로 정해 지정해준다.

 

모든게 끝이나고 캐릭터에 골반에서 검을 뽑아 검을 들고 움직일 수 있게 된다.

 

https://www.youtube.com/watch?v=6ZoAKqPfBq4 

 

- 무기를 입히는 것 조차 쉬운 일이 아니였다.

- 모든 동작의 관여를해야 하기 때문에 구조가 꼬이면 나중에 힘들어 질 거 같다.

- 기본적인 구조파악부터 잘 해야한다.

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

UE4 충돌 및 적과 충돌  (0) 2023.01.06
UE4 몽타주 사용, 캐릭터 콤보  (0) 2023.01.05
UE4 캐릭터 동작 및 카메라  (0) 2023.01.02
UE4 캐릭터 움직이기  (0) 2022.12.30
UE4 시작 2022, 12, 29  (0) 2022.12.29
Comments