ActivateAbility
이 함수는 UE5에서 게임플레이 능력 시스템(GAS)의 핵심 요소이다.
이 함수는 능력이 활성화될 때 호출되며 다양한 게임플레이 메커니즘을 구현하는데 사용된다.
함수 서명
ActivateAbility 함수는 UGameplayAbility 클래스에서 정의되어 있으며, 이를 상속받는 클래스에서
오버라이드한다. 함수 서명은 다음과 같다.
virtual void ActivateAbility(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData
) override;
매개변수 서명
- Handle: 능력의 사양을 나타내는 핸들이다. 이 핸들을 통해 인스턴스에 접근 가능하다.
- ActorInfo: 능력을 소유한 액터에 대한 정보를 담고 있다. 여기에는 소유자, 아바타(일반적으로 플레이어 캐릭터), 플레이어 컨트롤러 등의 정보가 포함된다.
- ActivationInfo: 능력 활성화에 대한 추가 정보이다. 이는 능력이 어떻게, 왜 활성화되었는지를 나타낸다.
- TriggerEventData: 트리거 이벤트에 대한 추가 데이터이다. 특정 이벤트에 의해 능력이 발동될 때 유용하다.
예제
다음은 각 능력을 구현한 예제이다.
캐릭터가 지정된 위치로 순간이동하는 기능 구현
헤더 파일(.h)
// Copyright Example
#pragma once
#include "CoreMinimal.h"
#include "AbilitySystem/Abilities/GameplayAbility.h"
#include "TeleportAbility.generated.h"
UCLASS()
class MYGAME_API UTeleportAbility : public UGameplayAbility
{
GENERATED_BODY()
public:
// 생성자
UTeleportAbility();
protected:
// ActivateAbility 함수의 선언
virtual void ActivateAbility(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData
) override;
private:
// 텔레포트 위치를 설정하는 함수
UFUNCTION()
void SetTeleportLocation(const FVector& NewLocation);
// 텔레포트 위치
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Teleport", meta = (AllowPrivateAccess = "true"))
FVector TeleportLocation;
};
소스 파일(.cpp)
// Copyright Example
#pragma once
#include "CoreMinimal.h"
#include "AbilitySystem/Abilities/GameplayAbility.h"
#include "TeleportAbility.generated.h"
UCLASS()
class MYGAME_API UTeleportAbility : public UGameplayAbility
{
GENERATED_BODY()
public:
// 생성자
UTeleportAbility();
protected:
// ActivateAbility 함수의 선언
virtual void ActivateAbility(
const FGameplayAbilitySpecHandle Handle,
const FGameplayAbilityActorInfo* ActorInfo,
const FGameplayAbilityActivationInfo ActivationInfo,
const FGameplayEventData* TriggerEventData
) override;
private:
// 텔레포트 위치를 설정하는 함수
UFUNCTION()
void SetTeleportLocation(const FVector& NewLocation);
// 텔레포트 위치
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Teleport", meta = (AllowPrivateAccess = "true"))
FVector TeleportLocation;
};
더보기
주요 포인트:
I. 클래스 선언 및 생성자:
- UTeleportAbility 클래스는 UGameplayAbility를 상속받는다.
- 생성자에서 텔레포트 위치를 기본 값으로 설정한다.
II. ActivateAbility 함수:
- ActivateAbility 함수는 능력이 활성화될 때 호출된다.
- Super::ActivateAbility를 호출하여 부모 클래스의 초기화 및 기본 동작을 유지한다.
- HasAuthority를 사용하여 서버에서만 실행되도록 한다.
- ActorInfo->AvatarActor를 통해 아바타 액터(캐릭터)를 가져온다.
- 텔레포트 위치를 설정하고 Character->TeleportTo 함수를 사용하여 캐릭터를 지정된 위치로 이동시킨다.
- 능력 실행이 끝난 후 EndAbility를 호출하여 능력을 종료한다.
III. SetTeleportLocation 함수:
- SetTeleportLocation 함수는 텔레포트 위치를 설정하는데 사용된다.
- 이 함수는 텔레포트 위치를 업데이트한다.
전제적인 흐름:
I. 능력 발동:
- 플레이어가 능력을 발동하면 ActivateAbility 함수가 호출된다.
II. 서버 권한 확인:
- HasAuthority를 사용하여 이 함수가 서버에서 실행되는지 확인한다,
III. 캐릭터 이동:
- 아바타 액터를 ACharacter로 캐스팅하여 텔레포트 위치로 이동시킨다,.
IV. 능력 종료:
- EndAbility 함수를 호출하여 능력 실행을 종료한다.
이 예제를 통해 ActivateAbility 함수를 사용하는 기본적인 방법을 이해해 보았다.
'Unreal Engine' 카테고리의 다른 글
[UE5] DECLARE_ATTRIBUTE_CAPTUREDEF (0) | 2024.05.28 |
---|---|
[UE5] TObjectPtr (0) | 2024.05.17 |
[UE5] AActor (0) | 2024.05.14 |
[UE5] 속성 기반 수정자 (0) | 2024.04.16 |
[UE5] GAS(GameplayAbilitySystem) I (0) | 2024.03.25 |