참고 자료
제일 기본 공식 문서.
docs.unrealengine.com/ko/InteractiveExperiences/Tracing/index.html
조금 더 도움될 문서.
www.unrealengine.com/ko/blog/collision-filtering
요것들을 이해했으면, 트레이스를 왜 사용하는지, 어떤 값을 제공해주는지 알았을 것이다.
직접 사용해보자. 나는 Line Trace를 사용했다.
블루프린트로 사용하기
블루프린트는 진짜 간단하다.
그냥 우클릭해서 사용하면 된다.
위의 참고 내용을 읽어봤으면, 각각의 노드가 뭘 의미하는 것인지 알 것이다.
나는 LineTraceForObjects 노드를 사용했고, 넣으라는 값 넣고 Hit Result 받아서 사용하면 된다.
C++로 사용하기
C++로 넘어오면 갑자기 복잡해진다.
BP처럼 넣으라는 값이 한 눈에 보이지 않기 때문에, 파라미터를 보고 값을 넣어줘야 한다.
(함수를 작성할 때, Ctrl + Shift + Space 하면 파라미터가 보인다.)
FVector CameraLoc = Camera->GetComponentLocation();
FVector CameraForward = Camera->GetForwardVector();
FVector StartLoc = CameraLoc; // 레이저 시작 지점.
FVector EndLoc = CameraLoc + (CameraForward * 5000.0f); // 레이저 끝나는 지점.
TArray<TEnumAsByte<EObjectTypeQuery>> ObjectTypes; // 히트 가능한 오브젝트 유형들.
TEnumAsByte<EObjectTypeQuery> WorldStatic = UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_WorldStatic);
TEnumAsByte<EObjectTypeQuery> WorldDynamic = UEngineTypes::ConvertToObjectType(ECollisionChannel::ECC_WorldDynamic);
ObjectTypes.Add(WorldStatic);
ObjectTypes.Add(WorldDynamic);
TArray<AActor*> IgnoreActors; // 무시할 액터들.
FHitResult HitResult; // 히트 결과 값 받을 변수.
bool Result = UKismetSystemLibrary::LineTraceSingleForObjects(
GetWorld(),
StartLoc,
EndLoc,
ObjectTypes,
false,
IgnoreActors, // 무시할 것이 없다고해도 null을 넣을 수 없다.
EDrawDebugTrace::ForDuration,
HitResult,
true
// 여기 밑에 3개는 기본 값으로 제공됨. 바꾸려면 적으면 됨.
//, FLinearColor::Red
//, FLinearColor::Green
//, 5.0f
);
if (Result == true)
{
// FVector ImpactPoint = HitResult.ImpactPoint;
// HitResult에서 필요한 값들을 사용하면 됨.
}
자료형들이 모두 처음 보는 것들이라 어색하다.
이렇게 쓰면 된다고 한다.
'Unreal' 카테고리의 다른 글
[Unreal] 네비게이션 메쉬 설정하기 (Nav Mesh / Nav Link Proxy) (0) | 2021.04.12 |
---|---|
[Unreal BP & C++] 애니메이션 노티파이 (5) | 2021.04.08 |
[Unreal BP] 잔상 효과 만들기 (5) | 2021.03.31 |
[Unreal C++] CPP 파일 생성/삭제/경로 변경하기 (0) | 2021.03.25 |
[Unreal Error] CPP 컴파일할 때마다 Crash 오류 (2) | 2021.03.24 |