Source: godot engine

← Rendered

markdown source:

---
description: Godot engine движок для создания игр
tags: gamedev
title: godot engine
---
Кроссплатформенный опенсорсный движок, поддерживающий 2D и 3d разработку. Основные зяыки: [[gdscript]] и `C#`. Можно писать скрипты на [[c-plus-plus]] или `C` без рекомпиляции. [Документация](https://docs.godotengine.org/en/stable/index.html).

## Основные концепты

### Сцены

В Godot вы разбиваете свою игру на реюзабельные сцены. Сцена может быть персонажем, оружием, меню в пользовательском интерфейсе, отдельным домом, целым уровнем или чем угодно. Можно создавать иерархию сцен, вкладывая одну в другую.

### Ноды

Сцена состоит из одного или нескольких узлов (нод). Ноды — это наименьшие строительные блоки вашей игры, которые можно собирать в иерархические древоподобные структуры.

Имена узлов заканчиваются на «2D» для 2D-сцен. Их трехмерные аналоги имеют имена, оканчивающиеся на «3D». «Spatial» ноды называются «Node3D», начиная с Godot 4.

Godot предоставляет обширную библиотеку базовых типов нод, которые вы можете комбинировать и расширять для создания более мощных нод.

Все ноды имеют следующие характеристики:

- Имя.
- Редактируемые свойства.
- Они получают обратные вызовы для обновления каждого кадра.
- Вы можете расширить их новыми свойствами и функциями.
- Вы можете добавить их в другой узел как дочерний.

Последняя характеристика важна. Вместе узлы образуют дерево, которое является мощной функцией для организации проектов. Поскольку разные узлы имеют разные функции, их объединение приводит к более сложному поведению.

Дублируемые ноды могут как наследовать повдение своего класса, так ир еализовывать (переопределять) собственное повдение.

### Дерево сцены

Все сцены вашей игры собраны в дереве сцен. А поскольку сцены — это деревья нод, дерево сцен также является деревом нод.

После сохранения сцены работают как новые типы нод в редакторе, где вы можете добавить их как дочерние элементы существующей ноды. В этом случае экземпляр сцены отображается как единый узел со скрытыми внутренними элементами.

Сцены позволяют вам структурировать код вашей игры так, как вы хотите. Вы можете создавать ноды для создания пользовательских и сложных типов нод, таких как игровой персонаж, который бегает и прыгает, полоса жизни, сундук, с которым вы можете взаимодействовать, и многое другое.

![scenes tree](../attachments/2023-06-01-01-16-47.png)

Редактор Godot по сути является редактором сцен . Он имеет множество инструментов для редактирования 2D- и 3D-сцен, а также пользовательских интерфейсов. Проект Godot может содержать столько таких сцен, сколько вам нужно. Движку требуется только один объект в качестве основной сцены вашего приложения . Это сцена, которую Godot загрузит первой, когда вы или игрок запустите игру.

Сцены обладают следующими характеристиками:

- У них всегда есть один корневой узел/
- Вы можете сохранить их на свой локальный диск и загрузить позже.
- Вы можете создать столько экземпляров сцены, сколько захотите.

После того как вы сохранили сцену, она работает как план: вы можете воспроизвести ее в других сценах столько раз, сколько захотите. Репликация объекта из такого шаблона называется созданием экземпляров.

Экземпляры сцен ведут себя как ноды: редактор по умолчанию скрывает их содержимое. Каждый дубликат имеет уникальное имя.

Вот пример диаграммы сцены для игры с открытым миром с множеством ассетов и вложенных элементов:

![openworld](../attachments/2023-06-01-01-55-33.png)

Представьте, что мы начали с создания комнаты. Мы могли бы сделать пару разных комнатных сцен с уникальной расстановкой мебели в них. Позже мы могли бы создать сцену дома, в которой для интерьера использовалось бы несколько экземпляров комнаты. Мы создадим цитадель из множества инстансов домов и большого ландшафта, на котором мы разместим цитадель. Каждая из них будет сценой, создающей одну или несколько подсцен. Позже мы могли создать сцены, изображающие охранников, и добавить их в цитадель. Они будут косвенно добавлены в общий игровой мир.

### Сигналы

Узлы излучают сигналы, когда происходит какое-то событие. Эта функция позволяет вам заставить узлы обмениваться данными, не запрограммировав это жестко в коде. Это дает вам большую гибкость в том, как вы структурируете свои сцены. Сигнал реализует паттерн "наблюдатель"

## Редактор

Подробная информация в [руководстве по редактору](https://docs.godotengine.org/en/stable/tutorials/editor/index.html#toc-learn-editor)

Когда вы запускаете Godot, первое окно, которое вы видите, — это менеджер проектов. На вкладке «Локальные проекты» по умолчанию вы можете управлять существующими проектами, импортировать или создавать новые и т. д.

Когда вы открываете новый или существующий проект, появляется интерфейс редактора.

![godot main](../attachments/2023-05-31-01-56-33.png)

В центре находится окно просмотра с панелью инструментов вверху, где вы найдете инструменты для перемещения, масштабирования или блокировки нод сцены. По обеим сторонам окна просмотра находятся docks (доки). А внизу окна лежит нижняя панель. Содержимое панели инструментов меняется в зависимости от контекста и выбранной ноды.

В доке FileSystem перечислены файлы вашего проекта, включая сценарии, изображения, аудиосэмплы и многое другое.

![godot filesystems](../attachments/2023-05-31-02-00-53.png)

В доке «Scene» перечислены ноды активной сцены.

![godot scene](../attachments/2023-05-31-02-01-45.png)

Инспектор позволяет редактировать свойства выбранной ноды.

![godot inspector](../attachments/2023-05-31-02-02-23.png)

Нижняя панель, расположенная под окном просмотра, является хостом для консоли отладки, редактора анимации, аудиомикшера и многого другого.

В верхней части редактора расположены четыре кнопки основного экрана: 2D, 3D, Script и AssetLib.

Вы будете использовать 2D-экран для всех типов игр. Помимо 2D-игр, на 2D-экране вы будете создавать свои интерфейсы.

На 3D-экране вы можете работать с сетками, источниками света и уровнями дизайна для 3D-игр.

Экран «Script» — это полноценный редактор кода с отладчиком, расширенными возможностями линтинга и встроенным справочником по коду.

Наконец, AssetLib — это библиотека бесплатных надстроек, скриптов и ресурсов с открытым исходным кодом для использования в ваших проектах.

Встроенная справочная система:

- F1
- кнопка «Search Help»
- `ctrl` + клик на класс, метод и т.п.

## Языки программирования и скрипты

Скрипты прикрепляются к ноде и расширяют ее поведение. Это означает, что скрипты наследуют все функции и свойства ноды, к которой они привязаны.

Godot предлагает четыре языка программирования геймплея : [[GDScript]], C# и, благодаря технологии GDExtension, C и C++. Есть и другие языки, поддерживаемые сообществом, но это официальные.

Вы можете использовать несколько языков в одном проекте. Например, в команде вы можете кодировать логику игрового процесса на GDScript, так как он быстро пишется, и использовать C# или C++ для реализации сложных алгоритмов и максимизации их производительности. Или вы можете написать все на GDScript или C#. Это ваш вызов.

Мы предоставляем эту гибкость, чтобы удовлетворить потребности различных игровых проектов и разработчиков.

Для C# вам понадобится внешний редактор кода, такой как VSCode или Visual Studio. Несмотря на то, что поддержка C# в настоящее время развита, вы найдете для нее меньше учебных ресурсов по сравнению с GDScript. Вот почему мы рекомендуем C# в основном пользователям, уже имеющим опыт работы с этим языком.

C# поддерживается потому что оно популярен среди разработчиков игр. Для работы с C# потребуется .NET версия Godot редактора. Поскольку Godot использует .NET 6, теоретически вы можете использовать в Godot любую стороннюю библиотеку или инфраструктуру .NET, а также любой язык программирования, совместимый с Common Language Infrastructure, например F#, Boo или ClojureCLR. Однако C# — единственный официально поддерживаемый вариант .NET.

Несколько лет назад Godot использовал Python, затем Lua. Интеграция обоих языков потребовала много работы и имела серьезные ограничения. Например, поддержка многопоточности была большой проблемой для Python.

Сам код GDScript выполняется не так быстро, как скомпилированный C# или C++. Однако код большинства скриптов вызывает функции, написанные с помощью быстрых алгоритмов в коде C++ внутри движка. Во многих случаях написание игровой логики на GDScript, C# или C++ не окажет существенного влияния на производительность.

GDExtension позволяет вам писать код игры на C++ без необходимости перекомпилировать Godot.

![GDExtention](../attachments/2023-06-01-22-38-33.png)

Вы можете использовать любую версию языка или смешатьверсии компиляторов для сгенерированных общих библиотек благодаря нашему использованию внутреннего C API Bridge.

GDExtension — лучший выбор для повышения производительности. Вам не нужно использовать его на протяжении всей игры, так как вы можете писать другие части на GDScript или C#.

При работе с GDExtension доступные типы, функции и свойства очень похожи на реальный C++ API Godot.

[Базовый пример работы со скриптами](https://docs.godotengine.org/en/stable/getting_started/step_by_step/scripting_first_script.html)

[Документация GDScript](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#doc-gdscript)

Смотри еще:

- [сайт проекта](https://godotengine.org/)
- [docs](https://docs.godotengine.org/en/stable/index.html#), [github repo](https://github.com/godotengine/godot)
- [[gdscript]]
- [[godot-templates]]
- [[godot-ai-gim]]
- [GDScript](https://gdscript.com/) evolved as a custom scripting language to be used with the Godot computer (and mobile device) Game engine, and for those people who look beyond the real world, it also supports Virtual Reality.
- [Awesome Godot repo](https://github.com/godotengine/awesome-godot) A curated list of free/libre plugins, scripts and add-ons for Godot
- [more godot resources](https://godot-engine.zeef.com/andre.antonio.schmitz)
- [godot-visual-effects](https://github.com/gdquest-demos/godot-visual-effects) is a Free and Open-Source set of polished visual effects from our course Godot VFX Secrets
- [godot_rl_agents](https://github.com/edbeeching/godot_rl_agents) An Open Source package that allows video game creators, AI researchers and hobbyists the opportunity to learn complex behaviors for their Non Player Characters or agents
- [gut](https://github.com/bitwes/Gut) Godot Unit Test. Unit testing tool for Godot Game Engine.
- [Nakama Godot 4](https://heroiclabs.com/docs/nakama/client-libraries/godot/) Клиент сервака для godot. Nakama is a scalable server for social and real-time games and apps. [repo](https://github.com/heroiclabs/nakama-godot), [Nakama Godot Demo](https://github.com/heroiclabs/nakama-godot-demo)
- [godot_voxel](https://github.com/Zylann/godot_voxel) [[voxel]] module for Godot Engine
- [[godot_shaders]]
- [Hengo](https://github.com/Henrique-Henrique/Hengo) Godot Visual Script. [site](https://hengoscript.com/)
- [godot card game framework](https://github.com/db0/godot-card-game-framework?tab=readme-ov-file)
- [[beehave]] Behaviour Trees
- [[limboai]] Behaviour Trees and hsm
- [[gamedev]]

Материалы:

- [godot_recipes](https://kidscancode.org/godot_recipes/4.x/)
- [GDScript reference](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html)
- [Vector math](https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html)
- [Advanced vector math](https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html#doc-vectors-advanced)
- [Matrices and transforms](https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html#doc-matrices-and-transforms)
- [Creating movies](https://docs.godotengine.org/en/stable/tutorials/animation/creating_movies.html#converting-avi-video-to-mp4)
- [Using InputEvent](https://docs.godotengine.org/en/stable/tutorials/inputs/inputevent.html)

[gdscript]: gdscript "GDScript"
[c-plus-plus]: ../lists/c-plus-plus "Ресурсы по языку программирования С/С++"
[GDScript]: gdscript "GDScript"
[godot-templates]: godot-templates "godot templates"
[godot-ai-gim]: godot-ai-gim "Godot AI Gym"
[voxel]: voxel "Воксельные фреймворки и игры"
[godot_shaders]: godot_shaders "Godot shaders"
[gamedev]: ../lists/gamedev "Gamedev"
[beehave]: beehave "Beehave — дополнение Behavior Tree для Godot"
[limboai]: limboai "LimboAI — Behavior Trees и State Machines для Godot"