Gameplay Effect

1000·2024년 5월 9일
0

UE5 Study

목록 보기
7/8

게임플레이 어트리뷰트 및 게임플레이 이펙트 문서를 기반으로 합니다.

Gameplay Effect (게임플레이 이펙트)는 GAS에서 어트리뷰트를 변경하기 위한 방편입니다. 여기에는 다음이 포함됩니다.

  • 어트리뷰트의 기본 값에 대한 직접 변경으로, 피해를 받은 액터에서 생명력을 줄이는 것입니다.
  • 임시 변경(보통 "버프" 또는 "디버프"라는 것)으로, 몇 초 동안 이동 속도를 증폭하는 것입니다.
  • 시간에 따라 적용되는 지속 변화로, 일정 기간 동안 (또는 항상) 초당 마나를 얼마씩 재생하는 것입니다.

게임플레이 이펙트는 (Base 클래스가 UGameplayEffect 인) 데이터 전용 블루프린트로 구현하여 어빌리티 시스템 컴포넌트와 상호작용하고 적합한 경우 시전 도중 저장할 수 있습니다.

주요 프로퍼티

게임플레이 이펙트는 GAS의 다른 대부분과 달리 보통 UGameplayEffect 베이스 클래스를 네이티브로도 블루프린트 코드로도 오버라이드하지 않습니다. 대신 게임플레이 이펙트는 순전히 변수를 통해 설정하도록 설계되었습니다. 다음은 조정할 수 있는 게임플레이 이펙트의 주요 프로퍼티 중 일부입니다.

  • Duration: 기간 - 게임플레이 이펙트 적용 기간은 즉시(Instant) (공격받을 때의 생명력 감소), 또는 제한된 시간 동안(Duration) (몇 초 동안 지속되는 이동 속도 버프), 또는 무한(Infinite) (시간에 따라 자연 재생되는 캐릭터의 마나) 등입니다. 추가로 기간이 즉시가 아닌 이펙트는 간격을 다르게 해서 적용할 수도 있습니다. Duration 타입은 Base값은 유지한 상태에서 Current 값만 변경하고 지속시간이 끝나면 Current값을 Base값으로 되돌리도록 구현되어 있습니다.

  • Modifiers and Executions: Modifiers는 게임플레이 이펙트가 어트리뷰트와 작용하는 방식을 결정합니다. 여기에는 "방어도 5 프로 상승"과 같은 어트리뷰트 자체에 대한 수학 연산(+, -, *, =)은 물론, 이펙트 실행에 필수인 게임플레이 태그도 포함됩니다. 게임플레이 이펙트에 Modifiers가 지원하는 것 이상의 무언가가 필요할 때는 Executions이 좋을 수 있습니다. Executions은 UGameplayEffectExecutionCalculation 를 사용하여 실행 시 게임플레이 이펙트가 가질 커스텀 작동방식을 정의합니다. 모디파이어로는 제대로 다룰 수 없는 복잡한 방정식을 정의할 때 특히 좋습니다.

  • Granted Abilities: 부여된 어빌리티 - 게임플레이 이펙트는 적용되면 게임플레이 태그뿐 아니라 어빌리티도 부여할 수 있습니다. Executions과 함께 사용하면, 매우 구체적인 게임플레이 조합을 구성할 수 있습니다. 예를 들어 화염 테마의 게임플레이 이펙트에 액터가 맞았는데, 그 액터가 기름에 젖었음을 나타내는 게임플레이 태그 또는 어트리뷰트가 있는 상태였다면, "On Fire" (소각) 어빌리티가 생기면서 다음 10 초 동안 주변 액터에게 수동 피해를 입히고 파티클 및 다이내믹 라이트로 된 비주얼 이펙트가 생기는 식입니다.

  • Stacking: 스태킹 - 이미 어떤 버프 또는 디버프(이 경우 게임플레이 이펙트)를 가진 대상에게 다시 적용하는 것은 물론 어떤 상황을 처리하는 정책을 말합니다. 그 상황 중에는 Overflow (오버플로우)라는 것이 있는데, 원래 대상에 있던 게임플레이 이펙트가 포화 상태에 달하면 새로운 게임플레이 이펙트가 생기는 것을 말합니다 (예를 들어 중독 게이지가 쌓이다가 오버플로우가 되었을 때만 독 지속 피해를 입히는 경우입니다). 시스템에서 지원하는 스태킹 방식은 여러가지 다양합니다. 중첩될 때마다 지속 기간을 갱신하면서 "스택 수"를 유지하다 최대치를 넘으면 어떤 일정 기간 이펙트의 지속 기간이 리셋 또는 추가되도록 하거나, 그냥 이펙트의 여러 인스턴스에 개별 타이머를 독립적으로 적용할 수도 있습니다.

  • Gameplay Cue Display: 게임플레이 큐 디스플레이 - Gameplay Cues (게임플레이 큐)는 파티클이나 사운드같은 장식성 이펙트를 관리하는 방식이며, GAS로 제어할 수 있습니다. 게임플레이 어빌리티와 게임플레이 이펙트로 발동시킬 수 있으며, 주로 On Active (시전 시), While Active (시전 도중), Removed (제거 시), Executed (실행 시, 게임플레이 이펙트 전용)과 같은 네 가지 방식으로 작동하지만 네이티브 또는 블루프린트 코드에서 오버라이드 가능합니다. 모든 게임플레이 큐에는 "GameplayCue"로 시작하는 게임플레이 태그를 붙여야 합니다. (예: "GameplayCue.ElectricalSparks", "GameplayCue.WaterSplash.Big"). 게임플레이 큐의 재생은 GameplayCueManager가가 관리합니다.

이펙트와 어트리뷰트의 상호작용

게임플레이 이펙트가 어트리뷰트를 수정 시도하면 어트리뷰트가 반응하는 방식을 처리하기 위해 어트리뷰트 세트가 오버라이드할 수 있는 함수가 많습니다. 예를 들어 UMyAttributeSet 샘플의 "Health" 어트리뷰트는 부동소수점을 저장할 수 있고, 게임플레이 어빌리티 시스템에서 그 값에 액세스하여 변경할 수 있지만, 생명력이 0 이 되어도 아무런 일도 발생하지 않고, 0 미만으로 떨어지는 것을 막을 수도 없습니다. "Health" 어트리뷰트가 원하는 대로 작동하도록 하려면, 어트리뷰트 세트 자체에서 자신의 어트리뷰트에 대한 수정 시도를 처리하는 여러 가상 함수를 오버라이드하면 됩니다. 어트리뷰트 세트가 흔히 오버라이드하는 함수는 다음과 같습니다.

함수 이름목적
PreAttributeChange / PreAttributeBaseChange어트리뷰트에 대한 수정 직전 호출되는 함수입니다. 어트리뷰트의 값에 대한 규칙을 적용하기 위한 것이며, 예로 "Health 값은 0 과 MaxHealth 사이여야 한다"거나, 어트리뷰트 변화에 게임내 반응을 발동하지 않는다던가 식입니다.
PreGameplayEffectExecute어트리뷰트의 값 수정 직전, 이 함수가 제안된 수정을 거부하거나 변경할 수 있습니다. 예로 무적인 경우, Health 값을 변화시키지 않는다.
PostGameplayEffectExecute어트리뷰트의 값 수정 직후, 이 함수가 변화에 반응할 수 있습니다. 보통 어트리뷰트 최종 값에 대한 클램핑(범위 제한)이나 새 값에 대한 게임내 반응, 즉 "Health" 어트리뷰트가 0 으로 떨어지면 사망 효과 발동 등이 포함됩니다.

게임플레이 이펙트 생성 과정

GE는 GE Context와 GE Spec으로 구성되며, GE Context는 GE에서 계산에 필요한 데이터를 담은 객체이고 GE Spec은 GE에 대한 정보를 담고 있는 객체 입니다. ASC에서는 각 데이터를 Handle 객체를 통해 관리하고 있으므로, GE Context 객체를 만들고 Handle을 할당한 뒤, GE Spec 객체를 만들어 GE Context Handle을 Spec에 담고 GE Spec Handle 을 만들어 사용하는 식으로 GE 를 코드로 생성할 수 있습니다.

profile
Game Programming

0개의 댓글