0. 개요
몬스터가 몬스터 서로의 공격에 대해서 데미지를 받거나, 플레이어 캐릭터가 펫 또는 소환수에 데미지를 주는 것을 방지한다.
1. 아군 공격(Friendly Fire) 방지하기
(1) AuraAbilitySystemLibrary 클래스에 함수 선언
// 프렌들리 파이어
UFUNCTION(BlueprintPure, category = "AuraAbilitySystemLibrary|GameplayMechanics")
static bool IsNotFriend(AActor* FirstActor, AActor* SecondActor);
블루프린트 순수 함수로 생성한다.
블루프린트 순수 함수는 실행핀이 없다.
bool UAuraAbilitySystemLibrary::IsNotFriend(AActor* FirstActor, AActor* SecondActor)
{
const bool FirstIsPlayer = FirstActor->ActorHasTag(FName("Player"));
const bool SecondIsPlayer = SecondActor->ActorHasTag(FName("Player"));
const bool FirstIsEnemy = FirstActor->ActorHasTag(FName("Enemy"));
const bool SecondIsEnemy = SecondActor->ActorHasTag(FName("Enemy"));
const bool BothArePlayers = FirstIsPlayer && SecondIsPlayer;
const bool BothAreEnemys = FirstIsEnemy && SecondIsEnemy;
// 둘이 서로 같은 태그라면 프렌들리
if (BothArePlayers || BothAreEnemys)
return false;
return true;
}
다음으로 축소하여 나타낼 수도 있다.
bool UAuraAbilitySystemLibrary::IsNotFriend(AActor* FirstActor, AActor* SecondActor)
{
const bool bBothArePlayers = FirstActor->ActorHasTag(FName("Player")) && SecondActor->ActorHasTag(FName("Player"));
const bool bBothAreEnemys = FirstActor->ActorHasTag(FName("Enemy")) && SecondActor->ActorHasTag(FName("Enemy"));
// 둘이 서로 같은 태그라면 프렌들리
if (bBothArePlayers || bBothAreEnemys)
return false;
return true;
}
(2) GA_MeleeDamage 블루프린트 이벤트 그래프 수정
두 액터를 비교하여 태그(액터별로 지정한 Player or Enemy 태그)가 다를 때만 데미지를 주도록 지정한다.
2. 구울에 디졸브 효과 추가
고블린에 대해서 디졸브 머티리얼 인스턴스는 이미 생성되어있었으나 다른 몬스터에 대해서는 생성되어있지 않다.
M_DissolveEffect의 머티리얼 그래프의 노드를 사용하여 구울의 Dissolve Effect를 만든다.
(1) M_DissolveEffect에서 복사해올 노드
코멘트를 통해 복사해야할 노드들과 어떤 핀에 연결해야하는지 적혀있다. 해당 노드들을 복사해서 M_Ghoul에 추가한다.
(2) M_Ghoul에서 머티리얼 디테일 설정
코멘트에 나와있는 것과 같이 설정한다.
(3) 머티리얼 인스턴스 생성
핀을 연결하고 머티리얼 인스턴스를 생성한다.
글로벌 스칼라 파라미터 값에 Dissolve를 체크하고 융화되기 전 모습의 값인 -2 정도로 지정한다.
(4) M_Ghoul에서 디졸브 기본 값 조정
Dissolve 노드의 디폴트 값을 조정한다.
(5) BP_Ghoul에서 디졸브 효과 추가하기
(번외) 몬스터가 서로 뭉치지 않게 하기
Strafe(옆으로 걷는 모션)이 있는 몬스터에 대해 RVO 회피를 사용하면 서로 피하면서 플레이어를 향해 다가간다.
이 기능은 서버에서만 작동하므로 AI에 적합하다.
그러나 Strafe 애니메이션이 없으면 다소 위화감있게 작동하므로 이 프로젝트에서는 다른 방법을 사용할 것이다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
15-2. AI 원거리 공격 - (2) 원거리 공격 어빌리티 부여 (0) | 2025.01.03 |
---|---|
15-1. AI 원거리 공격 - (1) 원거리 공격 어빌리티 생성 (0) | 2025.01.03 |
14-7. 몬스터 - (5) 구울 몬스터 생성, 피격 반응 버그 수정 (0) | 2025.01.02 |
14-6. AI 근거리 공격 - (6) 무기 소켓이 없는 몬스터의 근접 공격 (0) | 2024.12.30 |
14-5. AI 근거리 공격 - (5) 근접 공격 데미지 (0) | 2024.12.30 |