* 어디에구현?
적, 캐릭터가 모두사용 -> 전투인터에 만들고 캐릭베이스에서 구현강제 할거임
class AURA_API ICombatInterface
{
...
virtual void Die()=0;
void AAuraCharacterBase::Die()
{
//무기분리, 분리는자동으로 수행 -> 서버에서분리하면 클라에서도 자동분리
Weapon->DetachFromComponent(FDetachmentTransformRules(EDetachmentRule::KeepWorld,true));
MulticastHandleDeath();
}
void AAuraCharacterBase::MulticastHandleDeath_Implementation()
{
//무기, 매시에 피직스 달기 => 땅에서 튕겨나오도록
Weapon->SetSimulatePhysics(true);
Weapon->SetEnableGravity(true);
Weapon->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);
GetMesh()->SetEnableGravity(true);
GetMesh()->SetSimulatePhysics(true);
GetMesh()->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);
GetMesh()->SetCollisionResponseToChannel(ECC_WorldStatic,ECR_Block);
//캡슐충돌 비활성화
GetCapsuleComponent()->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
- 적의경우 수명설정 추가
void AAuraEnemy::Die()
{
//적의경우 수명설정
SetLifeSpan(LifeSpan);
Super::Die();
}
- AS 에서 뒤지는경우, Die 호출
void UAuraAttributeSet::PostGameplayEffectExecute(const FGameplayEffectModCallbackData& Data)
{
...
if(Data.EvaluatedData.Attribute==GetIncomingDamageAttribute())
{
const float LocalIncomingDamage = GetIncomingDamage();
SetIncomingDamage(0.f);
if(LocalIncomingDamage > 0.f)
{
const float NewHealth = GetHealth() - LocalIncomingDamage;
SetHealth(FMath::Clamp(NewHealth,0.f,GetMaxHealth())); //음수인경우 조정하고 체력깍기
const bool bFatal = NewHealth<=0.f; //사망에이를만한 피해인지
if(bFatal) //뒤지는 경우
{
//타겟아바타가 인터구현했는지 확인
ICombatInterface* CombatInterface=Cast<ICombatInterface>(Props.TargetAvatarActor);
if(CombatInterface)
{
CombatInterface->Die();
}
}
'UE5 > Damage' 카테고리의 다른 글
[UE5] 맞은적 머리위에 데미지 뜨도록 구현 (0) | 2024.06.23 |
---|---|
[UE5] 적 죽을때 용해효과 구현 (0) | 2024.06.23 |
[UE5] 타격시 에니메이션 구현 (0) | 2024.06.23 |
[UE5] json으로 레벨별 데미지 구현 (0) | 2024.06.23 |
[UE5] 데미지계산용 Meta 속성추가 // 데미지 계산하는 방법 (0) | 2024.06.22 |