핵심 개념
캐릭터가 벽에 부딪혔을 때 벽을 따라 미끄러지는 방향을 구하는 벡터.
이동 벡터에서 법선 방향 성분을 제거하면 벽에 평행한 성분만 남는다.
공식
- V: 이동 벡터 (캐릭터가 움직이는 방향)
- N: 법선 벡터 (벽의 수직 방향, 단위 벡터)
- V·N: 내적 (V의 법선 방향 성분 크기)
직관적 이해
N
↑
|
V ──────+──────→ S (슬라이딩)
|
────────────────── 벽
(V·N)N→ V에서 법선 방향 성분만 추출 (벽을 뚫고 들어가는 성분)- 이걸 빼면 → 벽에 평행한 성분만 남음
벽을 뚫고 들어가는 성분을 제거하면 자연스럽게 미끄러진다.
반사 벡터와 비교
| 공식 | 결과 | |
|---|---|---|
| 슬라이딩 | V - (V·N)N | 벽에 평행하게 미끄러짐 |
| 반사 | V - 2(V·N)N | 법선 기준으로 대칭 반사 |
한 번 빼면 슬라이딩, 두 번 빼면 반사
게임 구현
Vector3 Slide(Vector3 V, Vector3 N) {
return V - Dot(V, N) * N;
}
// 매 프레임 충돌 시
if (IsColliding()) {
velocity = Slide(velocity, wallNormal);
}활용 예시
- 캐릭터가 벽에 붙어서 이동할 때
- 경사면을 따라 미끄러질 때
- FPS 게임의 벽 슬라이딩 구현