* 애니메이션구현
* 위젯을 뷰포트에 추가만 하면됨
* Text값에 데미지를 연결하기
- 우리는 적이든 캐릭터든 둘다 받는 데미지가 뜨길원함 -> 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);
}
}
}
* 디버깅
- 원인 : 소스캐릭터를 지역변수에 저장하고있었음
- 그래도 안됨
- 원인 : 생성대상이 this인 PC로 되어있었음 -> targetcharacter으로 수정
- 잘안보이는 버그 : space를 스크린으로하면 잘보임
* 글자깨짐현상 해결
-원인 : 애니메이션의 스케일을 1 이상늘리면 깨짐
- 해결 : 폰트크기를 늘리고, 스케일을 0.44에서 1로 늘리면됨
* Next
크리인경우 : 노란색으로,
Stuck 등 구현
'UE5 > Damage' 카테고리의 다른 글
[UE5] Block Chance 구현 (0) | 2024.06.23 |
---|---|
[UE5] 실행 계산 개념, 아머속성 계산-변경 구현 (0) | 2024.06.23 |
[UE5] 적 죽을때 용해효과 구현 (0) | 2024.06.23 |
[UE5] 적 죽음 구현 (0) | 2024.06.23 |
[UE5] 타격시 에니메이션 구현 (0) | 2024.06.23 |