Post

Unreal: Gameplay Ability System(GAS) - Gameplay Effect (GE)

Unreal: Gameplay Ability System(GAS) - Gameplay Effect (GE)

Gameplay Effect (GE)

AttributeSet에서 설정한 속성들을 어떻게 변경시킬지에 대한 정보를 담는 클래스이다. 일종의 데이터 에셋같은 형태이기에, 에디터상에서 작업하는 비중이 큰편이다. 변화의 시간, 방식, 계산, 중첩등 다양한 요소에 대해 설정할 수 있으며, 생성 후에는 GA나 다른 GAS시스템에서 속성을 변경하는데 사용할 수 있다. 체력, 마나같은 수치부터, 쿨타임같은 시스템까지 GE를 통해 구현할 수 있다.

image

  • DurationPolicy - 어떻게 활성화될지를 결정, 어떻게 깎을지 결정
    • Instant
      • 수치 변경 즉시 적용
      • Duration/Stack/Period 개념과 무
      • 아이템 사용, 스킬 사용등등
    • Infinite
      • 제거되기 전까지 계속 적용 상태
      • Period - 반복 간격
        • 있으면 주기적 실행
        • 없으면 버프/태그부여/상태유지 등 목적으로 사용 가능
      • Ex)패시브 체력회복, 패시브 버프, 허기 수치 등
    • Has Duration
      • 정해진 시간동안 계속 적용 상태
      • Period - 효과 반복 주기
        • 있으면 지속시간동안 주기적으로 발생
        • 없으면 일정시간 유지되는 버프/디버프
      • Duration
        • Scaleable Float Magnitude - GE 유지되는 총 시간
      • Ex)독뎀, 불뎀 등
    • Infinite/HasDuration은 아래 Active GameplayEffect로 남을 수 있고, 이에 따라 뒤에나올 Stacking 중첩 횟수로 카운트 될 수 있다.
  • Modifiers - 실제 변경 정책
    • Attribute - 변경할 대상 속성
    • Modifier Op - 어떻게 변경할지, 연산 형태
    • Modifier Magnitude - 얼마나 변경할지
    • 여러 속성 변경하고 싶으면 여러개 추가 가능하고, 순차대로 실행된다.
  • Stacking - 변경사항의 중첩 관련 설정
    • Stacking Type - 어떻게 중첩할지
      • None - 스태킹 없음, 관리 안함
      • Aggregate by Source - 적 캐릭터/호출 주체당 중첩횟수 제한
      • Aggregate by Target- 대상마다 중첩횟수 제한
    • Stack Duration Refresh Policy
      • 중첩 기간(Duration) 새로고침 정책, 때문에 Duration이 설정될 때만 의미가 있다. (Has Duration)
      • Refresh on Successful Application - 성공시에만 새로고침
      • Never Refresh - 새로고침 안함.
    • Stack Period Reset Policy
      • 중첩 간격(Period)에 관한 새로고침 정책, 때문에 Period가 설정되어 있을 때만 의미가 있다.(Infinite/Has Duration)
      • Reset on Successful Application - 성공시에만 새로고침
      • Never Refresh - 새로고침 안함.
    • Stack Expiration Policy

GA의 Costs에서 Cost Gameplay Effect Class만 설정해주면 GA를 사용할 때마다 깎이게 만들 수 있다.

  • Cost GE는 보통 Instant GE로 만든다.
  • 비용으로 깎을 Attribute가 AttributeSet에 있어야 한다.
  • CanActivateAbility 단계에서 Cost를 지불 가능한지 확인되고, CommitAbility 시점에 실제 Cost가 적용된다.
  • ActivateAbility 안에서 CommitAbility 또는 CommitCost가 호출되지 않으면 기대처럼 적용되지 않을 수 있다.

또한 Cooldowns에서 Cooldown Gameplay Effect Class로 GE를 설정해주면 쿨타임으로 사용할 수 있다.

  • Cooldown GE는 보통 Has Duration GE로 만들고 Duration을 통해 쿨타임을 설정한다.
  • 쿨다운 판단에는 Cooldown Gameplay Tags가 중요하다.
  • Cooldown GE에서 부여하는 태그를 확인 하고, ASC에서 해당 태그가 붙어있으면 재사용을 막는다.

기존에 GA에서 연결했던 GC를 GE에 엮어놓는 방법도 있다. 오히려 관리하기는 더 쉽다. 다만 실행 시점이 달라질 수 있어 주의를 필요로 한다. 실제 실행에서 로그를 찍어본 후 어떤 실행 시점이 원하는 타이밍인지 확인해서 연결하면 좋다.

This post is licensed under CC BY 4.0 by the author.