UGameplayEffect
라는 타입의 오브젝트가 있다.
이 오브젝트는 Attrubutes
와 GameplayTags
를 바꾸는데 사용된다.
UGameplayEffect
의 서브클래스를 만들지 않는다.
블루프린트로도, 코드 베이스로도 만들지 않으며 오로지 변수를 통해 설정되도록 설계되었다.
얘는 Attributes를 변경할 때 어떤 계산, 로직 등을 게임 플레이에 맞춰 수행할 수 있다.
사용 할 수 있는 연산자는 아래와 같다.
연산에 사용할 수 있는 값 타입에는 아래와 같은 것들이 있다.
얘도 Attribute 변경할 때 쓰고 특히 복잡한 계산에 쓴다.
저번에 Attribute에는 Base Value와 Current Value 두가지가 있다고 했다.
Instant는 Base Value에 영향을 미치고
Duration, Infinite는 Current Value에 영향을 미친다. 즉, 영향을 받기 전으로 되돌아 갈수가 있다.
Periodic이라는 것도 있는데, 얘는 Base Value에 점진적으로 영향을 끼치는 것이다.
활용할 때 생각하면서 사용하자!
게임 플레이 이펙트가 적용되면 어빌리티를 부여할 수 있다.
이를 Execution과 함께 적용하면 구체적인 게임플레이를 구현할 수 있다.
예를 들어 빙속성 공격을 맞은 경우 액터가 수속성일 때 '얼어붙음'이라는 어빌리티를 얻어 해당 시간 동안 얼어붙은 이펙트와 대미지를 받은 그런 로직을 구현할 수 있다.
Overflow 상태를 처리하는 정책이다.
Overflow 상태란, 원래 타깃에 적용되어 있던 게임플레이 이펙터가 포화상태일 때 새로운 효과를 발동 시키는 것이다.
우리가 평소에 아는 스택과 비슷한 개념이라고 생각하면 될 듯 하다.
스몰더가 스택을 다 쌓으면 처형 능력을 얻는 것 처럼
예를 들어 Effect로 Health라는 Attribute를 깎았다.
그럼 우리는 Health가 0이 되면 죽게 될 것이라고 예상하는데 실제로는 여기서는 아무 일도 일어나지 않는다.
0이 되면 죽는 로직을 추가해주어야 하는데 이를 쉽게 추가할 수 있도록 여러 가상 함수를 오버라이드 할 수 있다.
PreAttributeChange / PreAttributeBaseChange
: 수정 직전에 호출되는 함수
PreGameplayEffectExecute
: 수정 직전에 제안된 수정을 거부하거나 변경할 수 있다.
PostGameplayEffectExecute
: 수정 직후 변경사항에 대한 반응을 여기서 처리할 수 있다.