1일1알

Gameplay Effect 본문

언리얼/Gameplay Ability System

Gameplay Effect

영춘권의달인 2024. 7. 2. 18:00

Gameplay Effect (GE)

  • GAS는 게임에 영향을 주는(대부분 게임 데이터를 변경) 객체를 별도로 분리해서 관리하는데, 이것이 Gameplay Effect
  • 대부분의 GE와 어트리뷰트는 함께 동작
  • 세가지 타입 존재
    • Instant : 어트리뷰트에 바로 적용되는 GE, 한 프레임에 실행됨
    • Duration : 지정한 시간 동안 동작하는 GE
    • Infinite : 명시적으로 종료하지 않으면 계속 동작하는 GE

GameplayEffect 클래스를 상속받아서 구현, 함수를 통해 구현되는 기능은 거의 없고 대부분 기본 설정을 통해 사용

DurationPolicy를 지정

어트리뷰트에 어떻게 적용할지에 대한 명세를 지정해줘야 함, 이것을 Modifier라고 함

Gameplay Effect Modifier

  • GE에서 어트리뷰트의 변경 방법을 지정한 설정을 모디파이어라고 함
  • 모디파이어의 사용 방법
    • 적용할 어트리뷰트 지정
    • 적용 방식 설정(더하기, 곱하기, 나누기, 덮어쓰기)
  • 모디파이어의 계산 방법
    • ScalableFloat : 실수 (데이터 테이블과 연동 가능)
    • AttributeBased : 특정 어트리뷰트에 기반
    • CustomCaculationClass : 계산을 담당하는 전용 클래스의 활용
    • SetByCaller : 데이터 태그를 활용한 데이터 전달
  • 모디파이어 없이 자체 계산 로직을 만드는 것도 가능 (GameplayEffectExecutionCaculation)
  • C++로 설정하기에는 문법이 복잡해서 블루프린트로 제작하는것이 권장됨

MakeOutgoingGameplayEffectSpce(GE)를 통해 GE의 핸들을 얻어와서

ApplyGameplayEffectSpecToTarget(CurrentSpecHandle, CurrentActorInfo, CurrentActivationInfo, 얻어온 핸들, 타겟의 FGameplayAbilityTargetDataHandle) 를 통해 GE를 발동

 

레벨과 커브 테이블

  • GE에는 추가적으로 레벨 정보를 지정할 수 있음
  • GE에 저장된 레벨 정보를 사용해 데이터 테이블에서 특정 값을 가져올 수 있음
  • ScalableFloat 모디파이어 타입에서 이를 사용하는 것이 가능
  • 이것을 활용해 다양한 기능 구현 가능
    • 콤보 공격시 증가하는 데미지
    • 현재 캐릭터 레벨에 따른 초기 스탯
  • 에디터를 통해 쉽게 제작 가능

GE의 생성 과정

  • GE는 GE 컨텍스트와 GE 스펙을 통해 생성할 수 있음
  • GE 컨텍스트 : GE에서 계산에 필요한 데이터를 담은 객체
    • 가해자(Instigator), 가해수단(Causer), 판정정보(HitResult) 등등
  • GE 스펙 : GE에 관련된 정보를 담고 있는 객체
    • 레벨, 모디파이어 및 각종 태그에 대한 정보
    • GE 컨텍스트 핸들
  • ASC는 각 데이터를 핸들 객체를 통해 간접적으로 관리함
  • 따라서 이펙트 컨텍스트 핸들을 만든 후, 이펙트 스펙 핸들을 생성하는 순서로 진행되어야 함
  • GE Context Handle -> GE Spec Handle

기간형 GE

  • 인스턴트 타입이 아닌 GE
    • Duration : 지정한 시간 동안 동작하는 GE
    • Infinite : 명시적으로 종료하지 않으면 계속 동작하는 게임플레이 이펙트
  • 인스턴트 타입은 한 프레임에 종료되기 때문에, 상태를 가질 수 없음
  • 기간형 GE는 유효 기간동안 태그와 같은 상태를 가질 수 있음
  • 기간형 GE는 중첩이 가능
  • 모디파이어를 설정하지 않아도 다양하게 활용 가능
  • 인스턴트는 Base값을 변경, 기간형은 Current값을 변경하고 원래대로 돌려놓음

Duration에서도 Period를 조절하면 BaseValue를 변경하여 도트데미지 같은 효과를 구현할 수 있음

'언리얼 > Gameplay Ability System' 카테고리의 다른 글

Attribute  (0) 2024.07.02
Ability Task (AT)  (0) 2024.06.17
Gameplay Tags  (0) 2024.06.16
Gameplay Abilities (GA)  (0) 2024.06.16
Ability System Component (ASC)  (0) 2024.06.16