Godot Editor, сцена и узлы
Scene tree, Node3D — фундамент всего в Godot.
Editor: главные окна
Godot Editor — это IDE для контента. Главные доки (можно перетаскивать как в Unity):
- 3D Viewport — окно сцены, в котором летаете и расставляете узлы. Переключатели: 2D / 3D / Script / AssetLib.
- Scene (слева сверху) — дерево узлов текущей сцены. Аналог Unity Hierarchy.
- FileSystem (слева снизу) — файлы проекта. Аналог Unity Project.
- Inspector (справа) — свойства выбранного узла или ресурса.
- Node (справа сверху) — вкладка для просмотра/подключения сигналов этого узла. Это отдельная штука относительно Unity.
- Output / Debugger / Search — снизу.
Привязки манипуляторов в 3D viewport совпадают с большинством 3D-софта: Q — select, W — move, E — rotate, R — scale. Snap to grid — клавиша Y (тогглит).
Если вы открываете 4.6 впервые после старых версий, заметите два больших изменения:
- Modern theme — новая editor theme (более нейтральная палитра, меньше синего). В Editor Settings можно вернуть классическую.
- Unified docking — доки теперь перетаскиваются на любые стороны экрана, включая bottom panels. Можно собрать любую раскладку. Раньше доки были привязаны к фиксированным позициям.
Scene — это .tscn файл
Сцена в Godot — текстовый файл .tscn с описанием дерева узлов. Открывается в любом редакторе,
дружит с git. Пример минимальной сцены:
[gd_scene load_steps=2 format=3 uid="uid://abc123"]
[ext_resource type="Script" path="res://player.gd" id="1"]
[node name="Player" type="CharacterBody3D"]
script = ExtResource("1")
[node name="Mesh" type="MeshInstance3D" parent="."]
[node name="Collision" type="CollisionShape3D" parent="."]
Сцены можно инстанциировать в другие сцены, наследовать их и переопределять отдельные свойства — это аналог Unity Prefab Variants, но более гибкий.
React-страница <App /> рендерит <Header />, <Main />, <Footer />. Каждое из них — это
компонент в своём файле; их можно переиспользовать.
Сцена Level_01.tscn подключает Player.tscn, HUD.tscn, Enemy.tscn. Каждый из них —
отдельный файл, который можно править отдельно. Один скрипт правит — все экземпляры
обновляются.
Узел (Node) — главный примитив
В Godot нет GameObject. Есть Node — базовый класс, к которому каждый узел в сцене относится. И его специализированные подклассы:
Object ← базовый для всего движка
├── RefCounted
│ └── Resource ← data-ассеты (.tres), рефкаунт
└── Node ← всё, что в дереве сцены
├── CanvasItem ← общий предок 2D-объектов и UI
│ ├── Node2D ← 2D-трансформ (position, rotation, scale)
│ └── Control ← UI (anchors, offsets, layout)
├── Node3D ← 3D-трансформ
└── ... десятки специализаций
Ключевые 3D-подклассы Node3D:
- MeshInstance3D — рисует mesh.
- Camera3D — камера.
- DirectionalLight3D, OmniLight3D, SpotLight3D — свет.
- StaticBody3D, RigidBody3D, CharacterBody3D, AnimatableBody3D, Area3D — физика.
- CollisionShape3D — форма для коллизий.
- AudioStreamPlayer3D — звук.
В отличие от Unity, к узлу можно прикрепить только один скрипт. Это не ограничение, а
философия: композиция делается через дочерние узлы, не через “стек компонентов”. Нужен
объект со здоровьем, инвентарём и стрельбой? Один скрипт Player.gd + дочерние узлы
Inventory, Weapon, Health, у каждого свой скрипт.
Иерархия и трансформ
Узел Node3D имеет transform: Transform3D — структура из basis (3×3 матрица поворота+масштаба)
и origin: Vector3 (позиция). Удобные ярлыки:
position: Vector3—transform.origin.rotation: Vector3— углы Эйлера (в радианах!).rotation_degrees: Vector3— то же в градусах для удобства редактора.scale: Vector3.global_position,global_transform— в мировых координатах.
$Mesh.position = Vector3(0, 1.5, 0) # вверх на 1.5 м
$Mesh.rotation_degrees.y += 90.0 # повернуть на 90° вокруг Y
$Mesh.scale = Vector3.ONE * 2.0 # увеличить в 2 раза
$Name — это шорткат для get_node("Name") — поиск ребёнка по имени. $Path/To/Child —
относительный путь, как в файловой системе.
Координатная система
В Godot — правосторонняя Y-up:
- +X — вправо
- +Y — вверх
- +Z — на наблюдателя (на нас) — а вперёд от наблюдателя смотрит −Z
Unity — left-handed, +Z forward. Godot — right-handed, −Z forward. То есть камера по умолчанию
смотрит “в минус Z”. transform.basis * Vector3.FORWARD в Godot возвращает направление “вперёд”
(которое внутри Vector3.FORWARD = Vector3(0, 0, -1)).
Гравитация по умолчанию: Vector3(0, -9.8, 0). Один Unit = 1 метр (по соглашению).
Группы
Godot не использует Unity-теги. Вместо них — группы (groups):
# Добавить узел в группу (в редакторе или из кода)
enemy.add_to_group("enemies")
# Получить все узлы группы
var all_enemies = get_tree().get_nodes_in_group("enemies")
# Вызвать метод на всех
get_tree().call_group("enemies", "take_damage", 10)
Группы можно настраивать в редакторе во вкладке Node → Groups. Подходит для запросов “найти всех NPC”, “все checkpoints”, “враги в активной зоне”.
Запуск сцены
Кнопки сверху справа в редакторе:
- Play (F5) — запустить главную сцену проекта.
- Play Scene (F6) — запустить текущую открытую сцену.
- Play Custom Scene (Ctrl+Shift+F5) — выбрать любую.
Главная сцена настраивается в Project → Project Settings → Application → Run → Main Scene.
В следующей главе — GDScript и жизненный цикл узла.