프로그래밍 공부
작성일
2024. 1. 24. 14:45
작성자
WDmil
728x90

만들었던 캐릭터에 무기를 장착시켜 보자.

BP의 스켈레톤에 무기를 장착시키기 위해서는 객체의 무기를 장착할 위치에 소켓을 생성해야 한다.

 


스켈레톤 본 소켓 생성하기

 

스켈레톤의 본을 생성하기 위해서는 먼저, ABP_Player에  들어가서 해당 객체의 스켈레톤을 눌러서 확인해야 한다.

위와같이 에니메이션 블루프린트에서 스켈레톤에 접속할 수 있다.

 

위와 같은 창이 나타나면 된다.

 

이제, 본의 위치값을 사용해서 무기가 붙어있을 소켓을 생성한다.

 

먼저 소켓의 위치를 참조하기 위해. 원하는 위치의 본을 선택하고 마우스 오른쪽 클릭을 해보자.

오른쪽 손에 소켓을 추가하려면 오른손이라고 지정되어있는 Hand_R위치에서 마우스 오른쪽클릭을 통해 소켓을 추가할 수 있다.

 

소켓은 위치값에 상대적으로 접근함으로, 연결된 Bone의 Transform이 움직이면 연동되어 같이 이동하거나 회전하게 된다.


소켓 위치 잡기

 

일단, 소켓을 생성하게 되면 이 소켓이 어떤식으로  적용되는지, 앞이 어디인지 위가 어디인지 햇갈린다.

그렇기에, 위와 앞을 확인하기 위해서 프리뷰를 기입해보자.

 

소켓을 선택하고 마우스 오른쪽 클릭을 하면, 프리뷰를 넣어줄 수 있다.

이렇게 프리뷰를 넣어줌 으로써, 해당 소켓에 위치하게된 Actor의 실제 동작사항을 확인할 수 있다.

 

자세한 애니메이션을 확인하고 싶다면 위쪽 바 쪽에 있는 프리뷰 애니메이션 을 통해 해당 본에 해당되는 애니메이션을 동작시켜볼 수 있다.

 

실행되는 에니메이션을 통해. 현재 소켓에 위치한 Actor가 어떤식으로 연동되어있는 지 확인할 수 있다.

이제, Actor에 대한 소켓의 로컬위치를 설정해주자.

 

로컬위치는 소켓을 누르고 오른쪽 사이드 바의 소켓 파라미터 를 통해서 설정해줄 수 있다.

 

작성자는 소켓 파라미터 의 소켓 이름을 Hand_Sword로 설정해주었다.

우측 사이드바 에서 이름과 Position을 설정해줄 수 있다.

 

RST를 설정하여 객체를 조정해주어 좀 자연스럽게 위치하도록 해보자.

 

손 위치를 설정하였다면, 같은 원리로 칼을 집어넣는 모션을 확인하여 칼을 집어넣는 위치에 소켓을 추가한다.

 


왼쪽 허벅지에 Hloster_Sword라는 이름을 통해 접근할 수 있도록 하였고, 위치와 회전, 크기를 자연스럽게 조정하였다.

 


위와같이 소켓을 작업하였다면 이제 소켓을 활용할 수 있도록, 칼을 뽑고 다시 장착하는 모션을 적용해보자.


에님몽타주 적용하기

 

공격모션 의 경우에 에님 몽타주 를 활용해서 공격모션을 적용할 것 이다.

일단, 공격하는 모션을 에님 몽타주로 재생성 해주자. 공격모션을 마우스 오른쪽 클릭하고 생성-> 몽타주 생성을 통해 몽타주를 쉽게 생성할 수 있다.

애님 몽타주를 생성하였다면, 몽타주를 모아놓아 정리 해놓고, 적용해보자.

 

일단, ABP로 이동하여 애니메이션블렌드스테이트를 수정하자.

ABP의 창에서 AnimGraph의 안에 마우스 오른쪽 클릭을 하고 Montage를 검색하면 다음과 같이 내가 생성했던 몽타주를 가져올 수 있다.

 

연결 과정을 다음과 같이 정의하자.

Jumping을 통해 애니메이션을 관리하지만, 몽타주가 실행되는 순간. 항상 몽타주가 우선되어 실행될것 이다.

 


칼 장착하기

 

우선, 공격하기전에 칼을 생성하고 장착해야할 것 이다

칼을 먼저 생성해보자. 칼을 가지게 될 객체는 언제나 Player임으로  Player가 생성될 때 칼을 생성하게 만들것 이다.

만약 마음에 들지 않는다면, 따로 정의해주어도 될것이고 생성을 레벨과 같이 해도 무방할 것 이다. 이건 자유다.

 

일단 Player가 생성될 때 자동으로 Actor가 배치되도록 정의하였다.

BP_Player의 BeginPlay이벤트에서 Player가 생성될 때 BP Sword를 SpawnActor를 통해 생성하고, Sowrd변수를 정의한 곳에 Set하여 배치해주고, Attach함수를 통해 Mesh의 소켓에 직접 접근하여 위치를 붙여준다.

 

그렇게 하면 따로 정의된 것이 없어도 mesh에서 자동으로 소켓의 위치값을 가져온다음 Sword의 위치는 항상 그 로컬위치에 있을것 이다. 그리고 위치값으로는 항상 해당 소켓에 상속되어 있는 상태가 된다.

 

기본 생성은 왼쪽다리의 Holster의 위치값에 지정하였지만, 칼을 뽑을 때 는 손으로 위치를 이동하고, 다시 집어넣을 때는 칼을 다시 Holster의 위치에 배치해야한다.

 

무기를 장착하는 애니메이션을 배치하였음으로 해당 애니메이션의 노티파이를 통해 BP의 커스텀이벤트에 접근하여 실행시키자.

 

커스텀 이벤트에서는 해당 이름에 칼을 원하는 위치로 이동시키게 이벤트를 작성한다.

위와같이, Grap시에는 손으로, UnGrap시에는 다시 허리춤으로 이동시켜준다.

 

이 커스텀 이벤트들을 노티파이를 통해 동작시킨다.

생성방식은 전에 생성했던 노티파이와 같다.

테스트

 


공격모션 설정

 

프로젝트 세팅을 통해 인풋입력값을 받아와서, 공격을 기입해보자.

마우스 왼쪽 클릭을 통해 공격할 것 이다.

키 위치는 액션 매핑이다.

 

액션매핑을 통해 이벤트를 가져올 수 있다면, 이제 Attacking 이벤트를 호출하여 몽타주를 실행시키면 된다.

몽타주 실행의 조건은 위와 같다.

공격중이면 안될 것 이고, 무기를 들 고 있어야한다.

그리고, End_Attacking을 통해 Attacking의 bool변수를 false로 변환시켜주는 이벤트 또한 생성해준다.

 

이 이벤트는 노티파이를 통해 공격 종료 모션의 몽타주에 추가시켜주면 된다.

몽타주의 마지막부분에 End_Attack을 표시한다.

 

테스트

 

 

728x90