Часто задаваемые вопросы

На что способен Godot? Сколько он стоит? Каковы условия лицензирования?

Godot — это свободное программное обеспечение с открытым исходным кодом, доступное по одобренной OSI лицензии MIT. Это означает, что оно свободно как в смысле «свободы слова», так и в смысле «бесплатного пива.»

Вкратце:

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

  • Вы можете свободно изменять, распространять и пересобирать Godot по любой причине, как не коммерчески, так и коммерчески.

Все содержимое этой сопроводительной документации опубликовано под лицензией Creative Commons Attribution 3.0 (CC-BY 3.0) с указанием авторства "Хуана Линецкий, Ариэла Манзура и сообщества Godot Engine."

Логотипы и иконки также находятся под лицензией Creative Commons. Заметьте, что сторонние библиотеки, включённые в исходный код Godot, могут иметь другие лицензии.

Для полной информации, смотрите COPYRIGHT.txt ,а также LICENSE.txt и LOGO_LICENSE.txt в репозитории Godot.

Также смотрите страницу лицензии официального сайта Godot.

Какие платформы поддерживаются Godot?

Для редактора:

  • Windows

  • macOS

  • Linux, *BSD

  • Android (в экспериментальном режиме)

  • Web (в экспериментальном режиме)

Для экспорта ваших игр:

  • Windows

  • macOS

  • Linux, *BSD

  • Android

  • iOS

  • Web

Поддерживается создание 32-х и 64-х битных исполняемых файлов (для платформ, где это возможно); по умолчанию создаются 64-х битные файлы. Официальные сборки macOS поддерживают Apple Silicon так же, как и x86_64.

Некоторые пользователи также сообщают о сборке и использовании Godot для систем на базе ARM с Linux, таких, как Raspberry Pi.

Команда Godot не может обеспечить реализацию экспорта с открытым исходным кодом на консоли из-за условий лицензирования, установленных производителями консолей. Независимо от используемого движка, выпуск игр на консоли — это всегда большой объём работы. Вы можете узнать больше здесь: Поддержка консолей в Godot.

Более подробная информация есть в разделах экспорт и как собрать Godot.

Примечание

Godot 3 также имел поддержку Uniwersal Windows Platform (UWP). Эта платформа была удалена в Godot 4 из-за слабой поддержки, а также того факта, что Microsoft перевёл UWP в категорию устаревшего ПО. Тем не менее в Godot 3 версии current stable, она всё ещё доступна для интересующихся пользователей.

Какие языки программирования поддерживаются в Godot?

Официально поддерживаемые языки для Godot это GDScript, C# и C++. Смотрите подкатегории для каждого языка в секции написание скриптов.

Если вы только начинаете разбираться с Godot или с разработкой игр в целом, то рекомендуем изучить язык GDScript, поскольку он является родным языком для Godot. Как правило, в долгосрочной перспективе скриптовые языки программирования менее эффективны, чем языки низкого уровня, но для прототипирования, создания минимально жизнеспособных продуктов (minimum viable product, MVP) и уменьшения времени выхода на рынок (Time-To-Market, TTM) GDScript предоставляет достаточно быстрый, дружественный и действенный путь разработки.

Обратите внимание, что поддержка C# это довольно новая функция и по пути вы можете столкнуться с некоторыми проблемами. Поддержка C# также в настоящее время отсутствует на веб-платформе. Наше дружелюбное и трудолюбивое сообщество всегда готово решать новые проблемы по мере их возникновения, но поскольку это проект с открытым исходным кодом, то мы рекомендуем сначала поискать решение проблемы самостоятельно. Поиск в обсуждениях на open issues (Открытые вопросы) - это отличный способ приступить к решению возникших проблем.

Что касается новых языков, поддержка возможна с использованием возможностей сторонних решений через GDExtension. (См. вопрос о плагинах ниже.) В настоящее время работа ведётся полным ходом, например, есть неофициальные привязки Godot к Python и Nim.

Что такое GDScript и зачем мне его использовать?

GDScript — это встроенный скриптовый язык программирования Godot. Он был создан с нуля для того, чтобы максимизировать потенциал Godot, сократив количество кода, тем самым предоставляя как начинающим, так и опытным разработчикам возможность максимально быстро извлечь выгоду из всех преимуществ Godot. Если вы когда-нибудь писали что-то на языке, подобном Python, то в GDScript вы почувствуете себя как дома. Для того чтобы посмотреть примеры и ознакомиться с полным набором возможностей, которые предлагает GDScript, советуем ознакомиться с Руководством по созданию скриптов GDScript.

Существует несколько причин использовать GDScript, но самая главная из них — это общее снижение сложности.

Изначальное намерение создать тесно интегрированный, собственный скриптовый язык для Godot преследовало две цели: во-первых, он сокращает время, необходимое для начала работы с Godot, предоставляя разработчикам быстрый способ ознакомления с движком с упором на производительность; во-вторых - снижает общую сложность обслуживания, уменьшает объем проблем и позволяет разработчикам движка сосредоточиться на устранении ошибок и улучшении функций, связанных с ядром движка, вместо того, чтобы тратить много времени на попытки заставить небольшой набор дополнительных функций работать на большом количестве языков.

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

Более подробная информация, о том, как комфортабельно использовать GDScript или динамически типизированные языки может быть найдена в руководстве GDScript: Введение в динамически типизированные языки.

Каковы были мотивы создания GDScript?

В ранние годы движок использовал скриптовый язык Lua. Lua может быть быстрым благодаря LuaJIT, но создание привязки к объектно-ориентированной системе (с помощью fallbacks) было сложным и медленным и требовало огромного количества кода. После некоторых экспериментов с Python, мы поняли, что он также является сложным для встраивания.

Основными причинами создания своего собственного скриптового языка для Godot были:

  1. Слабая поддержка потоков, которые использует Godot, в виртуальных машинах скриптовых языков (Lua, Python, Squirrel, JS, AS, и пр.).

  2. В большинстве виртуальных машин нет хорошей поддержки расширения классов, и процесс адаптации в Godot крайне неэффективен (Lua, Python, JS).

  3. Многие существующие языки имеют ужасные интерфейсы для привязки к C++, что приводит к большому количеству кода, ошибкам, "бутылочным горлышкам" и общей неэффективности (Lua, Python, Squirrel, JS и т.д.). Мы хотели сосредоточиться на качественном движке, а не на большом количестве интеграций.

  4. Отсутствие родных векторных типов (Vector3, Transform3D и др.) приводило к серьёзному уменьшению производительности, когда использовались собственные типы (Lua, Python, Squirrel, JavaScript, ActionScript и т.д.).

  5. Сборщик мусора приводит к остановке или излишне большому использованию памяти (Lua, Python, JS, AS и т.д.).

  6. Сложная интеграция с редактором кода для обеспечения автодополнения, редактирования в реальном времени и т.д. (это относиться ко всем языкам).

GDScript был разработан, чтобы решить проблемы, описанные выше, и не только.

Какой язык программирования самый быстрый?

Во многих играх язык сценариев сам по себе не является причиной проблем с производительностью. Вместо этого производительность замедляется из-за неэффективных алгоритмов (которые работают медленно на любом языке), нагрузки на GPU или общего кода движка на C++, такого как физика или навигация. Все языки, поддерживаемые Godot, достаточно быстры для общего сценарного программирования. Выбирать язык следует, исходя из других факторов, таких как удобство использования, знакомство, поддержка платформ или возможности языка.

В целом, производительность C# и GDScript схожа, а C++ быстрее их обоих.

Сравнивать производительность GDScript и C# непросто, поскольку C# может быть быстрее в некоторых конкретных случаях. Сам по себе язык C# обычно быстрее, чем GDScript, что делает его более эффективным в ситуациях с редкими вызовами кода движка Godot. Однако при частых вызовах API Godot C# может работать медленнее из-за затрат на маршалинг. Также на производительность C# влияет сборка мусора, которая выполняется в случайные и непредсказуемые моменты. Это может приводить к подёргиваниям в сложных проектах и не является проблемой, характерной только для Godot.

C++, используя GDExtension, почти всегда будет работать быстрее, чем C# или GDScript. Однако C++ менее удобен в использовании по сравнению с C# и GDScript, а процесс разработки на нём занимает больше времени.

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

Какие форматы 3D моделей поддерживает Godot?

Более детальную информацию о поддерживаемых форматах, как их экспортировать из вашего 3D-редактора, а также импортировать в Godot можете найти здесь: Импорт 3D сцен.

Будут ли [закрытые SDK такие, как FMOD, GameWorks, и т.д.] поддерживаться в Godot?

Цель Godot - создать свободный и открытый, модульный и расширяемый движок с лицензией MIT. Сообщество разработчиков движка не планирует поддерживать сторонние, закрытые/проприетарные SDK, так как интеграция с ними противоречит этике Godot.

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

Чтобы узнать, как еще можно обеспечить поддержку вашего SDK, прочтите в вопросах о плагинах выше.

Если вы знаете о стороннем SDK, который не поддерживается Godot, но предлагает бесплатную интеграцию с открытым исходным кодом, подумайте о том, чтобы начать работу по интеграции самостоятельно. Godot не принадлежит одному человеку; он принадлежит сообществу, и он растёт вместе с такими амбициозными участниками сообщества, как вы.

Как я могу расширить Godot?

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

Кроме того, см. официальный пост в блоге про GDExtension, о том как разрабатывать нативные расширения для Godot:

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

Как мне установить редактор Godot на свою систему (для установки на рабочий стол)?

Поскольку для запуска Godot не нужно устанавливать его в систему, это означает, что интеграция с рабочим столом не происходит автоматически. Есть два способа решить эту проблему. Вы можете установить Godot из Steam (все платформы), Scoop (Windows), Homebrew (macOS) или Flathub (Linux). Это автоматически выполнит необходимые шаги для интеграции с рабочим столом.

Либо же вы можете вручную выполнить шаги, которые программа установки сделала бы за вас:

Windows

  • Переместите исполняемый файл Godot в стабильное место (т.е. за пределы папки "Загрузки"), чтобы в будущем Вы случайно не переместили его или не повредили ярлык.

  • Щелкните правой кнопкой мыши на исполняемый файл Godot и выберите Создать ярлык.

  • Переместите созданный ярлык в %APPDATA%\Microsoft\Windows\Start Menu\Programs. Это общепользовательское расположение для ярлыков, которые будут отображаться в меню "Пуск". Вы также можете прикрепить Godot на панель задач, нажав на правую кнопку мыши по исполняемому файлу и выбрав Прикрепить на Панель Задач.

macOS

Переместите извлечённое приложение Godot в /Applications/Godot.app, затем, если Вы хотите, можете переместить его на панель задач. Spotlight сможет найти Godot, пока он будет находиться в /Applications or ~/Applications.

Linux

  • Переместите бинарный файл Godot в стабильное место (т.е. за пределы папки "Загрузки"), чтобы в будущем Вы случайно не переместили его и не повредили ярлык.

  • Переименуйте и переместите бинарный файл Godot в место вашей переменной среды PATH. Обычно это /usr/local/bin/godot или /usr/bin/godot. Для этого требуются права администратора, но это также позволит вам запустить редактор Godot из терминала, введя``godot``.

    • Если вы не можете переместить редактор Godot в защищённое место, вы можете оставить бинарный файл где-нибудь в домашнем каталоге, и отредактировать строку Path= в файле .desktop, приведённой ниже, чтобы включить его в полную абсолютную переменную path в бинарном файле Godot.

  • Сохраните этот .desktop файл в $HOME/.local/share/applications/. Если у вас есть права администратора, то вы также можете сохранить .desktop файл в /usr/local/share/applications, чтобы предоставить доступ к ярлыку всем пользователям.

Является ли Godot портативным?

При своих настройках по умолчанию Godot является полу-портативным. Его исполняемый файл может быть запущен из любого места (включая места, недоступные для записи) и никогда не требует права администратора.

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

Если требуется настоящая переносимость (например, для использования на USB-накопителе), выполните действия, описанные в Автономный режим.

Почему Godot использует Vulkan или OpenGL вместо Direct3D?

Прежде всего, Godot стремится к кроссплатформенности и открытым стандартам. OpenGL и Vulkan - технологии, открытые и доступные на (почти) всех платформах. Благодаря этому, проект, созданный с Godot на Windows, будет готов к работе на Linux, macOS и др.

В то время как Vulkan и OpenGL остаются нашим основным фокусом из-за их открытых стандартных и кроссплатформенных преимуществ, Godot 4.3 представил экспериментальную поддержку Direct3D 12. Это дополнение направлено на повышение производительности и совместимости на платформах, где Direct3D 12 распространен, таких как Windows и Xbox. Однако Vulkan и OpenGL продолжат оставаться драйверами рендеринга по умолчанию на всех платформах, включая Windows.

Почему Godot стремится сохранить свой набор основных функций маленьким?

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

На это есть несколько причин:

  • Сопровождение кода и поиск ошибок. Каждый раз, когда мы принимаем новый код в репозиторий Godot, существующие соавторы часто берут на себя ответственность за его поддержку. Некоторые соавторы не всегда остаются с нами после слияния их кода, что может затруднить нам поддержку данного кода. Это может привести к появлению плохо поддерживаемых функций с ошибками, которые никогда не будут исправлены. Кроме того API которые необходимо тестировать и проверять на наличие регрессий, со временем увеличиваются.

  • Легкость вклада. Сохраняя небольшую и аккуратную кодовую базу, ее можно быстро и легко компилировать из исходного кода. Это облегчает новым участникам начало работы с Godot, не требуя от них покупки высокопроизводительного оборудования.

  • Сохранение небольшого размера двоичного файла для редактора. Не у всех есть быстрое подключение к Интернету. Обеспечение того, чтобы каждый мог загрузить редактор Godot, извлечь его и запустить менее чем за 5 минут, делает Godot более доступным для разработчиков во всех странах.

  • Обеспечение небольшого размера двоичных файлов для шаблонов экспорта. Это напрямую влияет на размер проектов, экспортируемых с помощью Godot. На мобильных и веб-платформах сохранение небольшого размера файлов важно для обеспечения быстрой установки и загрузки на маломощных устройствах. Опять же, во многих странах высокоскоростной Интернет не всегда доступен. Кроме того, в таких странах часто действуют строгие ограничения на использование данных.

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

Как создавать ассеты под множество разрешений и соотношений сторон дисплея?

Этот вопрос возникает часто, и это, вероятно, благодаря недопониманию, созданному Apple, когда они изначально удвоили разрешение своих устройств. Это заставляло людей думать, что иметь одинаковые ассеты в разных разрешениях было хорошей идеей, поэтому многие продолжали идти по этому пути. Это работало до определенного момента и только для устройств Apple, но затем было создано несколько устройств Android и Apple с различными разрешениями и соотношениями сторон с очень широким диапазоном размеров и DPI.

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

  1. Выберите одно базовое разрешение для своей игры. Даже если есть устройства, которые имеют разрешение выше 1440p и устройства, которые имеют разрешение ниже 400p, обычное аппаратное масштабирование на вашем устройстве позаботится об этом практически без затрат. Наиболее распространенные варианты - либо около 1080p (1920x1080), либо 720p (1280x720). Имейте в виду, что чем выше разрешение, тем больше ваши ассеты, будут занимать памяти и тем больше времени им потребуется для загрузки.

  2. Используйте параметры растяжения в Godot; растяжение холста при сохранении пропорций работает лучше всего. Посмотрите учебник: Multiple resolutions о том, как этого добиться.

  3. Определите минимальное разрешение, а затем примите решение, хотите ли вы, чтобы ваша игра растягивалась вертикально или горизонтально для разных соотношений сторон или была в одном минимальном разрешении и отображала черные прямоугольники по краям. Это также объясняется в Multiple resolutions.

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

И всё! Ваша игра будет работать в нескольких разрешениях.

Когда выйдет следующий релиз Godot?

Когда он будет готов! Смотрите Когда выйдет следующий релиз? для дополнительного ознакомления.

Какую версию Godot я должен использовать для нового проекта?

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

Следует ли мне обновить свой проект до новых версий Godot?

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

Какой отрисовщик лучше использовать, Forward+, Mobile или Compatibility?

Вы можете найти подробное сравнение отрисовщиков в Renderers.

Я хочу внести свой вклад! С чего мне начать?

Потрясающе! Как проект с открытым исходным кодом, Godot процветает благодаря инновациям и амбициям таких разработчиков, как вы.

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

Если вы готовы представить свой первый запрос на включение (PR), выберите любую проблему, которая вас заинтересовала, из одной из приведенных выше ссылок и попробуйте решить ее. Вам потребуется научиться компилировать движок из исходных кодов или создавать документацию. Также вам нужно ознакомиться с Git, системой управления версиями, которую используют разработчики Godot.

Мы объясняем, как работать с исходным кодом движка, как редактировать документацию и какие ещё есть способы внести свой вклад, в нашей документации для участников.

У меня есть отличная идея для Godot. Как я могу поделиться ей?

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

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

Если у вас есть четкая идея для улучшения движка, не стесняйтесь создать запрос на предложение. Постарайтесь быть конкретными и четкими, описывая свою проблему и предлагаемое решение — рассматриваются только конкретные предложения. Это не является обязательным, но если у вас есть желание реализовать это самостоятельно, это всегда приветствуется!

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

Пожалуйста, прочтите документ readme перед созданием предложения, чтобы узнать больше о процессе.

Можно ли использовать Godot для создания не игровых приложений?

Да! Godot обладает обширной встроенной системой пользовательского интерфейса, а небольшой размер дистрибутива может сделать его подходящей альтернативой таким фреймворкам, как Electron или Qt.

При создании неигрового приложения не забудьте включить low-processor mode в настройках проекта, чтобы уменьшить использование процессора и видеокарты.

Загляните в Material Maker и Pixelorama для примеров приложений с открытым исходным кодом, созданных с помощью Godot.

Можно ли использовать Godot как библиотеку?

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

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

Какой инструментарий пользовательского интерфейса использует Godot?

Godot не использует стандартный набор инструментов ГИП, наподобие GTK, Qt или wxWidgets. Вместо этого Godot использует собственный набор инструментов пользовательского интерфейса, отрисовывающий с помощью OpenGL ES или Vulkan. Этот инструментарий представлен в виде узлов Control, которые используются для визуализации редактора (написанного на C++). Эти узлы управления также можно использовать в проектах на любом языке сценариев, поддерживаемом Godot.

Этот собственный набор инструментов позволяет использовать преимущества аппаратного ускорения и иметь единообразный внешний вид на всех платформах. Вдобавок ко всему, ему не нужно иметь дело с оговорками лицензирования LGPL, которые идут с GTK или Qt.

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

Почему Godot использует систему сборки SCons?

Godot использует систему сборки SCons. Переход на другую систему сборки в ближайшее время не планируется. Есть много причин, по которым мы выбрали SCons вместо других альтернатив. Например:

  • Godot может быть скомпилирован для множества различных платформ: все ПК платформы, все мобильные платформы, множество консолей, и WebAssembly.

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

  • SCons совершенно никогда не сломает сборку независимо от количества изменений, конфигураций, дополнений, удалений и тд.

  • Процесс сборки Godot не прост. Множество файлов созданы в коде(связующие(binders)), другие прошли через парсинг (шейдеры), а другие нуждаются в тонкой настройке (плагины). Всё это требует сложной логики которая может бы легко написана на подходящем языке программирования (например Python) и это лучше, чем использовать язык с макросами нужным только для сборки.

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

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

Почему Godot не использует STL (стандартную библиотеку шаблонов)?

Как и многие другие библиотеки (например, Qt), Godot не использует STL (за некоторыми исключениями, такими как потоковые примитивы). Мы считаем, что STL - это отличная библиотека общего назначения, но у нас есть особые требования к Godot.

  • Шаблоны STL создают очень большие символы, что приводит к огромным отладочным двоичным файлам. Вместо этого мы используем несколько шаблонов с очень короткими именами.

  • Большинство наших контейнеров удовлетворяют особые потребности, например Vector, который использует копирование при записи, которое мы используем для передачи данных, или система RID, которая требует O(1) времени доступа. Аналогично, наши реализации хеш-карт предназначены для бесшовной интеграции с внутренними типами движков.

  • В наши контейнеры встроена функция отслеживания использования памяти, которая помогает лучше отслеживать использование памяти.

  • Для больших массивов мы используем память в виде пулов, отображаемых либо на предварительно выделенный буфер, либо на виртуальную память.

  • Мы используем наш собственный тип String, так как предоставляемый STL является слишком простым и не имеет надлежащей поддержки интернационализации.

Почему Godot не использует исключения?

Мы считаем, что игры не должны крашиться, несмотря ни на что. Если случится неожиданная ситуация, Godot выдаст ошибку (которую можно отследить вплоть до скрипта), но затем попытается исправить ее как можно более изящно и продолжить работу.

Кроме того, исключения значительно увеличивают размер двоичного исполняемого файла и приводят к увеличению времени компиляции.

Использует ли Godot ECS (Entity Component System)?

Godot не использует ECS и полагается на наследование. Хотя универсального лучшего подхода не существует, мы обнаружили, что использование наследования обеспечивает лучшее удобство использования и при этом достаточно быстрое для большинства случаев применения.

Тем не менее ничто не мешает вам использовать композицию в вашем проекте, создавая дочерние узлы с индивидуальными скриптами. Затем эти узлы можно добавлять и удалять во время выполнения, чтобы динамически добавлять и удалять поведения.

Более подробную информацию о выборах в архитектуре Godot можно найти в этой статье.

Почему Godot не принуждает пользователей к внедрению DOD (дизайн, ориентированный на данные(Data-Oriented Design))?

В то время как Godot пытается как можно лучше использовать согласованность кэша, мы считаем, что пользователей не нужно заставлять использовать практики DOD.

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

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

Если игра должна обрабатывать большое количество объектов, то мы рекомендуем использовать C++ и GDExtension для высокозатратных задач и GDScript (или C#) для остальной части игры.

Как я могу поддержать разработку Godot или внести свой вклад?

Смотрите How to contribute.

Кто работает над Godot? Как я могу связаться с вами?

Смотрите соответствующую страницу на официальном сайте Godot.