관리 메뉴

Mini

[UE5] 크리티컬시, 노란글씨로 구현 본문

UE5/Advance Damage Techniques

[UE5] 크리티컬시, 노란글씨로 구현

Mini_96 2024. 8. 14. 20:53

1.여기에 매개변수 추가(blcok, critical)

void UAuraAttributeSet::ShowFloatingText(const FEffectProperties& Props, float Damage, bool bBlockedHit, bool bCriticalHit) const
{
    //데미지위젯을 데미지받은 캐릭위에 뛰우기
    if(Props.SourceCharacter!=Props.TargetCharacter) //자기자신은 제외
    {
       AAuraPlayerController* PC= Cast<AAuraPlayerController>(UGameplayStatics::GetPlayerController(Props.SourceCharacter,0));
       if(PC)
       {
          PC->ShowDamageNumber(Damage,Props.TargetCharacter,bBlockedHit,bCriticalHit);
       }
    }
}

 

2. PC의 함수에도 추가

void AAuraPlayerController::ShowDamageNumber_Implementation(float DamageAmount, ACharacter* TargetCharacter, bool bBlockedHit, bool bCriticalHit)
{
    //대상캐릭터위치에 위젯생성함
    if(IsValid(TargetCharacter) && DamageTextComponentClass)
    {
       UDamageTextComponent* DamageText= NewObject<UDamageTextComponent>(TargetCharacter, DamageTextComponentClass);
       DamageText->RegisterComponent(); //위젯을 동적생성 -> 수동으로 컴포넌트 등록
       //Text를 대상캐릭터의 루트에 붙이기
       DamageText->AttachToComponent(TargetCharacter->GetRootComponent(),FAttachmentTransformRules::KeepRelativeTransform);
       DamageText->DetachFromComponent(FDetachmentTransformRules::KeepWorldTransform); //계속못따라다니도록 분리, 그냥 사라질숫자임
       DamageText->SetDamageText(DamageAmount, bBlockedHit,bCriticalHit); //Text값 설정
    }
}

 

3. 위젯에도 추가

UCLASS()
class AURA_API UDamageTextComponent : public UWidgetComponent
{
    GENERATED_BODY()

public:
    UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
    void SetDamageText(float Damage, bool bBlockedHit, bool bCriticalHit);
};

 

4. BP에서 실제구현

WBP에서 변수추가
노드연결

 

* 분기에따라 색상설정

블록 ox, 크리 ox

새로만든 함수이용해 컬러설정

 

* 크리계수 올리기

크리는 방관에 의존함 -> 둘다 계수를 올려줌

결과 (block)