0. 개요
FTaggedMontage 구조체를 변경하여 대상의 소켓을 태그로 저장할 수 있게 한다.
이 태그를 가져와서 게임플레이 큐에서 해당 태그에 맞는 사운드를 실행하게 할 것이다.
1. 게임플레이 태그 수정
(1) Native 게임플레이 태그 수정
기존의 몽타주 태그를 수정한다.
// TaggedMontage Struct
FGameplayTag CombatSocket_Weapon;
FGameplayTag CombatSocket_RightHand;
FGameplayTag CombatSocket_LeftHand;
FGameplayTag Montage_Attack_1;
FGameplayTag Montage_Attack_2;
FGameplayTag Montage_Attack_3;
FGameplayTag Montage_Attack_4;
// 전투 소켓
GameplayTags.CombatSocket_LeftHand = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("CombatSocket.LeftHand"),
FString("LeftHand")
);
GameplayTags.CombatSocket_RightHand = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("CombatSocket.RightHand"),
FString("RightHand")
);
GameplayTags.CombatSocket_Weapon = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("CombatSocket.Weapon"),
FString("Weapon")
);
// 몽타주 태그
GameplayTags.Montage_Attack_1 = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("Montage.Attack.1"),
FString("Attack 1")
);
GameplayTags.Montage_Attack_2 = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("Montage.Attack.2"),
FString("Attack 2")
);
GameplayTags.Montage_Attack_3 = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("Montage.Attack.3"),
FString("Attack 3")
);
GameplayTags.Montage_Attack_4 = UGameplayTagsManager::Get().AddNativeGameplayTag(
FName("Montage.Attack.4"),
FString("Attack 4")
);
컴파일 후 오류가 발생하는 부분을 모두 수정한다.
(2) CombatInterface에서 FTaggedMontage 구조체 수정
USTRUCT(BlueprintType)
struct FTaggedMontage
{
GENERATED_BODY()
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
UAnimMontage* Montage = nullptr;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FGameplayTag MontageTag;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FGameplayTag SocketTag;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
USoundBase* ImpactSound = nullptr;
};
2. 블루프린트 수정
(1) GA_MeleeAttack에서 Tagged Montage
이제 Montage Tag는 게임플레이 큐를 위한 몽타주 태그로 사용할 것이고, 기존의 태그는 Socket Tag가 이어받았다.
따라서 핀을 다시 연결한다.
(Impact Sound 핀은 사용하지 않을 것이다)
(2) 모든 몬스터 블루프린트의 Tagged Montage 수정
구울 몬스터의 블루프린트 클래스 디폴트 설정이다.
각 공격 몽타주에 대해 1, 2, 3, 4까지의 태그를 사용하여 붙여준다.
기존에 몽타주 태그의 역할을 대체하게 된 Socket Tag에는 기존에 사용하던 태그를 붙여준다.
이런 작업을 모든 몬스터에 대해 반복한다.
(3) GA_MeleeAttack 게임플레이 어빌리티 수정
Wait Gameplay Event는 몽타주가 끝나는 것을 기다리므로 Montage Tag를 받아야 한다.
(4) 몬스터 공격 몽타주에서 애님 노티파이의 이벤트 태그 재설정
모든 몬스터의 공격 몽타주에 대해 수정된 태그를 붙이도록 공격 몽타주를 수정한다.
애님 노티파이를 선택하여 이벤트 태그를 수정한다.
(5) GA_MeleeAttack에서 게임플레이 큐에 게임플레이 태그를 인자로 넘겨주기
(6) 태그로 FTaggedMontage 구조체를 가져오는 함수 정의
(6-1) CombatInterface
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
FTaggedMontage GetTaggedMontageByTag(const FGameplayTag& MontageTag);
};
게임플레이 태그로 TaggedMontage 구조체를 가져오는 함수를 선언한다.
(6-2) AuraCharacterBase에서 오버라이드
virtual FTaggedMontage GetTaggedMontageByTag_Implementation(const FGameplayTag& MontageTag) override;
FTaggedMontage AAuraCharacterBase::GetTaggedMontageByTag_Implementation(const FGameplayTag& MontageTag)
{
for (FTaggedMontage TaggedMontage : AttackMontages)
{
if (TaggedMontage.MontageTag == MontageTag)
return TaggedMontage;
}
return FTaggedMontage();
}
각 캐릭터 별로 가지고 있는 공격 몽타주 배열을 순회하여 태그가 일치하면 TaggedMontage를 반환하도록 한다.
(7) 게임플레이 큐 블루프린트 수정
이제 태그 컨테이너를 분해하여 배열러 가져와 루프를 돌며 Tagged Montage에 대해 일치하는 Tag를 가진 Montage를 가져와 사운드를 재생하게 된다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
17-5. 전투 폴리싱 - (5) 새총 고블린 - 돌 투사체 사운드 추가 및 바닥 콜리전 (0) | 2025.01.07 |
---|---|
17-4. 전투 폴리싱 - (4) 고블린 - 피격, 사망 사운드 추가 (0) | 2025.01.07 |
17-2. 전투 폴리싱 - (2) 게임플레이 큐 - 사운드 또는 이펙트 실행(Execute) 및 복제(Replication) (0) | 2025.01.07 |
17-1. 전투 폴리싱 - (1) 창 고블린 사운드, 타격 이펙트와 사운드 (0) | 2025.01.07 |
16-5. 멀티플레이어 디버그, 고블린 주술사 디졸브 추가 (0) | 2025.01.03 |