루리코딩 세상

Unreal Engine 5 : 무기 장착하자 (블랜디드 스페이스 2D, 애님 그래프, 블루프린트 액터 및 캐릭터 함수 호출하기) 본문

이론/Unreal Engine

Unreal Engine 5 : 무기 장착하자 (블랜디드 스페이스 2D, 애님 그래프, 블루프린트 액터 및 캐릭터 함수 호출하기)

루리딩 2025. 6. 4. 10:42

Time Remaining (ratio) (애니메이션 변수명)-> Less -> 결과 순서였다.

Time Remaining ratio가 가장 핵심인데, 변수로 들어가 있는 앞의 행동이 얼마만큼 남아있는지(Less) 문을 통해서

0.3 만큼 남아있는 순간 자연스럽게 흐름이 넘어오는 결과를 만들어냈다.

여기에서 0.3은 애니메이션을 실행하게 됬을 때 볼 수 있는 타임라인에서 0~1을 기준으로 0.3을 의미했다.

우리가 할 수 있는 동작구현은 노티파이를 활용한 변환도 추가될 예정이다.

지금은 단순한 모션의 변환이기 때문에 위와 같은 로직을 통해서, 무기를 뽑아내는 애니메이션을 설정해줬다.

이때 I-die 타이밍에는 입력매핑 스페이스바를 통해서 Falling 이라는 변수를 선언해줬었는데,

무기도 마찬가지로 키보드 입력을 받은 뒤 모션을 취하기 때문에 Drawing 이라는 변수를 선언해줬다.

 

그렇기 때문에 입력을 받는 순간

Draw_Sword_1(꺼내기시작하는)->Draw_Sword_2(모두뽑아낸)

애니메이션으로 자동으로 변환되는 로직이었다.


애니메이션 추가 이후 블루프린트 설정하기.


 먼저 무기를 꺼내는 모션을 위해서, 애니메이션의 입력을 받는 키를 할당해줬다.

여러가지 무기를 가정하고 만들고 있기 때문에 키보드의 '1' 키를 누르게 됬을 때

Sword라는 무기를 꺼내는 로직으로 구현할 것이다.

그렇다면 해당 액션 매핑은 누가받는가?

"캐릭터 블루 프린트" 클래스로 할당을 초기에 했었다.

게임을 플레이하는 플레이어가 해당 블루 프린트를 사용하기 때문에, 지금부터는 블루 프린트 클래스를 설정해야한다.

<<액션 매핑 Weapon_1_Sword>>에서 시작하는 하나의 이벤트(로직)을 추가할 예정이다.

변수는 Equipped(장비를 갖추고 있다.)

즉 입력 매핑을 "1" 번키를 Pressed 눌렀을 때,

True와 False로 나누게 되는데,

이는 각각 무기를 현재 착용을 하고 있는 가? 아닌 가? 에 대한 판단 근거를 만들어주는 로직이 된다.

하지만 이때 무기를 착용하고 있지 않기 때문에,

무조건 False로 빠지게 된다.

 

 

 


 

 

이때 추가적으로 장착 중이다,

라는 우리가 위에서 만든 애니메이션을 적용할 변수와 이벤트를 만드는데

이때 사용하는 것은 [ InputAction ] 매핑이 아닌 [ Custom Event ]를 사용하여 새로운 변수와 이벤트를 생성해준다.

 

커스텀 이벤트 활용 방법은 따로 정리해야겠다.


<<Custom Enent>>가 실행됬을때 if(Branch) 판단한다. False일때 Equiping(SET)이 Equipping이 체크를 하면 True가 되는 것이다.

 

 

 


이후에 함수를 호출하는 로직을 추가하는데, 이때 호출되는 함수는 우리가 앞서서 만들어둔

<<Custom Event>>가 된다.

 

해석하면 액션매핑 "1"번 키가 누른 것이 True가 되었을 때는 동작을 할 것이고, 

Condition(상태, 조건)이

Equipped 상태일 경우에는 False로 변환해준다.

False는 Equip이라는 함수를 호출하게 되는데, 이 로직을 통해서 무기를 장착하였을 때의 행동 애니메이션을 호출하여 자연스러운 흐름을 만들게 해준다.

 

 

 

 


다시 돌아와서, 애니메이션 그래프로 Sequence(시퀀스) 기능을 활용해서 추가적인 애니메이션이 실행 될 수 있도록 해준다.

 

[애니메이션 블루프린트] ->[이벤트 그래프] 에 선언되어 있는 Character에는

단순히 변수이기 때문에, 이때 이 변수를 ((함수가 선언되어 있는 클래스))로

"변환" 해주어야 하는 데, 변환에 사용하는 것을

[ Cast to ((변환하고자하는 블루프린트 클래스)) ] 를 통해서 변환해주었다.

 

아래와 같이 ((BP_Character))에 선언되어 있는 내부 변수를 혹은

[Custom Event]를 블루 프린트 클래스에서

"호출"하는 것처럼 불러 올 수 있었다.

[애니메이션 그래프] 에 선언된 Character 변수를 다운캐스팅을 통해서 [BP_Character]로 변환해 준뒤, [BP_Character]에 선언되어있는 '1' 번 액션매핑 시 선언된, Equipping 변수를 통해 [애니메이션 그래프]에 선언된 변수인 <<Drawing>>이 결과를 얻으며 아래와 같은 애니메이션이 적용되는 것을 볼 수 있다.

 

하지만, 이 모션에 따라서 현재 Holster에 장착되어있는

[액터 클래스]-[BP_Sword]가 모션으로 이동되지 않는

문제점과 해당 애니메이션의 그 다음 동작이 구현되지 않아

멈추는 문제점 두가지가 발생했다.

 

 

 

 

 

- 다음 설정 로직 (블랜드 스페이스 2D로 축개념을 추가시킨 애니메이션 추가하는 로직 만들어보기)

##무기를 [스켈레탈 메시-Holster] 에서 변경 할 위치로 설정해주기, 나머지는 블루프린트에서 자동으로 계산해준다.. ㅠㅠ

##꺼내어진 무기에 맞춰 적절한 애니메이션 넣어주기

##캐릭터 클래스 블루프린트(Character), 액터 클래스 블루프린트(Sword) 와 애님 그래프, 이벤트 그래프 코드 구현해주기

현재까지 완료된 상태, 무기를 뽑은 뒤 애니메이션이 없다.

 


블랜드 스페이스 2D 설정하기


Axis Settings 자체가, 1D와는 다르게 2D로 Y축이 추가된 것을 볼 수 있다.

X, Y 축을 활용해서 [블랜드 스페이스 2D] 축 매핑을 진행하면

다음과 같아졌는데. 중앙을 중심으로 방향성은 다음과 같았다.

[Left(왼쪽)<<>>Right(오른쪽)] 방향성을 가지고 캐릭터가 움직이는 것을 확인이 가능했다

 

이후 [AnimGraph] 설정을 해주어야 한다.

생성된 BS_Character_Sword[블랜디드 스페이스 2D 클래스]
새롭게 x,y 축에 알맞는 변수 추가 float 형식의 'Direction' 을 추가했다.

다시 [애니메이션 클래스] -> EventGraph로 돌아오자

추가된 함수는 (Get Control Rotation), (Calculate Direction), (Direction(블랜디드 스페이스 2D에서 선언된 X축))

3개를 추가했다. 각각의 역할은 다음과 같다.

Get Control Rotation 플레이어 또는 AI '컨트롤러'가 바라보는 방향을 반환하는 노드.
플레이어의 시야 방향이나 마우스 방향을 나타낸다.
- 움직임 처리
- 카메라 회전 방향
Calculate Direction 캐릭터의 이동 방향(Velocity)과 컨트롤 회전 방향 사이의 각도 계산
에니메이션 블랜딩을 도와주는 노드
 반환 값 -180~+180 사이의 Yaw 값(좌, 우 방향성)
  • 0° = 정면
  • 90° = 오른쪽
  • -90° = 왼쪽
  • 180° or -180° = 뒤
- 방향 애니메이션 블랜딩
Direction 축 매핑 값 인식  

 

무기를 꺼내는 모션까지 적용된 상태...

노티파이를 활용한 애니메이션 블랜디드로 자연스러운 동작 구현하기


1. [노티파이 변수 선언해주기]

- [애님 인스턴스/애니메이션 클래스]에서 "Evnet"로 호출을 하기 위해서는 노티파이라는 기능을 설정해줘야한다.

- 애님 노티파이는 애니메이션 클래스 로드 라인에서 '새 노티파이 추가' 기능을 활용한다.

새 노티파이 기능을 활용해 ANS_Equip 기능을 추가해줬다. 원하는 타임라인에 적용한 것을 기점으로 함수를 호출하는 포인터의 역할을 하는 듯하다.

[애님 인스턴스], [블루 프린트] 각각의 클래스 안에서 정상적으로 함수가 호출되는 것을 확인 할 수 있었다.

함수를 호출하지 않으면, 동작을 구현시킬 수 없으니 필수적인 요소이기도하고 언리얼 엔진에서 작동하는 방식이

C++이나 지금 현재 병렬로 배우고 있는 DirectX에서보다는 훨씬 더 편리한 요소처럼 다가왔다. ㅜ-ㅜ

DirectX도 언능 정리해야 개념이나 활용법에 대해서 눈에 익을 듯하다.. 아무튼

 

호출된 custoem Event를 활용해서 동작을 구현해보자.

 


앞으로..


 

- 복습하면서 추가하는 내용,,함수 이름을 뭘로하는게 좋을까? 내가 아는 단어가 너무 적다. -> 영어 공부 틈틈히 계속하자

- 현재 말해보카로 학습하는 내용은 일반적인 단어라서 잘 사용안하는데, 따로 단어장을 만들자

- 블랜드 스페이스 2D를 활용해서 조금 더 캐릭터가 자연스럽게 움직이는 것을 활용해서, 1D로 만들어진 걷고 뛰는 동작을

오른쪽, 왼쪽, 뒤로 움직이는 동작을 추가해주면 더 좋을 듯 하다.