Make Unreal REAL.
article thumbnail
Advanced Unreal Engine 5 Multiplayer Gameplay Programming

 

왼발, 오른발에 따라 재생 위치를 달리 하고, 다른 소리 혹은 VFX를 재생할 수 있도록 새로운 열거형을 정의한다.

 

 

발자국 소리와 VFX 등을 관리할 FootstepsComponent 액터 컴포넌트를 생성한다.

 


Tick 기능은 사용하지 않을 것이므로 꺼주고, TickComponent() 함수도 주석 처리해준다.

 


Skeletal Mesh 에셋에서 왼발, 오른발 소켓 이름을 확인 후, Footsteps 컴포넌트에 하드코딩한다.

  • 캐릭터에 Footsteps 컴포넌트를 선언할 때, Editable로 설정하고 BP에서 지정해줘도 된다.

 


열거형이 선언되어 있는 헤더를 포함하고, 발자국 이벤트 시 처리할 함수를 선언한다.

 


헤더를 포함한다.

 

 

HandleFootstep() 함수를 구현한다.

  • GetSocketLocation() 함수는 소켓 뿐만 아니라, Bone의 위치도 가져올 수 있다.

 


기능을 디버깅하는 습관은 나중에 버그 잡는 시간을 줄여주기 때문에 꼭 필요하다.

 

static TAutoConsoleVariable(키 문자열, 기본값, 설명, 종류) 형식의 콘솔 변수를 선언한다.

  • 콘솔 변수는 플레이 도중 ` 키를 눌러 콘솔을 열어 값을 바꿀 수 있다.
  • 아래에서는 설명이 여러 줄임에 유의한다.
  • ECVF_Cheat
    Final 빌드가 아닐 때는 값을 변경할 수 있지만, Final 빌드에서는 유저가 값을 변경할 수 없다.

 

 

HandleFootstep() 함수에 ShowDebugFootsteps를 키 문자열로 갖는 CVarShowFootsteps 콘솔 변수의 값에 따라, 뷰포트에 디버깅 정보를 표시하는 부분을 추가한다.

  • TAutoConsoleVariable<T>::GetValueOnAnyThread() 함수를 통해 값을 가져올 수 있다.

 

UObject::GetNameSafe() 함수는 전달된 언리얼 오브젝트가 NULL이면 None을 반환하고, 아니면 오브젝트의 이름을 반환한다.

 

 

캐릭터 클래스에 Footsteps 컴포넌트와 Getter를 추가한다.

 

 

생성자에서 컴포넌트를 할당해주고, Getter를 구현한다.

 

 

발자국 타이밍은 애니메이션마다 다르기 때문에, 올바른 타이밍에 발자국 소리를 재생하기 위해 애님 노티파이를 사용한다.


새로운 AnimNotify_Step C++ 클래스를 생성한다.

 


발자국 열거형을 사용하기 위해 헤더를 포함한다.

 

왼발인지, 오른발인지 지정할 수 있도록 한다.


애님 노티파이를 커스터마이징하기 위해 Notify() 함수를 오버라이드한다.

 


오버라이드 한 Notify() 함수를 구현한다.

  • 왼발, 오른발에 따라 Foot 값이 달리 전달된다.

 


블렌드 스페이스에 사용된 모든 보행 애니메이션에서 왼발, 오른발 애님 노티파이를 추가해준다.

  • 애님 노티파이는 새로 생성했던 AnimNotify_Step을 사용해줘야 한다.

 


PM_Default, PM_Wood 피지컬 머티리얼에 발자국 사운드를 지정해준다.

 


테스트 해보면 바닥일 때와 나무일 때 다른 발자국 소리가 나는 것을 확인할 수 있다.

 

` 키를 눌러 콘솔을 열고, "ShowDebugFootsteps 1"을 입력해 CVarShowFootsteps 콘솔 변수에 값을 설정해주면 시각적으로 디버깅할 수 있다.

 

profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그