годот уроки.navigation 2

Сегодня я рассмотрю годот уроки.navigation 2 на Godot

годот уроки.navigation 2

У нас есть узел Node2D. Внутрь него вложены:

спрайт Sprite2D (изображение карты);

узел NavigationRegion2D;

камера;

сцена игрока.

NavigationRegion2D нужен для создания навигационной сетки (лабиринта), по которой персонаж сможет перемещаться.

Рассмотрим сцену игрока. Она состоит из узлов:

CharacterBody2D;

Sprite2D;

CollisionShape2D;

нового узла — NavigationAgent2D.

Код перемещения, прикреплённый к CharacterBody2D», полностью завязан на NavigationAgent2D`. Используются встроенные свойства для определения позиции агента и планирования следующей точки маршрута при обходе препятствий.

Теперь подробнее рассмотрим код, прикреплённый к узлу CharacterBody2D.

extends CharacterBody2D


var movement_speed := 200.0

@onready var navigation_agent: NavigationAgent2D = $NavigationAgent2D


func _ready() -> void:
navigation_agent.path_desired_distance = 2.0
navigation_agent.target_desired_distance = 2.0
navigation_agent.debug_enabled = true


func _unhandled_input(input_event: InputEvent) -> void:
if not input_event.is_action_pressed(&"click"):
return

set_movement_target(get_global_mouse_position())


func set_movement_target(movement_target: Vector2) -> void:
navigation_agent.target_position = movement_target


func _physics_process(_delta: float) -> void:
if navigation_agent.is_navigation_finished():
return

var current_agent_position: Vector2 = global_position
var next_path_position: Vector2 = navigation_agent.get_next_path_position()

velocity = current_agent_position.direction_to(next_path_position) * movement_speed
move_and_slide()

 

@onready var navigation_agent: NavigationAgent2D = $NavigationAgent2D

Назовём узел NavigationAgent2D как navigation_agent.

navigation_agent.path_desired_distance = 2.0
navigation_agent.target_desired_distance = 2.0

Эти настройки необходимы для того, чтобы подогнать габариты объекта под его перемещение.

navigation_agent.debug_enabled = true

Отображается красная линия пути.


if not input_event.is_action_pressed(&"click"):
return

Если левая кнопка мыши не нажата, выходим из функции. Обратите внимание: сама кнопка настраивается в Проект → Настройки проекта → Список действий.

navigation_agent.target_position = movement_target

Установка целевой точки для перемещения объекта.

if navigation_agent.is_navigation_finished():
return

Если навигация завершена, дальнейшая обработка не выполняется.

var current_agent_position: Vector2 = global_position
var next_path_position: Vector2 = navigation_agent.get_next_path_position()

Определяет текущую позицию объекта и следующую целевую точку.

velocity = current_agent_position.direction_to(next_path_position) * movement_speed

Вычисляется скорость перемещения.

move_and_slide()

Обеспечивается плавный обход препятствий без зависаний.

Конец годот уроки.navigation 2


На этом описание годот урока navigation 2 завершено. К восстановлению кода и структуры мы вернёмся в следующей статье. Спасибо за внимание.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх