Mini

[UE5] 맞은적 머리위에 데미지 뜨도록 구현 본문

UE5/Damage

[UE5] 맞은적 머리위에 데미지 뜨도록 구현

Mini_96 2024. 6. 23. 20:27

유저위젯 만들어주시고
디자인

 

* 애니메이션구현

위치애니메이션 : Text값을 핀을꼽고 조절해서 -> 위 <- 으로 만들면됨
글짜크기 커졌다가 작아지도록 만들기
투명도설정 : 1에서 0으로 만들기(없어지게)

 

* 위젯을 뷰포트에 추가만 하면됨

 

* Text값에 데미지를 연결하기

c++ 위젯컴포넌트 만들기
그냥 함수만 만들고 BP에서 구현할거임

 

위에꺼를 상속받은 컴포넌트 만들기
컴포넌트에 뷰(위젯)를 설정
위젯에 Setter 만들기
컴포넌트에서는 위젯의 함수를 사용하기

 

- 우리는 적이든 캐릭터든 둘다 받는 데미지가 뜨길원함 -> PC 에서 구현

	UFUNCTION(Client, Reliable) //클라이언트RPC, 신뢰가능한
	void ShowDamageNumber(float DamageAmount, ACharacter* TargetCharacter);
	

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

- AS에서 PC에서 만든 함수를 사용하기만 하면됨.

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

 

PC 변수에 의존성주입

 

애니가1초임 -> 딜레이1초후 위젯콤포넌트와 사용자인 위젯도 파괴
Text 안뜨는 버그

 

* 디버깅

소스캐릭터가 null인걸 확인함

- 원인 : 소스캐릭터를 지역변수에 저장하고있었음

- 그래도 안됨 

- 원인 : 생성대상이 this인 PC로 되어있었음 -> targetcharacter으로 수정

- 잘안보이는 버그 : space를 스크린으로하면 잘보임

 

99데미지가 뜨는버그
여기 노드가 끊겨있었음..
결과 : 5데미지가 잘뜨는 모습

 

* 글자깨짐현상 해결

-원인 : 애니메이션의 스케일을 1 이상늘리면 깨짐

- 해결 : 폰트크기를 늘리고, 스케일을 0.44에서 1로 늘리면됨

 

* Next

크리인경우 : 노란색으로,

Stuck 등 구현

 

https://github.com/DongHoonYu96/GameplayAbilitySystem_Aura/commit/3438cfaf5930db8ac579625b7b58d01e9b872587

 

feat : 맞은적 머리위에 데미지 뜨도록 구현 · DongHoonYu96/GameplayAbilitySystem_Aura@3438cfa

Bisu96 committed Jun 23, 2024

github.com