project.godot внутри папки lesson_01_godot_intro/project/В проекте уже есть:
sprites/ с цветными SVG-спрайтами (circle.svg, square.svg, triangle.svg, background.svg)scenes/main.tscnПримечание: Godot автоматически импортирует SVG-файлы как текстуры. Просто перетаскивайте их из «Файловой системы» на поля Texture в инспекторе.
Цель: научиться добавлять узлы, настраивать свойства, строить иерархию.
Откройте сцену scenes/main.tscn
Корневой узел уже создан — Node2D с именем Main
Добавьте фон:
MainSprite2D → «Создать»Background (двойной клик по имени в дереве сцены)sprites/background.svg на поле TextureДобавьте три игровых объекта:
Для каждого объекта:
Main в дереве сценыSprite2D → «Создать»RedCircle, BlueSquare, GreenTriangleRedCircle → перетащите sprites/circle.svgBlueSquare → перетащите sprites/square.svgGreenTriangle → перетащите sprites/triangle.svgРезультат — дерево сцены:
Main (Node2D)
├── Background (Sprite2D)
├── RedCircle (Sprite2D)
├── BlueSquare (Sprite2D)
└── GreenTriangle (Sprite2D)
Нажмите F6 и убедитесь, что видите фон с тремя объектами.
Цель: понять, как вложенность влияет на поведение.
Создайте узел Node2D как дочерний к Main, назовите его Objects
Перетащите все три объекта (RedCircle, BlueSquare, GreenTriangle) внутрь Objects:
ObjectsТеперь дерево выглядит так:
Main (Node2D)
├── Background (Sprite2D)
└── Objects (Node2D)
├── RedCircle (Sprite2D)
├── BlueSquare (Sprite2D)
└── GreenTriangle (Sprite2D)
Выберите узел Objects и в инспекторе измените Position → X: 100
Обратите внимание: все три дочерних объекта сместились вместе! Позиция дочерних узлов задаётся относительно родителя.
Верните Position.X в 0.
Objects на (0.5, 0.5)Цель: научиться создавать подсцены и инстанцировать их.
Меню Сцена → Новая сцена
Выберите «2D-сцена» — это автоматически создаст корневой Node2D
Переименуйте его в GamePiece
Добавьте дочерний Sprite2D, назначьте текстуру sprites/circle.svg
Добавьте дочерний Label:
"Объект"GamePiece (Node2D)
├── Sprite2D
└── Label
Сохраните сцену: Ctrl+S → scenes/game_piece.tscn
Вернитесь к сцене main.tscn (вкладка сверху)
Способ 1: Перетащите файл scenes/game_piece.tscn из «Файловой системы» на вьюпорт
Появился экземпляр GamePiece. Переместите его в удобное место.
Добавьте ещё 2 экземпляра тем же способом
Переименуйте их: Piece1, Piece2, Piece3
Main (Node2D)
├── Background (Sprite2D)
├── Objects (Node2D)
│ ├── RedCircle (Sprite2D)
│ ├── BlueSquare (Sprite2D)
│ └── GreenTriangle (Sprite2D)
├── Piece1 (GamePiece)
├── Piece2 (GamePiece)
└── Piece3 (GamePiece)
Попробуйте у одного из экземпляров изменить текст Label:
Sprite2D и LabelLabelЗапустите (F6) и проверьте.
game_piece.tscn (двойной клик по файлу)main.tscnВывод: изменения в исходной сцене автоматически применяются ко всем экземплярам. Только те конкретные свойства, которые были переопределены вручную, не обновляются.
Цель: прикрепить скрипт и увидеть результат.
main.tscnMainres://scripts/main.gd → нажмите «Загрузить» (файл уже создан в шаблоне проекта)extends Node2D
func _ready() -> void:
# TODO 1: Выведите сообщение при запуске
# print("Игра запущена!")
# TODO 2: Выведите количество дочерних узлов
# print("Количество дочерних узлов: ", get_child_count())
# TODO 3: Переберите все дочерние узлы и выведите их имена
# for child in get_children():
# print(" - ", child.name, " (тип: ", child.get_class(), ")")
pass
# в начале каждой строки кода. Удалите pass из функции _ready().Совет: После раскомментирования проверьте отступы. Godot использует табуляцию (Tab). Если возникла ошибка отступов, выделите проблемные строки и нажмите Tab для правильного выравнивания, или используйте меню Edit → Convert Indent to Tabs.
Раскомментируйте TODO 4 в функции _process() — вращение группы Objects:
func _process(delta: float) -> void:
# TODO 4 (бонус): Вращайте группу объектов "Objects"
var objects_node := get_node_or_null("Objects") as Node2D
if objects_node:
objects_node.rotation += 1.0 * delta # 1 радиан в секунду
Не забудьте удалить pass из функции. Запустите и посмотрите, как группа объектов вращается целиком.
Создайте сцену obstacle.tscn:
StaticBody2DSprite2D с текстурой квадратаCollisionShape2D с формой RectangleShape2DРазместите несколько экземпляров на уровне
Это будут «стены» для будущей головоломки — они понадобятся, когда мы подключим физику на занятии 4.