1. LineTrace
1-1. LineTrace란?
- 한 지점에서 다른 지점까지 직선상의 가상 선을 쏘아 해당 선과 충돌하는 오브젝트를 감지하는 방식이다.
- 흔히 ‘레이캐스트(Raycast)’라고도 불리며, 시야 내 충돌 체크, 총알 명중 판정, 상호작용 대상 확인 등에 활용된다.
1-2. LineTrace 종류
- 라인 트레이스는 크게 감지 개수와 필터링 기준에 따라 나뉜다.
1) 감지 방식에 따른 분류
- Single Trace: 첫 번째로 충돌한 오브젝트 1개만 감지한다.
- Multi Trace: 을 따라 충돌하는 모든 오브젝트를 감지한다.
2) 필터링 기준에 따른 분류
- Channel 기반 (LineTraceByChannel):
오브젝트의 Collision Channel 설정을 기반으로 충돌 여부를 판단한다.
가장 일반적인 방식이며, ECC_Visibility, ECC_Pawn 등의 채널을 사용한다.
- Object Type 기반 (LineTraceByObjectType):
오브젝트의 물리 타입(Pawn, WorldDynamic 등)으로 충돌 대상을 걸러낸다.
- Profile 기반 (LineTraceByProfile):
충돌 설정을 미리 정의한 Collision Profile 이름을 기준으로 필터링한다.
1-3. LineTrace 사용법
- 라인 트레이스를 사용하려면 먼저 시작 위치(Start)와 끝 위치(End)를 설정해야 한다.
- 대부분의 경우, 카메라 위치와 카메라가 바라보는 방향을 기반으로 계산한다.
// 카메라 위치를 시작점으로 설정한다.
FVector Start = Camera->GetComponentLocation();
// 카메라가 바라보는 방향(Camera->GetForwardVector())으로 TraceDistance만큼 전방의 지점을 끝점으로 설정한다.
FVector End = Start + Camera->GetForwardVector() * TraceDistance;
// 라인 트레이스 결과를 담을 변수 선언 (충돌된 오브젝트 정보, 위치, 노멀 등 포함)
FHitResult HitResult;
// 라인 트레이스를 수행하여 Start에서 End까지 직선 경로로 선을 쏘고, 가장 먼저 부딪히는 오브젝트 1개를 감지한다.
GetWorld()->LineTraceSingleByChannel(
HitResult, // 감지된 결과를 저장할 변수
Start, // 라인 트레이스 시작 위치
End, // 라인 트레이스 끝 위치
ECC_Visibility // 사용하는 충돌 채널 (일반적으로 시야 판정용 채널)
);
1-4. LineTrace 디버그하기
- 라인 트레이스의 경로는 눈에 보이지 않기 때문에, 디버그 선을 그려서 확인해야 한다.
- 블루프린트에서는 바로 디버그 기능을 설정할 수 있지만, C++에서는 다음과 같이 직접 그려줘야 한다.
DrawDebugLine(
GetWorld(), // 월드 컨텍스트 (월드 정보를 참조)
Start, // 선의 시작 지점
End, // 선의 끝 지점
FColor::Red, // 선의 색상 (빨간색), 여러 색 존재
false, // true면 지속적으로 그려지고, false면 일정 시간 후 사라진다.
1.0f, // 선을 그려둘 지속 시간 (초) - 여기서는 1초 동안 표시된다.
0, // Depth Priority (Z값 우선도), 0은 기본값
1.0f // 선의 두께 (1.0이면 기본 굵기)
);
1-5. 여러 종류의 Trace
- 언리얼 엔진에서는 라인 트레이스 외에도 다양한 형태의 트레이스를 지원한다.
- 대표적으로 다음과 같은 것이 있다:
1) Box Trace: 박스 형태로 감지
2) Sphere Trace: 구 형태로 감지
3) Capsule Trace: 캡슐 형태로 감지
- 기본적인 사용 방식은 LineTrace와 유사하며, 형태만 다를 뿐 원리는 같다.
충돌 범위를 넓히거나, 더 자연스러운 판정 처리를 위해 자주 활용된다.
2. 기능 활용 예시
2-1. 조준선과 가장 가까운 오브젝트에 맞도록 쿠나이 날리기
- 조준선의 방향으로 라인트레이스를 쏘고, 충돌 지점 또는 최대 거리 지점을 목표로 삼아 쿠나이를 날린다.
- 별도의 수학 연산 없이 기본 기능만으로 구현한 조준 로직이다.
2-2. 조준 오차를 조정해 표창을 발사하기
- TPS환경에서 조준 오차를 조정해 좀 더 현실적인 표창 발사 로직을 구현했다.
Unreal 5 구현 - TPS 조준 시스템
1. TPS 게임 개발에서의 문제점 - TPS 게임을 개발하면서 가장 먼저 마주한 문제는, 총알이 조준한 곳으로 날아가지 않는 현상이었다. - 총알을 카메라의 조준점 방향으로 날아가게 하면, 총구가 보
gyro-code-game.tistory.com
2-3. 벽 타기
- 라인 트레이스를 통해 플레이어 전방에 벽이 존재하는지를 확인하며, 특정 거리 내에서만 발동 조건이 충족되도록 설정했다.
Unreal 5 구현 - 벽 타기 시스템
1. 벽 타기 동작의 기본 로직1-1. 점프 입력 시 조건 분기- 점프 키가 입력되면, 캐릭터 앞에 벽이 있는지를 확인한다.- 벽 감지는 캐릭터가 밟고 올라갈 수 없는 높이에서 캐릭터의 전방으로 라인
gyro-code-game.tistory.com
'Programming > Unreal 5 정보, 기능' 카테고리의 다른 글
| Unreal 5 기능 - Delegate (0) | 2025.06.24 |
|---|
