이 카테고리는 고도 엔진(Godot Engine) 관련 문법을 기록하고 저장하기 위해 만든 공간입니다.
이번에는 게임을 만들다 보면 "플레이어와 몬스터 사이의 거리가 얼마나 될까?", "총알이 플레이어가 있는 방향으로 날아가게 하려면 어떻게 해야 할까?" 같은 고민을 아주 자주 하게 됩니다. 지난 시간 벡터의 기초에서 '도착점 - 출발점 = 방향'이라는 공식을 배웠지만, 고도 엔진에서는 이를 훨씬 더 직관적이고 편리하게 해결할 수 있는 내장 함수를 제공합니다. 바로 distance_to()와 direction_to()입니다.
1. distance_to(): 너와 나의 거리 (거리 구하기)
distance_to() 함수는 두 노드의 위치(주로 global_position) 사이의 실제 직선거리를 계산해 줍니다. 2D 게임에서는 픽셀 단위, 3D 게임에서는 미터 단위의 실수(float) 값을 반환합니다.
"적이 사정거리 안에 들어왔는가?", "아이템을 주울 수 있을 만큼 가까이 전근했는가?" 등을 판별할 때 필수적으로 사용됩니다.
@onready var player = $Player
func _process(delta):
# 현재 노드(몬스터)의 위치에서 플레이어 위치까지의 거리를 구합니다.
var distance = global_position.distance_to(player.global_position)
# 거리가 200픽셀보다 작으면 플레이어를 감지하고 추격을 시작합니다.
if distance < 200.0:
print("플레이어 감지! 추격 시작! (거리: ", distance, ")")
2. direction_to(): 그곳을 향해 전진 (방향 구하기)
direction_to() 함수는 내 위치에서 상대방 위치를 가리키는 '길이가 1로 고정된 방향 벡터(정규화된 벡터)'를 곧바로 반환해 줍니다.
과거에 배웠던 (상대방 위치 - 내 위치).normalized() 공식을 단 한 줄로 깔끔하게 축약한 함수입니다. 이 함수 덕분에 대각선이나 임의의 각도로 이동할 때도 속도가 일정하게 유지되는 화살표(방향)를 쉽게 얻을 수 있습니다.
@onready var player = $Player
const SPEED = 150.0
func _physics_process(delta):
# 내 위치에서 플레이어 위치를 향하는 방향 벡터(길이 1)를 구합니다.
var direction = global_position.direction_to(player.global_position)
# 구한 방향 벡터에 이동 속도를 곱해 플레이어 쪽으로 걸어갑니다.
velocity = direction * SPEED
move_and_slide()
3. 실전 활용: 사정거리 검사와 조준(look_at) 결합
두 함수를 함께 사용하면 원거리 공격을 하는 적 AI나 유도 미사일의 기초를 완벽하게 구현할 수 있습니다.
@onready var player = $Player
const ATTACK_RANGE = 100.0
func _process(delta):
var distance = global_position.distance_to(player.global_position)
var direction = global_position.direction_to(player.global_position)
# 1. 언제나 플레이어가 있는 방향을 바라보게 만듭니다.
look_at(player.global_position)
# 2. 사정거리 안에 들어왔을 때만 공격을 실행합니다.
if distance <= ATTACK_RANGE:
execute_attack()
한눈에 보는 거리와 방향 핵심 요약
| 함수 | 반환 값 타입 | 기능 설명 | 실전 게임 개발 활용 예시 |
| A.distance_to(B) | 실수 (float) | 지점 A에서 지점 B까지의 실제 직선거리를 구합니다. | 몬스터의 시야 범위 체크, 타워 디펜스의 사거리 판정, 근접 상호작용 가능 여부 |
| A.direction_to(B) | 벡터 (Vector2 / Vector3) | 지점 A에서 지점 B를 향하는 길이가 1인 방향 벡터를 구합니다. | 적을 향해 날아가는 총알의 유도 로직, 플레이어를 쫓아오는 좀비의 이동 방향 설정 |
'게임 > 고도엔진 문법' 카테고리의 다른 글
| 29. [고도 엔진] 플레이어 이동시키기: CharacterBody와 move_and_slide() (0) | 2026.07.17 |
|---|---|
| 27. [고도 엔진] 2D/3D 공간의 이해: 벡터(Vector2, Vector3) 기초 (0) | 2026.07.15 |
| 26. [고도 엔진] 열거형(enum)을 활용한 캐릭터 상태 기계(State Machine) 만들기 (0) | 2026.07.14 |