내일배움캠프 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적용법

GA에는 비용, 쿨다운 GE를 장착할 수 있다.
쿨다운은 만료될때 까지 재사용을 막는다.

bool CommitAbility()
 : 자체적으로 비용과 쿨다운을 계산해 사용 가능 여부를 판단한다.
 : 블루프린트에서도 사용이 가능하다.

※ 콘솔창에서 AbilitySystem.DebugAttribute [Attribute명] 을 통해 AttributeSet값을 실시간으로 체크할 수 있다.

GameplayEffect 작동 시 GC트리거

GE에 등록된 GC태그를 가진 GC들이 실행된다.

GC의 HandleGameplayCue함수에서 GE의 경과시간 정책에 따라 EventType이 결정된다.

 - Has Duration → OnActive, Removed로 이어진다.
 - Instant → Excuted로 이어진다.

댓글

이 블로그의 인기 게시물

내일배움캠프 사전캠프 - 사전캠프설 연휴 커피 파밍 이벤트 작품 [ EXTREMITY ]

내일배움캠프 29일차 - 커리어데이 2일차 : 클라이언트 프로그래머로서 포트폴리오, 입사준비팁