3초마다 회전과 정지를 무한 반복하면서 동작하는 분수대
회전기능은 RotatingMovement 컴포넌트를 사용
게임플레이 어빌리티 시스템을 관리하는 핵심 컴포넌트
게임플레이 어빌리티 및 다양한 작업을 처리하는 중앙 처리 장치
액터에 단 하나만 부착할 수 있음
액터는 부착된 ASC를 통해 게임플레이 어빌리티를 발동시킬 수 있음
ASC를 부착한 액터 사이에 GAS 시스템의 상호작용이 가능해짐
ASC에 등록되어 발생시킬 수 있는 액션 명령
공격, 마법, 특수 공격 등
간단한 액션 뿐만 아니라 상황에 따른 복잡한 액션 수행 가능
/** Abilities define custom gameplay logic that can be activated by players or external game logic */
UCLASS(Blueprintable)
class GAMEPLAYABILITIES_API UGameplayAbility : public UObject, public IGameplayTaskOwnerInterface
{
...
// ----------------------------------------------------------------------------------------------------------------
//
// The important functions:
//
// CanActivateAbility() - const function to see if ability is activatable. Callable by UI etc
//
// TryActivateAbility() - Attempts to activate the ability. Calls CanActivateAbility(). Input events can call this directly.
// - Also handles instancing-per-execution logic and replication/prediction calls.
//
// CallActivateAbility() - Protected, non virtual function. Does some boilerplate 'pre activate' stuff, then calls ActivateAbility()
//
// ActivateAbility() - What the abilities *does*. This is what child classes want to override.
//
// CommitAbility() - Commits reources/cooldowns etc. ActivateAbility() must call this!
//
// CancelAbility() - Interrupts the ability (from an outside source).
//
// EndAbility() - The ability has ended. This is intended to be called by the ability to end itself.
//
// ----------------------------------------------------------------------------------------------------------------
...
};
FName으로 관리되는 경량의 표식 데이터
액터나 컴포넌트에 지정했던 태그와 다른 데이터
프로젝트 설정에서 별도로 게임플레이 태그를 생성하고 관리할 수 있음
결과는 DefaultGameplayTags.ini 파일에 저장됨
계층 구조로 구성되어 있어 체계적인 관리 가능
Actor.Action.Rotate: 행동에 대한 태그
Actor.State.IsRotating: 상태에 대한 태그
게임플레이 태그들의 저장소: GameplayTagContainer
게임플레이 어빌리티 시스템과 독립적으로 사용 가능
게임플레이 어빌리티에 부착한 태그
어빌리티에 지정한 태그 (AbilityTags 태그 컨테이너) - 해당 GA를 대표하는 태그가 됨 (태그로 이 어빌리티 발동 가능)
게임플레이 어빌리티에 대해 다양한 실행 조건의 설정
태그로 어빌리티 취소 - CancelAbilitiesWithTag
태그로 어빌리티 차단 - BlockAbilitiesWithTag
어빌리티 실행 시 태그 설정 - ActivationOwnedTags (원하는 태그를 넣으면 해당 어빌리티가 활성화 되는 중에 ASC에 활성화되어 어떤 상태인지 파악 가능)
태그가 있어야만 어빌리티 실행 - ActivationRequiredTags
태그가 있으면 어빌리티 실행 차단 - ActivationBlockedTags
시전자가 태그가 있어야 어빌리티 실행 - SourceRequiredTags
시전자에 태그가 있으면 어빌리티 차단 - SourceBlockedTags
시전 대상에 태그가 있어야 어빌리티 실행 - TargetRequiredTags
시전 대상에 태그가 있으면 어빌리티 차단 - TargetBlockedTags
블루프린트와 조합하여 특정 게임플레이 어빌리티에 대한 의존성을 없애고 게임플레이 태그를 중심으로 게임 로직을 전개 가능
- 게임플레이 태그 추가
프로젝트 세팅 - GameplayTags - 게임플레이 태그 목록
소스 선택 후 추가할 게임플레이 태그의 이름을 작성하면 완료
"Visual Studio 프로젝트 새로고침"으로 uproject를 통해 "Generate Visual Studio project files"를 하지 않고도 프로젝트 새로고침이 가능했습니다..
https://github.com/dnjfs/ArenaBattle_GAS/commit/30b74a86077ae4d7f090b569d2cc882ade3b7f97
액터에 직접 회전 구현
(익숙한 방법으로 빠르게 구현, 새로운 액터 기능이 추가됨)
URotatingMovementComponent를 직접 제어
게임플레이 어빌리티로 회전 구현
(C++만 사용해 모든 기능 구현 가능, 액터로부터 기능 분리)
ABGA_Rotate 어빌리티 클래스 구현
어빌리티에 회전을 구현하고 해당 어빌리티를 활성화하여 액터를 제어
게임플레이 태그로 회전 구현
(의존성 없는 설계가 가능, 어빌리티 교체 가능)
게임플레이 태그 추가
StartAbilities로 ABGA_Rotate 세팅
태그로 어빌리티 실행 제어