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

 

새로운 달리기 애니메이션을 구할 필요 없이 블렌드 스페이스에서 걷기 애니메이션을 1개 더 배치한 후, 재생 속도인 Rate Scale을 조정해 빠르게 달리는 것처럼 보이도록 한다.

 


달리기 시 적용할 GE_State_Sprint 이펙트를 생성한다.

  • 달리기 상태임을 나타내고, 이동 속도 변수의 값을 Modifier를 통해 조절한다.

 


달리는 동안 이펙트를 지속할 것이므로 Duration Policy를 Infinite로 설정한다.

 

Modifier를 통해 캐릭터의 속성을 정의하고 있는 AG_AttributeSetBase 클래스의 MaxMovementSpeed 값을 조정해 이동 속도를 바꾸도록 한다.

  • Attribute: AG_AttributeSetBase.MaxMovementSpeed
  • Modifier Op: Multiply
  • Magnitude Calculation Type: Scalable Float
  • Scalable Float Magnitude: 1.5


속성 Modifier는 이펙트가 적용되는 동안 유지되고 ,이펙트가 종료되면 다시 원상복구된다.

이펙트의 태그인 GameplayEffectAssetTag와 액터에게 적용되는 태그인 GrantedTags의 Added에 State.Movement.Sprint를 추가한다.

 


달리기 능력인 BP_GA_Sprint를 생성한다.

  • 능력의 고유 태그인 Ability Tags에 Ability.Movement.Sprint를 설정한다.
  • 능력과 함께 실행될 이펙트에 상태 태그와 속성 변경을 적용하는 GE_State_Sprint를 추가한다.
    이 능력은 CDO를 통해 실행하고 외부에서 이펙트를 중지시켰던 점프와 달리, 객체화시켜 ActivateAbility() 함수와 EndAbility() 함수를 통해 이펙트의 생명 주기를 직접 관리하도록 한다.
    Instancing Policy의 기본값은 Instanced Per Execution이다.

 


Enhanced Input을 통해 달리기에 사용할 Sprint Input Action을 생성한다.

 


Enhanced Input에 사용되는 DefaultInputMappingContext에 Sprint Input Action을 매핑하고 키를 설정한다.

 


캐릭터의 기본 이펙트, 기본 능력, 기본 애니메이션 데이터 에셋 등을 저장하는 BaseCharacter 데이터 에셋에 달리기 능력인 BP_GA_Sprint를 추가한다.

 


캐릭터 클래스에서 Enhanced Input에 달리기를 바인딩하기 위해 Sprint Input Action의 참조와 콜백 함수들을 선언한다.

 


달리기 능력(BP_GA_Sprint)의 Ability Tags(Ability.Movement.Cprint)를 통해 앉기를 실행하기 위한SprintTags를 선언한다.

 


SetupPlayerInputComponent() 함수에서 Sprint Input Action에 콜백 함수를 바인딩한다.

 


Left Shift 키가 눌리면, TryActivateAbilitiesByTag() 함수에 Ability Tags를 전달해 액터의 Ability System 컴포넌트에서 능력을 직접 실행한다.

 

Left Shift 키를 떼면, CancelAbilities() 함수에 Ability Tags를 전달해 활성화 상태인 능력을 취소한다.

 


변경된 Attribute 값이 Character Movement 컴포넌트에 적용되게 하기 위해서는 그 기능을 그햔해야 한다.

  • 델리게이트를 통해 속성 변경 이벤트를 구독한다.


나중에 델리게이트 구독 취소 등을 수행하기 위해 핸들을 저장하도록 한다.

 


속성 변경 이벤트에 등록할 콜백 함수를 선언한다.

 


속성 변경 델리게이트를 구독할 OnMaxMovementSpeedChanged() 콜백 함수를 구현한다.

 


GAS의 속성 관리는 매우 유용하다.

  • 예를 들어, 이동 속도가 2배가 되는 포션을 먹은 후 이동 속도가 절반이 되는 진흙을 지난다고 하면, 우리가 별도의 변수나 로직을 추가할 필요 없이, GAS는 이펙트로 적용된 모든 변경 사항을 알아서 계산해 이동 속도를 1로 만든다.

 

생성자에서 이동 속도 속성 변경 이벤트에 콜백 함수를 구독자로 등록하고, 나중에 쓸지 모르니 핸들을 저장한다.

 


캐릭터 BP에 Sprint Input Action과 BP_GA_Sprint의 Ability Tags를 변수에 설정해준다.

 

 

GAS를 이용해 속성과 능력, 이펙트를 통해 달리기 능력을 추가했다.

 

'Unreal Engine > Advanced UE5 Multiplayer Programming' 카테고리의 다른 글

벽 달리기 능력  (1) 2023.05.14
뛰어넘기 능력  (0) 2023.05.13
앉기 능력  (0) 2023.05.11
베이스 능력  (0) 2023.05.10
점프 능력  (0) 2023.05.09
profile

Make Unreal REAL.

@diesuki4

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

검색 태그