1. 어빌리티 클래스 만들기
이제 캐릭터에게 다양한 능력들을 부여해보려고 한다. 베이스가 될 어빌리티 클래스를 만들어보자.
우리는 능력을 부여할 수 있어야 하며 이 작업은 일반적으로 서버에서 진행한다.
캐릭터클래스에서 캐릭터가 가질 능력들을 모을 배열을 만들 것이다. 이렇게 하면 능력들을 전부 쉽게 부여할 수 있을 것이다.
private:
UPROPERTY(EditAnywhere, Category="Abilities")
TArray<TSubclassOf<UGameplayAbility>> StartupAbilities;
이제 어빌리티를 부여하는 함수를 구현하자. 해당 함수는 프로텍트 영역에서 만들었다.
실제로 어빌리티를 부여하는건 어빌리티 시스템 컴포넌트이다. 캐릭터 클래스에서는 ASC 클래스에 있는 함수를 호출하는 작업을 할 것이다. ASC 클래스에서 함수를 구현하자.
void AddCharacterAbilities(const TArray<TSubclassOf<UGameplayAbility>>& StartupAbilities);
void UAuraAbilitySystemComponent::AddCharacterAbilities(const TArray<TSubclassOf<UGameplayAbility>>& StartupAbilities)
{
for (TSubclassOf<UGameplayAbility> AbilityClass : StartupAbilities)
{
FGameplayAbilitySpec AbilitySpec = FGameplayAbilitySpec(AbilityClass, 1);
GiveAbilityAndActivateOnce(AbilitySpec);
}
}
기본적으로는 어빌리티 스펙을 만들고 이를 적용하고 실행시키는 내장함수를 호출하면 끝이다. 물론 더 구체적으로 만들 수도 있을 것이다.
이제 캐릭터 클래스에서 위의 함수를 호출하자.
void AAuraCharacterBase::AddCharacterAbilities()
{
UAuraAbilitySystemComponent* AuraASC = CastChecked<UAuraAbilitySystemComponent>(AbilitySystemComponent);
if (!HasAuthority()) return;
AuraASC->AddCharacterAbilities(StartupAbilities);
}
이제 다음 작업을 해야한다.
이 함수를 언제 호출해야할까? 캐릭터를 소유하는 시점이 가장 적절할 것이다. 물론 에너미의 경우는 또 따로 처리해야할 것이다.
void AAuraCharacter::PossessedBy(AController* NewController)
{
Super::PossessedBy(NewController);
InitAbilityActorInfo();
AddCharacterAbilities();
}
이제 컴파일하고 잘 되는지 확인하자. 게임플레이 어빌리티를 블루프린트 클래스로 만들어야할 것이다.
'게임프로그래밍 > 실습2' 카테고리의 다른 글
[실습2] 41. 커스텀 인풋 컴포넌트 만들기 (0) | 2024.12.03 |
---|---|
[실습2] 40. 인풋과 게임플레이 태그 연결하기 (0) | 2024.12.03 |
[실습 2] 38. 어트리뷰트가 바뀌면 응답하기 (0) | 2024.12.02 |
[실습2] 37. C++에서 태그와 어트리뷰트 연결하기 (0) | 2024.12.02 |
[실습2] 36. 어트리뷰트 위젯 컨트롤러에서 브로드 캐스트 하기 (0) | 2024.12.02 |