작성
·
263
0
스탯매니저 강의에서 질문을 드려요.
UE_LOG(LogTemp, Log, TEXT("Hit Actor : %s"), *HitResult.Actor->GetName());
위의 로그에서, HitResult.Actor를 어떤 걸로 찍는지 확인했더니, BP_MyCharacter_2였고, 언리얼에서 확인해보니, 이 라벨은 때리는 캐릭터가 아니라 공격당하는 캐릭터인데 제가 제대로 이해한 게 맞는지 모르겠어요.
HitResult.Actor->TakeDamage(Stat->GetAttack(), DamageEvent, GetController(), this);에서, 첫번째 매개변수가 의미하는 게 DamageAmount인데, 여기에서 Stat이 의미하는 게 공격하는 캐릭터의 Stat인가요? 그래야 Stat->GetAttack()을 했을 때 DamageAmount가 나올 것 같아서요.
위에 따라서 TakeDamage 함수가 호출될텐데,
float AMyCharacter::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
{
Stat->OnAttacked(DamageAmount);
return DamageAmount;
}
위에서 정의한 함수에 의하면 Stat의 OnAttacked가 호출되는데, 이때의 Stat은 공격당하는 캐릭터의 Stat이 맞나요?
같은 MyCharacter.cpp 파일 내에서 어떤 순간에는 Stat이 공격하는 캐릭터의 Stat이고, 어떤 순간에는 Stat이 공격당하는 캐릭터의 Stat으로 해석이 되어서 헷갈려요.
답변 1
0
파란색이 공격자, 빨간색이 피해자입니다.
TakeDamage는 피해자 쪽에서 실행되니, 거꾸로 Stat이 피해자의 Stat이 되겠죠!
class는 설계도에 비유할 수 있고
MyCharacter라는 객체는 공격자도, 피해자도 될 수 있으니
둘의 기능이 같이 있어 헷갈릴 수 있지만
문맥과 호출 경로를 생각하면서 공격자/피해자를 생각하시면 됩니다
(아니면 단순히 함수 이름으로 구분해도 되겠죠)