본문 바로가기
[ Unreal5 ]/- 언리얼엔진5 실습

언리얼엔진5 c++ Sphere Trace

by MRG 2024. 11. 25.
728x90
반응형

 

▣ 코드설명

 

FDamageEvent() 함수를 사용하기 위해서는  Engine/DamageEvents.h 헤더를 추가해야 합니다. 

 

StartLocation: 좀비 메쉬의 hand_r라는 소켓 위치를 가져옵니다. 이는 좀비의 손 위치를 기준으로 충돌을 시작하는 지점을 설정합니다.


EndLocation: SphereTrace의 시작과 끝 지점을 동일하게 설정(구체 중심). 여기서는 한 지점에서만 충돌을 검사하기 때문에 동일한 값을 사용합니다.


SphereRadius: 충돌 체크를 수행할 Sphere의 반지름을 설정합니다. 여기서는 70.0f로 설정되어 있습니다.


Params: 충돌 계산 중에 특정 액터를 무시하도록 설정합니다. 여기서는 NormalZombie(자기 자신)를 무시하도록 추가했습니다.

SweepSingleByChannel 함수:
Sphere(구체) 모양으로 특정 채널(ECC_GameTraceChannel4)에서 충돌을 체크합니다.
StartLocation에서 EndLocation까지 Sweep(확인)을 진행하며, 충돌 여부를 확인합니다.
FQuat::Identity는 회전값으로, 이 경우 구체가 회전 없이 기본 방향으로 작동합니다.
결과는 HitResult에 저장되며, 충돌한 대상에 대한 정보가 포함됩니다.


bHit:
충돌 여부를 나타냅니다. true라면 충돌이 발생했고, false라면 충돌이 없습니다.


HitResult.GetActor():
충돌한 액터를 가져옵니다.
HitActor는 충돌한 액터를 가리킵니다.


조건 체크:
bHit: 충돌이 발생했는지 확인.
HitActor: 충돌한 액터가 유효한지 확인.
HitActor->IsA<APlayerCharacter>(): 충돌한 액터가 APlayerCharacter의 인스턴스인지 확인합니다.


디버그 메시지:
충돌한 액터의 이름을 출력합니다. (*HitActor->GetName())


Cast<APlayerCharacter>(HitActor):
HitActor를 APlayerCharacter로 캐스팅합니다. 성공하면 PlayerCharacter에 저장됩니다.


TakeDamage 호출:
PlayerCharacter의 TakeDamage 함수가 호출되어 데미지를 적용합니다.
매개변수:
Damage: 데미지 양.
FDamageEvent(): 데미지 이벤트 객체. 기본 이벤트 객체를 생성하여 전달.
NormalZombie->GetController(): 데미지를 입힌 좀비의 컨트롤러.
NormalZombie: 데미지를 입힌 좀비 액터.

728x90
반응형

댓글