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에서 실제구현
* 분기에따라 색상설정
블록 ox, 크리 ox
새로만든 함수이용해 컬러설정
* 크리계수 올리기
크리는 방관에 의존함 -> 둘다 계수를 올려줌