[UE5] 지오메트리 스위핑

ChangJin·2023년 9월 18일
0

Unreal Engine5

목록 보기
10/102
post-thumbnail

물체에 가까이 가면 감지가 되도록 한다.

SweepSingleByChannel

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

설명:

  • 이 함수는 월드(World) 내에서 물체를 스윕하여, 특정 충돌 채널(TraceChannel)을 사용하여 첫 번째로 막힌 충돌을 찾습니다.
  • 스윕(Sweep)은 물체가 월드 내에서 움직이면서 충돌 여부를 검사하는 과정을 의미합니다.

반환값:

  • 함수는 스윕 작업 중에 첫 번째 막힌 충돌을 찾으면 TRUE를 반환합니다.
  • OutHit 매개변수에 해당 충돌 정보가 저장됩니다.

매개변수 설명:

  1. OutHit: 스윕 중에 발생한 첫 번째 막힌 충돌 정보를 저장하는 구조체입니다.
  2. Start: 스윕의 시작 위치입니다.
  3. End: 스윕의 끝 위치입니다.
  4. Rot: 스윕 시 물체의 회전 정보입니다. 회전을 사용하지 않을 경우 FQuat::Identity를 전달합니다.
  5. TraceChannel: 이 스윕에 사용할 충돌 채널을 지정합니다.
  6. CollisionShape: 충돌 형태(shape)을 지정합니다. 상자, 구, 캡슐 등 여러 형태를 지원합니다.
  7. Params: 스윕에 대한 추가적인 매개변수를 제공합니다.
  8. ResponseParam: 이 스윕에 대한 응답 관련 매개변수를 지정합니다.

이 함수는 게임 엔진에서 충돌 검사 및 물체의 이동과 상호작용과 같은 다양한 상황에서 사용됩니다. 이 함수를 사용하면 월드 내에서 물체와의 충돌을 검출하고 이에 대한 정보를 얻을 수 있습니다.

Grabber.cpp

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;
}

Grabber.h

	UPROPERTY(EditAnywhere)
	float GrabRadius = 100;
profile
Unreal Engine 클라이언트 개발자

0개의 댓글