0. 개요
게임플레이 이펙트 컨텍스트를 통해 공격의 블록, 크리티컬 여부를 확인할 수 있게 되었다.
이 변수들을 이용해 화면에 색이 있는 데미지 텍스트를 띄운다.
1. 흐름 파악
(1) 커스텀 속성 세트
- PostGameplayEffectExecute 함수 호출
- 아래의 함수 호출
ShowFloatingText(Props, LocalIncomingDamage, bBlock, bCriticalHit);
(2) 커스텀 플레이어 컨트롤러
- ShowFloatingText가 PC를 캐스팅하여 ShowDamageNumber RPC 함수를 호출
- 데미지 텍스트 컴포넌트를 생성
- Register -> Attach를 통해 컴포넌트를 부착 후 Detach를 통해 다시 떼어냄
- 컴포넌트의 SetDamageText 함수를 이용하여 값을 전달
2. 코드 수정
(1) DamageTextComponent
이전 포스트에서 속성 세트의 ShowFloatingText의 인수를 변경했다.
해당 함수처럼 두개의 불리언을 가져올 수 있게 수정한다.
UCLASS()
class AURA_API UDamageTextComponent : public UWidgetComponent
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
void SetDamageText(float Damage, bool bBlockedHit, bool bCriticalHit);
};
(2) AuraPlayerController
UFUNCTION(Client, Reliable)
void ShowDamageNumber(float DamageAmount, ACharacter* TargetCharacter, bool bBlockedHit, bool bCriticalHit);
void AAuraPlayerController::ShowDamageNumber_Implementation(float DamageAmount, ACharacter* TargetCharacter, bool bBlockedHit, bool bCriticalHit)
{
// 위젯
// IsValid - 사망이 보류 중일 경우를 포함
if (IsValid(TargetCharacter) && DamageTextComponentClass)
{
// NewObject로 생성했을 때는 수동으로 RegisterComponent 해야함
UDamageTextComponent* DamageText = NewObject<UDamageTextComponent>(TargetCharacter, DamageTextComponentClass);
DamageText->RegisterComponent();
DamageText->AttachToComponent(TargetCharacter->GetRootComponent(), FAttachmentTransformRules::KeepRelativeTransform);
DamageText->DetachFromComponent(FDetachmentTransformRules::KeepWorldTransform);
DamageText->SetDamageText(DamageAmount, bBlockedHit, bCriticalHit);
}
}
(3) AuraAttributeSet
void UAuraAttributeSet::ShowFloatingText(const FEffectProperties& Props, float Damage, bool bBlockedHit, bool bCriticalHit) const
{
// 데미지 플로팅 위젯
// 자해 불가
if (Props.SourceCharacter != Props.TargetCharacter)
{
if (AAuraPlayerController* PC = Cast<AAuraPlayerController>(Props.SourceController))
{
PC->ShowDamageNumber(Damage, Props.TargetCharacter, bBlockedHit, bCriticalHit);
}
}
}
3. 블루프린트 수정
변화된 코드에 따라 블루프린트도 수정한다.
(1) WBP_DamageText 블루프린트에 새로운 함수 생성
블록과 크리티컬 여부를 판단하는 불리언 두개를 가져와 각각의 여부를 따지는 함수를 만든다.
각 상황에 따라 Color (Slate Color 타입) 멤버 변수를 Set 하게 된다.
위 함수에서 결정된 컬러를 데미지 텍스트에 적용하도록 Update Damage Text 함수도 수정한다.
(2) BP_DamageTextComponent 수정
(3) GE_SecondaryAttributes 수정
테스트 후 캐릭터의 크리티컬 확률이 너무 낮게 설정되어있었다.
위의 결과에 따르면 방어 관통의 두 배를 곱한 값의 1/4를 크리티컬 확률로 계산하는데, 적정한 수치로 재조정한다.
방어 관통도 수정한다.
Resilience의 3배를 취한 후 0.15배를 방어 관통으로 가지는데 이 값을 적정한 수치로 재조정한다.
'UE 5 스터디 > Gameplay Ability System(GAS)' 카테고리의 다른 글
12-7. 데미지 타입 - (1) 게임플레이 태그와 게임플레이 어빌리티 생성 (0) | 2024.12.26 |
---|---|
12-6. UI - (10) 블록, 크리티컬 메세지 띄우기 (0) | 2024.12.26 |
12-4. 게임플레이 이펙트 컨텍스트 - (3) 활용 (0) | 2024.12.24 |
12-3. 커스텀 어빌리티 시스템 글로벌(Aura Ability System Globals) (0) | 2024.12.24 |
12-2. 게임플레이 이펙트 컨텍스트 - (2) 구조체 직렬화(Struct Ops Type Traits) (1) | 2024.12.24 |