Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Створення додатків
Godot має розгалужену вбудовану систему інтерфейсу користувача, а його невеликий розмір дистрибутива може зробити його придатною альтернативою таким фреймворкам, як Electron або Qt.
На цій сторінці наведено рекомендації щодо створення неігрових програм за допомогою Godot, а також інструкції щодо виконання поширених завдань для покращення інтеграції з робочим столом.
Примітка
Godot — це, перш за все, ігровий рушій. Це означає, що створення додатків за допомогою Godot є побічним продуктом його набору функцій, а не основною метою розробки.
Дивись також
Загляньте в Material Maker і Pixelorama для прикладів застосунків із відкритим кодом, зроблених за допомогою Godot.
Виконання поширених завдань
Створення кількох вікон
Це підтримується лише у Windows, macOS та Linux (лише X11/XWayland, не у рідному режимі Wayland).).
Додаткові вікна можна створювати за допомогою вузла class_Window. Вікна можна переміщувати, змінювати їх розмір, мінімізувати та закривати незалежно від головного вікна програми.
Однак, якщо ви закриєте головне вікно, всі інші вікна також будуть закриті, оскільки закриття головного вікна завершує процес. Ви можете уникнути цього, згорнувши головне вікно, встановивши його властивість unfocusable на true (щоб приховати його від панелі завдань та перемикача завдань), а потім створивши додаткові вузли Window одразу під час запуску. Не забудьте надати альтернативний спосіб виходу з програми в цьому випадку, наприклад tray icon.
Обмеження розміру вікна
Більшість програм можуть коректно відображати зображення лише з певного мінімального розміру вікна. Для більш специфічних випадків використання також може знадобитися встановити максимальний розмір вікна.
Обмеження розміру можна встановити за допомогою властивостей min_size та max_size вузла Window. Не забудьте помножити ці обмеження розміру відповідно до коефіцієнта масштабування програми (докладніше див. Масштабування до дисплеїв hiDPI).
Порада
Нагадуємо, що ви можете отримати кореневий вузол Window, щоб встановити для нього властивості, використовуючи get_window() на будь-якому вузлі.
Використання рідних діалогових вікон файлів
Це підтримується лише у Windows, macOS, Linux та Android.
За замовчуванням Godot використовує власну реалізацію FileDialog для діалогових вікон файлів. Однак, ви можете використовувати нативні діалогові вікна файлів операційної системи. Зазвичай користувачі віддають перевагу цьому, оскільки нативні діалогові вікна файлів краще інтегруються з середовищем робочого столу та забезпечують більш звичний інтерфейс.
Ви можете ввімкнути нативні діалогові вікна файлів, увімкнувши властивість use_native_dialog для вузла FileDialog. Це необхідно зробити для кожного вузла FileDialog, що використовується в проекті, оскільки немає налаштувань проекту, які б контролювали цю поведінку глобально.
Порівняння стандартного FileDialog (ліворуч) та рідного діалогового вікна файлів (праворуч) на macOS
Примітка
Див. опис властивості для отримання детальної інформації про підтримку платформи.
Additionally, on macOS, native file dialogs are not supported when game embedding is enabled in the editor. To test this functionality when running the project, make sure you disable game embedding by switching to the screen, clicking the rightmost icon in the bar at the top and unchecking .
Створення значка в системному треї
Це підтримується лише у Windows та macOS.
Ви можете створити одну або декілька значків у системному треї (також відомому як область сповіщень) за допомогою вузла class_StatusIndicator. Окрім підказки, цьому вузлу може бути призначено вузол class_PopupMenu, щоб при натисканні на значок відображався випадаючий список.
StatusIndicator також має сигнал pressed, який випромінюється при натисканні на значок. Використовуйте його для виконання дії без відображення випадаючого списку або для виконання різних дій залежно від того, яка кнопка миші була натиснута.
Після створення іконки в треї ви також можете реалізувати поведінку "згортання при закритті". Це означає, що коли користувач намагається закрити програму за допомогою кнопки X віконного менеджера, вона згортатиметься в трей. Для цього приєднайте цей скрипт до сцени Autoload з кореневим вузлом StatusIndicator:
extends StatusIndicator
# Disable this behavior when running from the editor with game embedding,
# as it doesn't cooperate well.
var tray_icon_supported = (
DisplayServer.has_feature(DisplayServer.FEATURE_STATUS_INDICATOR)
and not Engine.is_embedded_in_editor()
)
func _ready():
visible = false
if tray_icon_supported:
get_tree().auto_accept_quit = false
get_window().focus_entered.connect(
func():
# Hide the tray icon when the window gains focus,
# which means it was restored from its minimized state.
visible = false
)
pressed.connect(
func(_mouse_button, _position):
# Restore the application when the tray icon is clicked.
get_window().mode = Window.MODE_WINDOWED
)
func _notification(what):
if not tray_icon_supported:
return
match what:
NOTIFICATION_WM_CLOSE_REQUEST:
get_window().mode = Window.MODE_MINIMIZED
# Show the tray icon.
visible = true
Див. Обробка запитів на вихід для отримання детальної інформації про зміну поведінки, коли користувач намагається закрити програму. Це важливо врахувати, коли у користувача є незбережені зміни, щоб уникнути втрати даних.
Примітка
Коли присутні кілька вузлів StatusIndicator, їхній порядок у системному треї визначається порядком, у якому вони додані до дерева сцен.
Використання декорацій на стороні клієнта
Це підтримується лише на macOS.
Багато сучасних програм використовують клієнтські декорації (CSD) замість того, щоб покладатися на менеджер вікон операційної системи для малювання рядка заголовка та меж вікна (серверні декорації). Це дозволяє створити більш настроюваний зовнішній вигляд та краще інтегруватися з інтерфейсом програми.
Наразі Godot підтримує лише клієнтське оформлення на macOS. Це можна зробити, увімкнувши параметр проекту display/window/size/extend_to_title.
Порівняння стандартних декорацій вікон (зверху) та декорацій на стороні клієнта (знизу) на macOS
Після ввімкнення декорування на стороні клієнта рамка вікна більше не відображатиметься, а кнопки згортання/розгортання/закриття відображатимуться як накладання в програмі. Вам потрібно переконатися, що програма забезпечує достатній відступ зверху для зручного відображення кнопок, а також відображає заголовок вікна за допомогою вузла Label або подібного.
Щоб умовно адаптувати ваш інтерфейс користувача відповідно до того, чи ввімкнено декорації на стороні клієнта, використовуйте DisplayServer.has_feature, а також перевірте поточне значення Window.extend_to_title (саме це змінюється в налаштуваннях проекту):
func _ready():
if DisplayServer.has_feature(FEATURE_EXTEND_TO_TITLE) and get_window().extend_to_title:
# Adjust UI for client-side decorations (a MarginContainer node
# can be useful here). Also set the window title to be displayed
# according to the native window title.
$WindowTitle.visible = true
$WindowTitle.text = get_window().title
if OS.is_debug_build():
$WindowTitle.text += " (DEBUG)"
Щоб правильно розташувати заголовок вікна, спробуйте використати DisplayServer.window_get_safe_title_margins(), який повертає Vector3, де x – ліве поле, y – праве поле (збільшиться, коли система використовуватиме набір тексту справа наліво), а z – висота. Крім того, ви можете викликати DisplayServer.window_set_window_buttons_offset(), щоб налаштувати положення кнопок закриття/згортання/розгортання (зазвичай для їх вертикального центрування).
Безпечні поля заголовка під час використання клієнтських декорацій у macOS
Примітка
On macOS, client-side decorations are not supported when game embedding is enabled in the editor. To test this functionality when running the project, make sure you disable game embedding by switching to the screen, clicking the rightmost icon in the bar at the top and unchecking .
Displaying progress status on the taskbar/Dock
Це підтримується лише у Windows та macOS.
It is possible for applications to report a progress status to the operating system, which can be displayed on the taskbar or Dock icon. This status is composed of a state (active, paused, error) and a completion percentage. This can be used to show progress while the user is not focused on the application.
Progress reporting in the Dock on macOS
This is often accomplished by synchronizing a class_ProgressBar node's progress with the progress reported to the operating system:
func set_progress(value, indeterminate = false):
$ProgressBar.value = value
$ProgressBar.indeterminate = indeterminate
if $ProgressBar.indeterminate:
get_window().set_taskbar_progress_state(DisplayServer.PROGRESS_STATE_INDETERMINATE)
else:
get_window().set_taskbar_progress_state(DisplayServer.PROGRESS_STATE_NORMAL)
# The taskbar progress value must be between `0.0` and `1.0`
# (values outside this range are clamped).
# However, ProgressBar can have minimum/maximum values that differ.
# We use the `remap()` method to convert the value to the range
# expected by taskbar progress reporting.
get_window().set_taskbar_progress_value(remap($ProgressBar.value, $ProgressBar.min_value, $ProgressBar.max_value, 0.0, 1.0))
Several progress states are available: no progress (hides the progress bar), indeterminate, normal, paused, error. Check the class reference for details.
You can also use Window.request_attention() to make the window flash in the taskbar (or bounce in the Dock on macOS). For example, this can be used to attract the user's attention after a long operation is completed.
Примітка
Reporting progress is not supported when game embedding is enabled in the editor. To test this functionality when running the project, make sure you disable game embedding by switching to the screen, clicking the rightmost icon in the bar at the top and unchecking .
Надсилання сповіщень на робочому столі
Godot наразі не має вбудованої підтримки для надсилання сповіщень на робочий стіл.
Однак, у macOS та Linux ви можете використовувати утиліти командного рядка osascript та notify-send відповідно для надсилання сповіщень на робочий стіл:
func send_notification(title, message):
var app_name = ProjectSettings.get_setting("application/config/name")
if app_name.is_empty():
app_name = "Unnamed Project"
if OS.has_feature("macos") and not OS.is_sandboxed():
# Note that this will not work if the project is exported in sandbox mode
# (e.g. for the Mac App Store).
OS.execute("osascript", [
"-e",
'display notification \\"%s\\" with title \\"%s\\" subtitle \\"%s\\"' % [
message,
app_name,
title,
]
])
elif OS.has_feature("linuxbsd"):
OS.execute("notify-send", ["--app-name", app_name, title, message])
func _ready():
send_notification("Success", "Operation completed successfully.")
На жаль, у Windows немає еквівалента, який би був готовий до використання.
Запам'ятовування положення та розміру вікна протягом сеансів
Godot не має вбудованої підтримки запам'ятовування положення та розміру вікна протягом сеансів, але це можна реалізувати вручну за допомогою скрипта. Базовим прикладом, який підтримує налаштування з кількома моніторами, буде Autoload з таким скриптом:
extends Node
# Use a dedicated configuration file for the window state.
# This way, the application's other configuration files are left
# untouched and can be put in version control without unnecessary diffs
# being produced.
const CONFIG_WINDOW_PATH = "user://window.ini"
var config_file = ConfigFile.new()
func _enter_tree():
config_file.load(CONFIG_WINDOW_PATH)
# Do not restore previous window state if running from the editor
# with game embedding enabled.
if not Engine.is_embedded_in_editor():
var window_screen = config_file.get_value("main", "screen", -1)
if window_screen is int:
get_window().current_screen = window_screen
var window_mode = config_file.get_value("main", "mode", -1)
if window_mode is Window.Mode:
get_window().mode = window_mode
var window_position = config_file.get_value("main", "position", -1)
if window_position is Vector2i:
get_window().position = window_position
var window_size = config_file.get_value("main", "size", -1)
if window_size is Vector2i:
get_window().size = window_size
func _exit_tree():
# Save the current window state when the application is quit normally.
# In a real world scenario, it's recommended to also save this information
# regularly (e.g. with a Timer node), so that the window state can be
# restored after a crash or when terminated externally.
config_file.set_value("main", "screen", get_window().current_screen)
config_file.set_value("main", "mode", get_window().mode)
config_file.set_value("main", "position", get_window().position)
config_file.set_value("main", "size", get_window().size)
config_file.save(CONFIG_WINDOW_PATH)
Примітка
У наведеному вище прикладі відстежується лише положення головного вікна. У програмах, які створюють кілька вікон, вам потрібно буде окремо зберігати та завантажувати положення та розмір кожного вікна.
Приховування вікна під час заставки
Для деяких програм може бути кращим приховати заставку, щоб натомість відобразити власну заставку з індикатором виконання (або навіть взагалі без заставки, якщо програма завантажується швидко).
У Godot бракує вбудованої підтримки для приховування вікна під час заставки, але ви можете досягти цього, використовуючи дуже маленьке прозоре вікно в налаштуваннях проекту, а потім змінюючи розмір вікна та вимикаючи прозорість після завантаження головної сцени.
Для цього параметри проекту слід налаштувати наступним чином:
application/boot_splash/bg_color встановити прозорий чорний колір (RGBA: 0, 0, 0, 0).
application/boot_splash/show_image вимкнено.
display/window/size/borderless увімкнено.
display/window/size/no_focus увімкнено.
display/window/size/window_width_override встановлено на
1.display/window/size/window_height_override встановлено на
1.display/window/per_pixel_transparency/allowed увімкнено.
display/window/size/transparent увімкнено.
rendering/viewport/transparent_background увімкнено.
Цей скрипт можна використовувати як Autoload для відновлення початкових налаштувань після завершення відображення заставного екрана:
extends Node
func _enter_tree():
# Wait a frame to be rendered before restoring the window properties.
# Otherwise, properties will be restored too early and the window border
# will show up around a transparent window.
await get_tree().process_frame
get_viewport().transparent_bg = false
get_window().transparent = false
get_window().borderless = false
get_window().size = Vector2i(1152, 648)
Відображення програми як оверлея
Вікно програми можна відображати як накладання, яке залишається поверх інших вікон. Це може бути корисним для таких програм, як віджети або системні монітори.
Для цього увімкніть всі наступні налаштування проекту:
display/window/size/borderless
display/window/per_pixel_transparency/allowed
display/window/size/transparent
rendering/viewport/transparent_background
display/window/size/always_on_top
display/window/size/no_focus
Це запобігає отриманню накладанням вводу з клавіатури, а також приховує його від панелі завдань і перемикача завдань. Накладання все ще може отримувати введення з миші (див. нижче).
Remember to position and resize the window using scripts, as a borderless window can generally not be moved by the user.
Щоб дозволити введення миші проходити до фонової програми, встановіть властивість mouse_passthrough у значення true для вікна, яке малюється як накладання. Ви також можете визначити полігон у mouse_passthrough_polygon, щоб певні області все ще могли перехоплювати введення миші на накладенні.
Крім того, ви можете встановити властивість exclude_from_capture у значення true, щоб запобігти появі накладання на скріншотах або записах. Ця підказка реалізована лише у Windows та macOS і діє на основі найкращих зусиль, тому її не слід використовувати як абсолютний захід безпеки або DRM.
Примітка
Displaying as an overlay is not supported when game embedding is enabled in the editor. To test this functionality when running the project, make sure you disable game embedding by switching to the screen, clicking the rightmost icon in the bar at the top and unchecking .
Крім того, пам’ятайте, що накладання не можна відображати поверх іншої програми, якщо відповідна програма використовує ексклюзивний повноекранний режим. Щоб накладання були видимими, потрібно використовувати повноекранний режим без рамок.
Також існують відомі проблеми з прозорим відображенням вікон у Windows з гібридними налаштуваннями графічного процесора (наприклад, NVIDIA Optimus). Перемикання рендерерів може допомогти вирішити цю проблему.
У Linux з X11 прозорість не працюватиме, якщо користувач вимкнув композитинг у налаштуваннях менеджера вікон.
Масштабування до дисплеїв hiDPI
Сучасні дисплеї дуже різняться за щільністю пікселів, а це означає, що часто потрібен різний коефіцієнт масштабування, щоб забезпечити читабельність елементів інтерфейсу користувача. Коефіцієнт масштабування також може бути налаштований користувачем вручну, щоб користування застосунком залишалося комфортним.
Підтримка кількох роздільних здатностей Godot добре підходить для масштабування програм за умови правильного налаштування. Дотримуйтесь інструкцій у non-game application section of the Multiple resolutions documentation.
Примітка
Наразі Godot підтримує зчитування коефіцієнта масштабування екрана лише з налаштувань ОС на macOS, Android та Linux (лише Wayland). У Linux (X11) та Windows вам потрібно буде надати користувачеві опцію ручного масштабування, щоб він міг налаштувати масштаб інтерфейсу за потреби.
Інтеграція зчитувача з екрана
Програми зчитування з екрана дозволяють людям з вадами зору використовувати програму, зчитуючи елементи інтерфейсу користувача та надаючи елементи керування навігацією. Дисплеї Брайля – це ще один підхід, який також залежить від інформації про доступність для належного функціонування.
Godot автоматично вмикає підтримку зчитувачів з екрана, якщо виявлено, що зчитувач з екрана запущено. Це можна налаштувати в налаштуваннях проекту за допомогою accessibility/general/accessibility_support, щоб вимкнути її в ситуаціях, коли вона небажана. Її також можна примусово ввімкнути, що корисно під час використання інструментів налагодження доступності, які Godot не розпізнає як зчитувачі з екрана.
Godot використовує бібліотеку AccessKit для інтеграції зчитувачів з екрана.
Порада
Оскільки підтримка програми зчитування з екрана використовує саму програму зчитування з екрана для відтворення аудіо (а не проєкт Godot), вона працюватиме, навіть якщо аудіодрайвер встановлено на Dummy у налаштуваннях проєкту, як описано нижче.
Наполегливо рекомендується протестувати вашу програму за допомогою популярних програм зчитування з екрана на цільових платформах, щоб забезпечити належний користувацький досвід для користувачів із вадами зору. Приклади включають NVDA у Windows, VoiceOver у macOS та Orca у Linux.
Щоб підтримка програм зчитування з екрана досягла належного рівня зручності використання, потрібна значна робота. Вам потрібно визначити мітки доступності за допомогою властивостей Control.accessibility_name та Control.accessibility_description, а також забезпечити логічне відображення інтерфейсу користувача під час читання програмою зчитування з екрана.
Дивись також
Див. також Перетворення тексту на мовлення щодо функції перетворення тексту в мовлення, окремої від програм зчитування з екрана.
Рекомендовані налаштування проєкту
Інтеграція з робочим столом
Щоб програма краще інтегрувалася з робочим середовищем, ви можете встановити ці параметри проекту наступним чином:
Увімкніть application/config/use_custom_user_dir та встановіть application/config/custom_user_dir_name на відповідну назву для вашої програми. Це гарантує, що налаштування користувача та файли зберігатимуться у спеціальній папці, а не в папці Godot за замовчуванням. За домовленістю, рекомендується використовувати звичайний регістр літер у Windows (наприклад,
Application Name) та кебабний регістр (наприклад,application-name) у macOS та Linux.Налаштуйте нативні значки, які відповідають рекомендаціям щодо дизайну операційної системи, використовуючи application/config/windows_native_icon (у форматі ICO) та application/config/macos_native_icon (у форматі ICNS). За замовчуванням Godot автоматично генеруватиме нативні значки на основі значка проекту, але це не завжди оптимально.
У Windows використання файлу ICO, створеного вручну, дозволяє використовувати різні значки для різних роздільних здатностей. Це можна використовувати для створення спеціального дизайну з нижчою роздільною здатністю для кращої читабельності.
У macOS є інструкції щодо значків програм, які суттєво відрізняються від інших платформ. Використання індивідуального дизайну значків забезпечує кращу адаптацію програми до робочого середовища.
Вимкнути display/window/subwindows/embed_subwindows, щоб додаткові вікна використовували тематику операційної системи та відображалися як вікна нативної операційної системи.
Швидкодія
Ось деякі налаштування проекту, які можна використовувати для зменшення використання процесора, графічного процесора та пам'яті:
Використовуйте засіб рендерингу сумісності, якщо вам не потрібні функції, ексклюзивні для Forward+ або Mobile. Засіб рендерингу сумісності має нижчі вимоги до обладнання та загалом запускається швидше, що робить його кращим варіантом для програм. Створення нових вікон також відбувається швидше за допомогою цього засобу рендерингу.
Увімкніть application/run/low_processor_mode, щоб зменшити використання процесора та графічного процесора. Це призведе до того, що проєкт відтворюватиме кадр, лише якщо щось на екрані змінилося.
Зверніть увагу, що в певних випадках проект має перемальовуватися безперервно (наприклад, якщо видно анімацію або шейдер, що використовує
TIME). Це призведе до значного споживання енергії, якщо це робити протягом тривалого часу, що призводить до скорочення часу роботи від батареї та збільшення шуму вентилятора. Щоб усунути проблеми з перемальовуванням проекту безперервно, ви можете ввімкнути у верхній частині редактора, а потім запустити проект. Перемальовані області будуть виділені червоним кольором на секунду. Колір та тривалість підсвічування можна налаштувати за допомогою налаштувань проекту debug/canvas_items/debug_redraw_time та debug/canvas_items/debug_redraw_color.Максимальна частота кадрів, з якою програма може відображати зображення, визначається параметром application/run/low_processor_mode_sleep_usec. Це значення виражається в мікросекундах на кадр, тому максимальний FPS можна отримати за формулою
1000000.0 / sleep_usec. За замовчуванням це значення встановлено на6900, що відповідає максимуму приблизно 145 FPS. Ви можете збільшити це значення, щоб ще більше зменшити використання процесора та графічного процесора, але за рахунок менш плавної роботи.
Вимкніть display/window/energy_saving/keep_screen_on, щоб екран міг вимикатися відповідно до налаштувань живлення операційної системи, коли програма не працює. Така поведінка зазвичай небажана в грі (наприклад, під час перегляду кат-сцен), але в програмах ми хочемо, щоб екран вимикався для економії енергії, коли користувач активно не використовує програму.
Встановіть для audio/driver/driver значення
Dummy(враховуючи регістр), якщо вашій програмі не потрібен аудіовивід або вхід. Це запобігає запуску аудіосервера, що заощаджує деякі ресурси процесора та пам'яті. Це також запобігає відображенню програми у списку програм, які відтворюють аудіо в аудіомікшері операційної системи. У macOS це також гарантує, що програма не перешкоджатиме переходу пристрою в режим сну.Встановіть для physics/2d/physics_engine та physics/3d/physics_engine значення
Dummy, якщо ваш застосунок не потребує фізичного моделювання (включаючи вибір об'єктів). Це запобігає запуску серверів фізики, що економить ресурси процесора та пам'яті. Це також дозволяє редактору конфігурації компіляції engine автоматично виявляти той факт, що проект не використовує фізику.Розгляньте можливість встановлення для display/window/vsync/vsync_mode значення Вимкнено, щоб зменшити затримку введення. Це особливо корисно в проектах, чутливих до затримки, таких як програми для малювання. Це може збільшити споживання енергії та спричинити розриви екрана, тому рекомендується надати користувачеві опцію перемикання вертикальної синхронізації за потреби.
Загляньте в Material Maker і Pixelorama для прикладів застосунків із відкритим кодом, зроблених за допомогою Godot.
Мобільний
Під час розробки застосунку для мобільних платформ є кілька налаштувань, які можна ввімкнути для покращення зручності використання:
Android:
Увімкніть input_devices/pointing/android/enable_long_press_as_right_click, щоб дозволити користувачам виконувати дії клацання правою кнопкою миші за допомогою жесту тривалого натискання.
Увімкніть input_devices/pointing/android/enable_pan_and_scale_gestures, щоб дозволити користувачам панорамувати та масштабувати за допомогою сенсорних жестів. Це емулюватиме події InputEventPanGesture та InputEventMagnifyGesture, які можна обробляти в коді вашого проєкту та зазвичай генеруються трекпадами ноутбуків.
Вимкніть у пресеті експорту Android, щоб відображати панель стану системи та навігації, коли програма активна. Крім того, увімкніть , щоб зробити панелі стану та значки навігації напівпрозорими та малювати їх поверх програми. Якщо ви це зробите, переконайтеся, що ваша програма залишає достатньо місця для панелі стану та значків навігації. Ви можете використовувати DisplayServer.get_display_safe_area та DisplayServer.get_display_cutouts, щоб запитувати область, в якій ваша програма може безпечно малювати.
iOS:
Вимкніть display/window/ios/hide_home_indicator, щоб відображати індикатор домашньої сторінки поверх програми.
Вимкніть display/window/ios/hide_status_bar, щоб рядок стану залишався видимим, коли програма активна.
Вимкніть display/window/ios/suppress_ui_gesture, щоб жести інтерфейсу користувача працювали негайно, без необхідності їх повторного виконання.
Додавання модульних тестів
У застосунку часто є більш цінним використання налаштування модульного тестування порівняно з грою. Це можна використовувати для автоматичного виявлення регресій, що, як правило, легше зробити в сценарії застосунку, де логіку можна чітко розділити.
GDScript не має інтегрованого фреймворку для модульного тестування, але існує кілька плагінів для модульного тестування, що підтримуються спільнотою:
З C# та GDExtension (C++, Rust тощо) ви можете використовувати стандартні фреймворки для тестування, такі як NUnit або doctest.
Оптимізація розміру дистрибутива
Оскільки неігрові програми зазвичай уникають використання великих частин движка, таких як аудіо чи 3D-функціональність, ви можете скомпілювати оптимізований шаблон експорту, щоб зменшити розмір файлу. Це також покращить час запуску, особливо на веб-платформі, де розмір двійкового файлу безпосередньо пов'язаний зі швидкістю ініціалізації.
Зменшення розміру часто є значним (порівняно з розміром проєкту), оскільки програми містять менше великих ресурсів порівняно з іграми. Див. Оптимізація збірки за розміром для отримання додаткової інформації про те, як це зробити.
Creating a single-executable distribution
By default, Godot creates a PCK file containing the project data next to the executable. This means that if the executable is moved without moving the PCK file at the same time, the application will not run. This is not ideal for applications, which are increasingly being distributed as a single executable file.
To make the application entirely self-contained to a single executable, you can enable Embed PCK in the export preset options. This will embed the PCK data within the executable, so that the application can be moved around without breaking. This also makes it possible to run the application directly from a ZIP archive without having to extract it first.
Примітка
PCK embedding has a size limitation depending on the platform. Very large applications (several GBs) may not be able to use this feature on all platforms. Check the export documentation for the target platform for more details.
Creating portable applications
An application is called portable when it can be run without installation, and when its configuration is entirely self-contained to the folder it was extracted to. This allows placing the application files on an USB drive or similar, and running it on different machines without having to go through an installation process.
The Godot editor's own self-contained mode currently can't be used within projects. However, you can still choose to save your own configuration files to the folder containing the executable as follows:
var config_path = OS.get_executable_path().get_base_dir().path_join("config.ini")
# Then use `config_path` to save/load configuration files using ConfigFile or similar.
You may want to make portable mode optional as it's not always desired.
Typically, this is performed by detecting the presence of a specific file in the
executable's folder (e.g. a file named portable.txt), and only using the
executable's folder for configuration if that file is present.
Попередження
Remember that this will only work if the application is extracted to a
writable location. This will result in permission errors if the executable
is run from a read-only location, such as C:\Program Files on Windows.
Створення інсталяторів
Хоча ігри зазвичай встановлюються через лаунчери, такі як Steam, або завантажуються у вигляді ZIP-архіву, програми часто розповсюджуються як інсталятори для кращої інтеграції з робочим столом. Інсталятор може виконувати такі дії, як додавання ярликів до меню «Пуск» або на робочий стіл, налаштування асоціацій файлів тощо. Інсталятори також можуть запускатися автоматично через командний рядок, що робить їх більш бажаними для корпоративних середовищ.
Godot не має вбудованої підтримки для створення інсталяторів для експортованих проектів. Однак, все ще можна створювати власні інсталятори за допомогою сторонніх інструментів.
Ось неповний список інструментів, які можна використовувати для створення інсталяторів:
Windows: Inno Setup, NSIS
Якщо у вас є сертифікат підпису коду, не забудьте підписати як інсталятор, так і виконуваний файл проекту. Для цього підпишіть експортований виконуваний файл проекту, створіть інсталятор, що містить експортований проект, а потім вручну підпишіть щойно створений інсталятор.
macOS: create-dmg
Linux: Flatpak
Існує Godot BaseApp, який можна використовувати як основу для створення пакетів Flatpak для проектів Godot. Дивіться Pixelorama Flatpak для прикладу Flatpak, який використовує цей BaseApp.
Ресурси
Ці сторінки охоплюють завдання, які зазвичай виконуються в неігрових програмах:
ConfigFile (використовується для збереження налаштувань користувача)