내일배움캠프 86일차 - 언리얼 C++ 심화: GAS (Game Ability System) - 2 [GameplayEffect]
게임플레이 이펙트
지정된 시간동안 어떠한 효과를 낼 수 있는 기능이다. 주로 GameplayCue, GameplayAbility와 엮어 쓰인다.
디테일 속성
경과시간 정책
- Instance
: 즉시 적용되고 사라짐.
: Active Effects에 남지 않는다.
: Damage, 힐, 스탯변경, 자원소비 등에 사용됨
- Has Duration
: 일정 시간 동안 n초에 한번 씩 작동 후 자동 제거.
: Active Effects에 남음.
: 도트데미지, 쿨타임, 버프 등에 사용.
- Infinite
: 수동으로 Remove하기 전까지 유지
: Active Effects에 남음.
: 패시브, 체력 자연회복 등
모디파이어
- 컴포넌트
: 해당 이펙트가 적용되면 실행할 행동이다.
: [타깃 액터의 태그 부여]의 경우 이펙트가 적용되는 동안 태그를 부여하거나 제거할 수 있다.
- 어트리뷰트
: 액터가 가진 AttributeSet의 값을 조절할 수 있다.
: Add, Multiply, Divide 등 각종 연산을 시행할 수 있다.
- 스케일 가능 플로트 크기
: 얼만큼 계산할지 정할 수 있다.
스태킹
- None: 중첩에 제한이 없다.
- Aggregate by Source: 피격자가 공격자 수에 비례하여 스택을 중첩으로 받을 수 있다.
ex) 값이 4이면, 공격자가 2명일때 피격자는 스택을 8스택까지 받는다.
- Aggregate by Target: 피격자가 자체적으로 받는 스택을 제한한다.
ex) 값이 4이면, 공격자가 아무리 많아도 피격자는 스택을 4스택까지 받는다.
스택 경과시간 새로고침 정책
- Refresh on Successful Application: 스택을 받으면 지속시간이 초기화된다.
ex) 10초동안 3초마다 데미지를 받는 디버프가 지속 중일 때, 같은 디버프가 중첩되면 피격 주기는 그대로, 지속시간만 10초로 초기화.
- Never Refresh: 디버프가 갱신되어도 지속시간은 변하지 않는다.
스택 기간 리셋 정책
- Reset on Successful Application: 스택을 받으면 작동주기가 초기화된다.
ex) 10초동안 3초마다 데미지를 받는 디버프가 지속 중일 때, 같은 디버프가 중첩되면 지속시간은 그대로, 피격 주기는 3초로 초기화하고 즉시 주기가 작동한다.
- Never Refresh: 디버프가 갱신되어도 작동주기의 진행률이 초기화되지 않는다.
GameplayEffect를 사용한 GA적용법
bool CommitAbility()
: 자체적으로 비용과 쿨다운을 계산해 사용 가능 여부를 판단한다.
: 블루프린트에서도 사용이 가능하다.
※ 콘솔창에서 AbilitySystem.DebugAttribute [Attribute명] 을 통해 AttributeSet값을 실시간으로 체크할 수 있다.
GameplayEffect 작동 시 GC트리거
| GE에 등록된 GC태그를 가진 GC들이 실행된다. |
- Has Duration → OnActive, Removed로 이어진다.
- Instant → Excuted로 이어진다.
댓글
댓글 쓰기