0. 개요
게임플레이 큐는 RPC를 이용하여 서버와 클라이언트 간 통신한다.
하지만 이 프로젝트의 RPC Remote 숫자는 10개로 제한되어 있다.
화염 폭발의 구체는 12개이므로, 기존의 게임플레이 큐를 이용하면 이미 제한된 개수를 초과하게 된다.
RPC를 이용하지 않고 로컬에서 처리하는 로컬 게임플레이 큐를 알아본다.
1. OnHit 함수를 로컬 게임플레이 큐로 대체하기
화염 폭풍의 OnHit 함수는 부모의 함수를 사용하고 있다.
적중 사운드를 출력하고 폭발 파티클을 노출시킨 이후 반복 소리 재생 컴포넌트를 정지, 파괴하고 더티 플레그를 true로 바꾸는 작업을 하고 있다.
이 함수를 로컬에서 실행 가능한 게임플레이 큐로 대체할 것이다.
(1) OnHit 함수를 가상 함수로 재정의
OnHit 함수는 이미 투사체의 로직에서 중요하게 작동하고 있다.
화염 폭풍같이 발사 이후 캐릭터에게 돌아오기까지의 로직이 기존의 투사체와 다른 경우 이 함수를 오버라이드하여 사용할 수 있게 될 것이다.
UFUNCTION(BlueprintCallable)
virtual void OnHit();
(1-1) LoopingSoundComponent를 Protected 섹션으로 위치
UPROPERTY(VisibleAnywhere)
TObjectPtr<UAudioComponent> LoopingSoundComponent;
(2) Gameplay Cue 태그 생성
FGameplayTag GameplayCue_FireBlast;
// 게임플레이 큐
GameplayTags.GameplayCue_FireBlast = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("GameplayCue.FireBlast"),
FString("GameplayCue_FireBlast")
);
게임플레이 큐는 게임플레이 태그로 인해 실행되므로, 태그를 새로 생성한다.
(3) OnHit 함수 오버라이드
void AAuraFireBall::OnHit()
{
if (GetOwner())
{
FGameplayCueParameters CueParams;
CueParams.Location = GetActorLocation();
UGameplayCueManager::ExecuteGameplayCue_NonReplicated(GetOwner(), FAuraGameplayTags::Get().GameplayCue_FireBlast, CueParams);
}
if (LoopingSoundComponent)
{
LoopingSoundComponent->Stop();
LoopingSoundComponent->DestroyComponent();
}
bHit = true;
}
기존에 적중 시 폭발 이펙트와 사운드를 재생하는 것을 게임플레이 큐로 대체할 것이다.
(4) 버스트 게임플레이 큐 생성
게임플레이 큐 이름을 적절히 지정하면 태그가 자동으로 지정된다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
28-1. 메인 메뉴 UI - (1) 메인 메뉴 구성 (0) | 2025.04.01 |
---|---|
28. 저장(Saving Progress) (0) | 2025.04.01 |
27-5. 상위 스펠 - (5) FireBlast - 폭발 데미지 (0) | 2025.03.31 |
27-4. 상위 스펠 - (4) FireBlast - 데미지 입히기 (0) | 2025.03.31 |
27-3. 상위 스펠 - (3) FireBlast - 파이어볼 소환하기, 움직임 타임라인 (0) | 2025.03.31 |