스플라인 경로를 따라가는 액터, 로직을 어디에 둘 것인가
언리얼에서 정해진 경로를 따라 움직이는 액터(자율주행 차량, 순찰 NPC, 카메라 트랙 등)를 만들 때, 경로 추종 로직을 Pawn 안에 넣는 것이 흔한 첫 선택이다. 하지만 두 번째 액터를 추가하거나 경로를 갈아타는 시나리오가 들어오는 순간 구조가 무너진다.
결론
세 가지 책임을 세 가지 클래스로 분리한다.
- 경로 → Actor (월드에 놓이는 데이터)
- 움직이는 주체 → Pawn (조작 가능한 액터)
- 경로 추종 로직 → ActorComponent (Pawn에 부착)
ARoadActor (경로 데이터)
└── USplineComponent
APawn (차량)
└── USplineFollowerComponent (추종 로직)
의존성 방향이 핵심
ARoadActor ← 누구도 참조하지 않는다
↑
USplineFollowerComponent 참조: ARoadActor, APawn
↑
APawn ← 컴포넌트를 자식으로 보유
경로는 자신을 따라가는 액터를 모른다. 추종 컴포넌트만 양쪽을 안다. Pawn은 어떤 컴포넌트가 붙어 있는지 신경 쓰지 않는다.
이 방향 덕분에 한 경로를 여러 액터가 공유할 수 있고, 같은 Pawn에 다른 추종 로직(수동 조작 컴포넌트 등)을 갈아끼울 수 있고, 경로만 따로 두고 에디터에서 디자인할 수 있다.
추종 로직을 Pawn에 넣으면 안 되는 이유
한 줄 요약: 같은 로직을 다른 종류의 Pawn(승용차, 트럭, 비행체)에 붙일 수 없게 된다.
Component로 빼면 상속 트리에 의존하지 않고 조합으로 기능을 추가할 수 있다.
SplineFollowerComponent를 떼고 PlayerControlComponent를 붙이면 같은 차량이 수동 조작 차량이 된다.
적용 가능 범위
이 구조는 자율주행에 한정되지 않는다. "월드에 놓인 정적 데이터(경로, 트랙, 패트롤 포인트)를 따라 움직이는 액터"에 모두 적용된다. NPC 순찰, 시네마틱 카메라, 적 비행체 비행 패턴 등.
설계가 헷갈리면 세 질문으로 답이 나온다.
- 월드에 놓여야 하는 데이터인가 → Actor
- 조작 가능한 주체인가 → Pawn
- 다른 Actor에도 붙일 수 있는 기능인가 → Component
'etc' 카테고리의 다른 글
| 자율주행 차량 조향 가중치를 곡률에 따라 동적 조정하기 (Lerp 활용) (0) | 2026.05.13 |
|---|---|
| 언리얼 벡터로 도로 이탈 거리 구하기, Cross-Track Error 계산 과정 (0) | 2026.05.13 |
| 언리얼 스플라인 경로 추종 차량 조향, Pure Pursuit + Heading + Cross-Track 블렌딩으로 정리한 과정 (0) | 2026.05.13 |
| 언리얼 USplineComponent 따라가기, 위치를 누적 거리(float) 하나로 추적하기 (0) | 2026.05.13 |
| Big-O 표기법이란? (0) | 2026.04.13 |
