1. Основы 2.5D в Godot: Настройка сцены, камеры и проекции
Основы 2.5D в Godot: Настройка сцены, камеры и проекции
Добро пожаловать в курс по разработке Top-Down 2.5D игры! Это первая статья, в которой мы заложим фундамент нашего проекта. Мы не просто создадим пустую сцену, а разберем, как работает восприятие пространства в играх, настроим «правильную» камеру и напишем первый скрипт на GDScript для управления проекцией.
Что такое 2.5D в контексте Godot?
Термин 2.5D может означать разные вещи. Иногда это 2D-спрайты в 3D-мире (как в Don't Starve или Ragnarok Online), иногда — 3D-модели с фиксированной камерой, имитирующей 2D (как в Hades или Diablo). В рамках этого курса мы сосредоточимся на втором подходе: использование 3D-движка Godot для создания игры с видом сверху, которая ощущается как классическая 2D RPG или экшен, но обладает всеми преимуществами трехмерной графики (тени, освещение, физика).
Ключевой элемент, который превращает 3D в 2.5D — это проекция камеры.
!Сравнение перспективной и ортогональной проекций камеры.
Настройка проекта
Перед тем как писать код, создадим проект:
Создание базовой сцены
В Godot 4 любая сущность является узлом (Node). Для 3D-игры корневой узел сцены должен наследовать от Node3D.
Node3D).World.res://scenes/World.tscn (рекомендуется сразу создать папку scenes).Чтобы нам было на что смотреть, добавим пол и куб:
CSGBox3D к World. В инспекторе установите его размер (Size) на . Это будет наш пол.CSGBox3D, поднимите его чуть выше пола. Это будет наш «игрок» или объект для теста.DirectionalLight3D и включите у него тени (Shadows -> Enabled), чтобы видеть объем.Магия камеры: Перспектива против Ортогональности
Теперь самое важное. Добавьте узел Camera3D в сцену. По умолчанию Godot использует перспективную проекцию.
Перспективная проекция
В перспективе объекты, находящиеся дальше, кажутся меньше. Это реалистично, но для Top-Down игр часто мешает точному позиционированию игрока и оценке расстояний.Ортогональная проекция
В ортогональной проекции размер объекта не зависит от расстояния до камеры. Лучи зрения параллельны друг другу. Это создает тот самый «изометрический» или «классический» вид.Выберите узел Camera3D и в Инспекторе найдите свойство Projection. Измените его с Perspective на Orthographic.
Теперь настроим размер видимой области. За это отвечает свойство Size (вместо FOV в перспективе). Установите Size равным 10 или 15. Чем меньше число, тем ближе «зум».
Математика изометрии
Чтобы получить «истинную» изометрию, камеру нужно повернуть под определенными углами. Часто разработчики ставят угол «на глаз» (например, -45 градусов по оси X), но давайте разберем математически идеальный угол.
Для классической изометрии, где оси X, Y и Z проецируются под равными углами друг к другу на 2D-экране, угол наклона камеры по оси X должен быть равен:
Где: * — искомый угол поворота камеры вокруг оси X. * — арксинус, обратная тригонометрическая функция. * — отношение, возникающее из геометрии куба (диагональ куба).
Если вычислить это значение:
Где: * — знак приблизительного равенства. * — угол в градусах.
Также камеру нужно повернуть по оси Y на . Однако, для Top-Down игр часто используют более крутой угол, например, по X, чтобы лучше видеть переднюю часть персонажей.
Пишем скрипт настройки камеры (GDScript)
Вместо того чтобы крутить камеру вручную, создадим скрипт, который позволит нам гибко настраивать камеру. Это полезно, если мы захотим менять угол обзора в процессе игры.
Camera3D.GameCamera.gd.Вот код для базовой настройки камеры:
Разбор кода
* @export — делает переменную доступной в редакторе Godot. Вы можете менять angle_x и видеть результат при запуске.
* projection = Camera3D.PROJECTION_ORTHOGONAL — жестко задает режим проекции.
* rotation_degrees.x — вращение вокруг красной оси. Значение заставит камеру смотреть строго вниз (как на карте). Значение даст хороший обзор стен и персонажей.
!Настройка свойств камеры в инспекторе Godot.
Настройка окружения (WorldEnvironment)
Чтобы картинка не выглядела серой и скучной, добавим узел WorldEnvironment.
WorldEnvironment в сцену World.Environment.Sky или Color.Filmic — это сделает освещение более мягким и кинематографичным.Итог
Мы создали базу для нашей игры: * Настроили 3D-сцену. * Разобрали разницу между перспективой и ортогональностью. * Применили математику для понимания угла обзора. * Написали скрипт на GDScript для управления параметрами камеры.
В следующей статье мы займемся созданием персонажа и реализацией его передвижения в этой изометрической системе координат, учитывая особенности управления Vector3.