bool SweepSingleByChannel
(
struct FHitResult & OutHit, // 첫 번째 막힌 충돌 정보가 저장될 구조체
const FVector & Start, // 스윕의 시작 위치
const FVector & End, // 스윕의 끝 위치
const FQuat & Rot, // 회전 정보 (회전을 사용하지 않을 경우 FQuat::Identity를 전달)
ECollisionChannel TraceChannel, // 스윕에 사용할 충돌 채널
const FCollisionShape & CollisionShape, // 충돌 형태(shape) (상자, 구, 캡슐 등을 지원)
const FCollisionQueryParams & Params, // 스윕에 대한 추가적인 매개변수
const FCollisionResponseParams & ResponseParam // 이 스윕에 대한 응답 관련 매개변수
) const
OutHit
: 스윕 중에 발생한 첫 번째 막힌 충돌 정보를 저장하는 구조체입니다.Start
: 스윕의 시작 위치입니다.End
: 스윕의 끝 위치입니다.Rot
: 스윕 시 물체의 회전 정보입니다. 회전을 사용하지 않을 경우 FQuat::Identity
를 전달합니다.TraceChannel
: 이 스윕에 사용할 충돌 채널을 지정합니다.CollisionShape
: 충돌 형태(shape)을 지정합니다. 상자, 구, 캡슐 등 여러 형태를 지원합니다.Params
: 스윕에 대한 추가적인 매개변수를 제공합니다.ResponseParam
: 이 스윕에 대한 응답 관련 매개변수를 지정합니다.이 함수는 게임 엔진에서 충돌 검사 및 물체의 이동과 상호작용과 같은 다양한 상황에서 사용됩니다. 이 함수를 사용하면 월드 내에서 물체와의 충돌을 검출하고 이에 대한 정보를 얻을 수 있습니다.
FVector Start = GetComponentLocation();
FVector End = Start + GetForwardVector() * MaxGrabDistance ;
DrawDebugLine(GetWorld(), Start, End, FColor::Red);
FCollisionShape Sphere = FCollisionShape::MakeSphere(GrabRadius);
FHitResult HitResult;
bool HasHit = GetWorld()->SweepSingleByChannel(
HitResult,
Start, End,
FQuat::Identity,
ECC_GameTraceChannel2,
Sphere
);
if (HasHit)
{
AActor* MyActor = HitResult.GetActor();
UE_LOG(LogTemp, Display, TEXT("Hit actor: %s"), *MyActor->GetActorNameOrLabel());
}
else
{
UE_LOG(LogTemp, Display, TEXT("No Actor hit"));
}
// void UGrabber::PrintDamage(float& Damage)
void UGrabber::PrintDamage(const float& Damage)
{
// Damage = 2;
UE_LOG(LogTemp, Display, TEXT("Damage: %f"), Damage);
}
bool UGrabber::HasDamage(float& OutDamage)
{
OutDamage = 5;
return true;
}
UPROPERTY(EditAnywhere)
float GrabRadius = 100;