프리셋

언리얼에서 엔진 - 콜리전

Object Channels -  어떤 오브젝트에 대한

Trace Channels - 어떤 행동에 대한

Preset - by Profile이랑 동일

{Box / Capsule /Sphere} / Line 

 

Ignore - 아예 Trace에 대해 무시 (관통 가능)

Overlap - Trace에 대해 hit 될 수 있음

Block - Trace 에 대해 막아버림 (그 뒤에 포착될 수 있는걸 무시 -> 관통이 안 됨) 

 

Pawn 이라는 오브젝트 타입은 TestTraceChannel 에 대해 ignore 되고,

abc 이라는 오브젝트 타입에 대해서는 block이 되도록 설정 할 수 있는 프리셋이 된다.

 

 

흔히 Actor 디테일에서 볼수있는 콜리전 프리셋을 일일이 지정하기보다 프리셋을 하나 만들어서 사용하는것이 변경에 유연

 

해당 컴포넌트의 콜리젼 프리셋 설정 (엔진 - 콜리전 - 프리셋)

UFUNCTION(BlueprintCallable, Category="Collision")	
ENGINE_API virtual void SetCollisionProfileName(FName InCollisionProfileName, bool bUpdateOverlaps=true);

// ex)
Component->SetCollisionProfileName(TEXT("Object_CameraBlock"));
Component->SetCollisionProfileName(TEXT("LayObject"));

 

 

 

충돌 검사

Line: Start - End 선 에서 충돌한 오브젝트 판별

Sweep: Start - End 선 에서 지정한 CollisionShape 로 충돌한 오브젝트 판별

Overlap: 두 오브젝트가 충돌하였는지 판별

 

 

ByChannel 의 경우 직접 ECollisionChannel을 설정해주면되고,

bool LineTraceSingleByChannel(struct FHitResult& OutHit,const FVector& Start,const FVector& End,ECollisionChannel TraceChannel,const FCollisionQueryParams& Params = FCollisionQueryParams::DefaultQueryParam, const FCollisionResponseParams& ResponseParam = FCollisionResponseParams::DefaultResponseParam) const;
bool SweepSingleByChannel(struct FHitResult& OutHit, const FVector& Start, const FVector& End, const FQuat& Rot, ECollisionChannel TraceChannel, const FCollisionShape& CollisionShape, const FCollisionQueryParams& Params = FCollisionQueryParams::DefaultQueryParam, const FCollisionResponseParams& ResponseParam = FCollisionResponseParams::DefaultResponseParam) const;
bool OverlapMultiByChannel(TArray<struct FOverlapResult>& OutOverlaps, const FVector& Pos, const FQuat& Rot, ECollisionChannel TraceChannel, const FCollisionShape& CollisionShape, const FCollisionQueryParams& Params = FCollisionQueryParams::DefaultQueryParam, const FCollisionResponseParams& ResponseParam = FCollisionResponseParams::DefaultResponseParam) const;


bool UWorld::LineTraceSingleByProfile(struct FHitResult& OutHit, const FVector& Start, const FVector& End, FName ProfileName, const struct FCollisionQueryParams& Params) const
{
	ECollisionChannel TraceChannel;
	FCollisionResponseParams ResponseParam;
	GetCollisionProfileChannelAndResponseParams(ProfileName, TraceChannel, ResponseParam);

	return LineTraceSingleByChannel(OutHit, Start, End, TraceChannel, Params, ResponseParam);
}

 

profile 같은경우는 콜리전 프리셋 이름을 입력하면 ECollisionChannel 을 찾아서 TraceChannel에 반환해 준다 

// ex)
GetWorld()->LineTraceSingleByProfile(Result, FVector{ 0.f,0.f,0.f }, FVector{ 0.f,0.f,0.f }, TEXT("MapObject"));

MapObject == ECC_GameTraceChannel9

 

 

ByChannel - CollisionChannel (Object Channel / Trace Channel)

ByObjectType - 

ByProfile - PresetName

 

LineTraceSingleByChannel
LineTraceSingleByObjectType
LineTraceSingleByProfile
+Multi


SweepSingleByChannel
SweepSingleByObjectType
SweepSingleByProfile
+Multi

OverlapMultiByChannel
OverlapMultiByObjectType
OverlapMultiByProfile

 

 

 

'언리얼 > 언리얼 기능' 카테고리의 다른 글

UE Json  (0) 2025.04.04
쿼터니언 정규화  (0) 2024.11.14
FRotator  (0) 2024.09.11
언리얼 보간 (Interpolation)  (1) 2023.10.19
UStruct static_cast  (0) 2023.09.04

+ Recent posts