Gameplay Effects 개념

Lee Raccoon·2024년 9월 12일
0

게임플레이 어트리뷰트 및 게임플레이 이펙트

Gameplay Effects

그게 뭔데

UGameplayEffect라는 타입의 오브젝트가 있다.
이 오브젝트는 AttrubutesGameplayTags를 바꾸는데 사용된다.

UGameplayEffect의 서브클래스를 만들지 않는다.
블루프린트로도, 코드 베이스로도 만들지 않으며 오로지 변수를 통해 설정되도록 설계되었다.

주요 프로퍼티

Modifier

얘는 Attributes를 변경할 때 어떤 계산, 로직 등을 게임 플레이에 맞춰 수행할 수 있다.
사용 할 수 있는 연산자는 아래와 같다.

  • Add
  • Multiply
  • Devide
  • Override : 받은 값으로 덮어 씌우기

연산에 사용할 수 있는 값 타입에는 아래와 같은 것들이 있다.

  • Scalable Float : 그냥 기본적인 수
  • Attributes Based : Attribute의 값을 가져오는 것
  • Custom Calculation Class (MMC) : 스탯에 따라 효과가 다르게 적용 되는 등의 계산에 쓰임
  • Set by Caller : GameplayTag를 이용해서 값을 외부 요인에 따라 변경할 수 있다.

Execution

얘도 Attribute 변경할 때 쓰고 특히 복잡한 계산에 쓴다.

  • GameplayEffectExecutionCalculation :
    장황한 이름만큼 Attribute를 변경하는데 가장 강력한 방법이다.
    복잡한 계산에 쓰인다. (피해량 계산을 생각해보면 공격력, 방어력, 디버프 등 많은 것을 고려해야하는데 그런 거 아닐까)

Duration

  • Instant -> 즉각적 효과 (예: 포션먹고 HP 회복)
  • Duration -> 일시적 효과 (예: 디퍼브 맞고 20초동안 방어력 감소)
  • Infinite -> 영구적 효과 (예: 레벨업으로 능력치 상승)

저번에 Attribute에는 Base Value와 Current Value 두가지가 있다고 했다.
Instant는 Base Value에 영향을 미치고
Duration, Infinite는 Current Value에 영향을 미친다. 즉, 영향을 받기 전으로 되돌아 갈수가 있다.
Periodic이라는 것도 있는데, 얘는 Base Value에 점진적으로 영향을 끼치는 것이다.
활용할 때 생각하면서 사용하자!

Grant Abilities

게임 플레이 이펙트가 적용되면 어빌리티를 부여할 수 있다.
이를 Execution과 함께 적용하면 구체적인 게임플레이를 구현할 수 있다.
예를 들어 빙속성 공격을 맞은 경우 액터가 수속성일 때 '얼어붙음'이라는 어빌리티를 얻어 해당 시간 동안 얼어붙은 이펙트와 대미지를 받은 그런 로직을 구현할 수 있다.

Stacking

Overflow 상태를 처리하는 정책이다.
Overflow 상태란, 원래 타깃에 적용되어 있던 게임플레이 이펙터가 포화상태일 때 새로운 효과를 발동 시키는 것이다.
우리가 평소에 아는 스택과 비슷한 개념이라고 생각하면 될 듯 하다.
스몰더가 스택을 다 쌓으면 처형 능력을 얻는 것 처럼

Effect와 Attribute의 상호작용

예를 들어 Effect로 Health라는 Attribute를 깎았다.
그럼 우리는 Health가 0이 되면 죽게 될 것이라고 예상하는데 실제로는 여기서는 아무 일도 일어나지 않는다.
0이 되면 죽는 로직을 추가해주어야 하는데 이를 쉽게 추가할 수 있도록 여러 가상 함수를 오버라이드 할 수 있다.

PreAttributeChange / PreAttributeBaseChange : 수정 직전에 호출되는 함수
PreGameplayEffectExecute : 수정 직전에 제안된 수정을 거부하거나 변경할 수 있다.
PostGameplayEffectExecute : 수정 직후 변경사항에 대한 반응을 여기서 처리할 수 있다.

profile
영차 영차

0개의 댓글