-
[Unreal Engine] Line traceUnreal Engine 5._ 2023. 4. 28. 18:19
이번 글에서는 언리얼 엔진에서 직선적인 트레이싱을 수행하는 함수에 대해 알아보도록 하겠습니다.
이번 글의 예제는 다음과 같은, 언리얼 엔진의 1인칭 기본 템플릿이 사용됩니다.
1. 결과 미리보기
더보기이번 글은 위와 같이, 간단한 레드 닷 효과를 구현합니다.
2. Blueprint : Line Trace By Channel
더보기블루프린트에서의 구현은 다음과 같습니다.
Line Trace By Channel 노드를 통해, 시작점과 끝점을 지정하여 직선 트레이싱을 수행할 수 있습니다.
3. C++ : UKismetSystemLibrary::LineTraceSingle
더보기Blueprint를 C++로 구현하면 다음과 같습니다.
FirstPersonCharacter.h
... class AFirstPersonCharacter : public ACharacter { ... public: ... virtual void Tick(float DeltaTime) override; ... };
FirstPersonCharacter.cpp
#include "Kismet/GameplayStatics.h" ... void AFirstPersonCharacter::Tick(float DeltaTime) { Super::Tick(DeltaTime); FHitResult HitResult; TArray<AActor*> LineTraceIgnoreActors; UKismetSystemLibrary::LineTraceSingle(GetWorld(), FirstPersonCameraComponent->GetComponentLocation(), FirstPersonCameraComponent->GetComponentLocation() + FirstPersonCameraComponent->GetForwardVector() * 1500, ETraceTypeQuery::TraceTypeQuery1, false, LineTraceIgnoreActors, EDrawDebugTrace::Type::ForOneFrame, HitResult, true); }
4. 살펴보기
더보기위 함수는 Hit Result 구조체와 bool 값을 반환합니다.
각각 수행한 트레이싱의 결과와 성공 여부입니다.
Hit Reuslt는 다음과 같이 많은 결과값으로 구성되어 있습니다.
몇 가지를 짚어본다면 충돌 지점의 좌표를 나타내는 Location, 충돌한 액터의 참조를 나타내는 Hit Actor이 있겠습니다.
이번 글에서는 Tick에 해당 함수를 구현했으나, 트레이싱이 필요한 상황에 한번만 호출하는 것으로 정확도를 높히는 등에 사용할 수 있습니다.
만약 트레이싱의 결과만 필요하고 시각적으로는 보이지 않아야 할 필요가 있다면, Draw Debug Type값을 None으로 설정하는 것으로 구현할 수 있습니다.
해당 기능은 FPS의 히트스캔과 같은 기능을 구현하는 데에 사용될 수 있습니다.
또한 1번 문단의 결과로 '레드 닷' 이라는 표현을 사용했으나, 게임에 실제로 적용되기에는 부적합한 이펙트이기 때문에, 결과 값을 이용해서 추가적인 이펙트를 구현하는 데 사용될 수 있겠습니다. (레드 닷 효과, 레이저 장애물 효과 등)
이후에 해당 기능을 이용하는 다른 글로 찾아뵐 수 있도록 하겠습니다.
감사합니다.
'Unreal Engine 5._' 카테고리의 다른 글
[Unreal Engine] LuaMachine : Install & Hello world (0) 2023.05.19 [Unreal Engine] C++ Code encoding (0) 2023.05.16 [Unreal Engine] Control game speed (Time Dilation) (0) 2023.04.06 [Unreal Engine] SetTimer() : Passing parameters (0) 2023.02.24 [Unreal Engine] IsA : Object type check in C++ (0) 2023.02.17