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).).
Додаткові вікна можна створювати за допомогою вузла 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
Примітка
Див. опис властивості для отримання детальної інформації про підтримку платформи.
Крім того, у macOS вбудовані діалогові вікна файлів не підтримуються, якщо в редакторі увімкнено вбудовування гри. Щоб перевірити цю функцію під час запуску проєкту, перейдіть на екран , натисніть на крайню праву піктограму у верхній панелі та зніміть галочку з пункту .
Створення значка в системному треї
Це підтримується лише у Windows та macOS.
Ви можете створити одну або декілька значків у системному треї (також відомому як область сповіщень) за допомогою вузла StatusIndicator. Окрім підказки, цьому вузлу може бути призначено вузол 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
Примітка
У macOS клієнтські декорації не підтримуються, якщо в редакторі увімкнено вбудовування гри. Щоб перевірити цю функцію під час запуску проєкту, перейдіть на екран , натисніть на крайню праву піктограму у верхній панелі та зніміть галочку з пункту .
Відображення стану виконання на панелі завдань/в Dock
Це підтримується лише у Windows та macOS.
Програми можуть повідомляти операційній системі про стан виконання, який відображається на панелі завдань або на піктограмі в Dock. Цей стан складається з типу стану (активний, призупинено, помилка) та відсотка виконання. Це дозволяє показувати хід виконання, навіть коли користувач не працює з програмою.
Відображення прогресу в панелі Dock у macOS
Зазвичай це досягається шляхом синхронізації прогресу вузла ProgressBar із прогресом, що передається операційній системі:
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).
# ProgressBar provides a `ratio` property that represents its current progress
# as a value between `0.0` and `1.0`.
get_window().set_taskbar_progress_value($ProgressBar.ratio)
Доступні такі стани прогресу: відсутність прогресу (приховує індикатор прогресу), невизначений, нормальний, призупинено, помилка. Детальнішу інформацію дивіться в довідці по класу.
Ви також можете скористатися функцією Window.request_attention(), щоб вікно почало блимати на панелі завдань (або підстрибувати в Dock у macOS). Наприклад, це можна використовувати для привернення уваги користувача після завершення тривалої операції.
Примітка
Функція звітування про прогрес не працює, якщо в редакторі увімкнено вбудовування гри. Щоб перевірити цю функцію під час запуску проєкту, перейдіть на екран , натисніть на крайню праву піктограму у верхній панелі та зніміть галочку з пункту .
Надсилання сповіщень на робочому столі
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/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)
Відображення програми як оверлея
Вікно програми можна відображати як накладання, яке залишається поверх інших вікон. Це може бути корисним для таких програм, як віджети або системні монітори.
Для цього увімкніть всі наступні налаштування проекту:
-
Це запобігає отриманню накладанням вводу з клавіатури, а також приховує його від панелі завдань і перемикача завдань. Накладання все ще може отримувати введення з миші (див. нижче).
Не забувайте змінювати розташування та розмір вікна за допомогою скриптів, оскільки вікно без рамок, як правило, не можна перемістити вручну.
Щоб дозволити введення миші проходити до фонової програми, встановіть властивість mouse_passthrough у значення true для вікна, яке малюється як накладання. Ви також можете визначити полігон у mouse_passthrough_polygon, щоб певні області все ще могли перехоплювати введення миші на накладенні.
Крім того, ви можете встановити властивість exclude_from_capture у значення true, щоб запобігти появі накладання на скріншотах або записах. Ця підказка реалізована лише у Windows та macOS і діє на основі найкращих зусиль, тому її не слід використовувати як абсолютний захід безпеки або DRM.
Примітка
Відображення у вигляді накладення не підтримується, якщо в редакторі увімкнено вбудовування гри. Щоб перевірити цю функцію під час запуску проєкту, перейдіть на екран , натисніть на крайню праву піктограму у верхній панелі та зніміть галочку з пункту .
Крім того, пам’ятайте, що накладання не можна відображати поверх іншої програми, якщо відповідна програма використовує ексклюзивний повноекранний режим. Щоб накладання були видимими, потрібно використовувати повноекранний режим без рамок.
Також існують відомі проблеми з прозорим відображенням вікон у 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-функціональність, ви можете скомпілювати оптимізований шаблон експорту, щоб зменшити розмір файлу. Це також покращить час запуску, особливо на веб-платформі, де розмір двійкового файлу безпосередньо пов'язаний зі швидкістю ініціалізації.
Зменшення розміру часто є значним (порівняно з розміром проєкту), оскільки програми містять менше великих ресурсів порівняно з іграми. Див. Оптимізація збірки за розміром для отримання додаткової інформації про те, як це зробити.
Створення дистрибутива з одним виконуваним файлом
За замовчуванням Godot створює файл PCK, що містить дані проєкту, поруч із виконуваним файлом. Це означає, що якщо виконуваний файл перемістити, не перемістивши одночасно файл PCK, програма не запуститься. Це не є ідеальним варіантом для програм, які дедалі частіше поширюються у вигляді єдиного виконуваного файлу.
Щоб зробити програму повністю автономною та об'єднати її в один виконуваний файл, у налаштуваннях пресета експорту можна увімкнути опцію Вбудувати PCK. Це дозволить вбудувати дані PCK у виконуваний файл, завдяки чому програму можна буде переміщувати без втрати працездатності. Крім того, це дає змогу запускати програму безпосередньо з архіву ZIP без попереднього розпакування.
Примітка
Вбудовування PCK має обмеження за розміром, що залежить від платформи. Дуже великі програми (розміром у кілька ГБ) можуть не підтримувати цю функцію на всіх платформах. Детальнішу інформацію дивіться в документації щодо експорту для цільової платформи.
Створення портативних програм
Програму називають портативною, якщо її можна запускати без інсталяції, а всі її налаштування містяться виключно в папці, куди її було розпаковано. Це дозволяє зберігати файли програми на USB-накопичувачі чи подібному носії та запускати її на різних комп’ютерах без необхідності інсталяції.
Власний режим self-contained mode редактора Godot наразі не можна використовувати в рамках проектів. Проте ви все одно можете зберегти власні файли конфігурації у папці, що містить виконуваний файл, таким чином:
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.
Можливо, вам варто зробити портативний режим опціональним, оскільки він не завжди є бажаним. Зазвичай це робиться шляхом виявлення наявності певного файлу в папці з виконуваним файлом (наприклад, файлу з назвою portable.txt) і використання папки з виконуваним файлом для налаштування лише за умови наявності цього файлу.
Попередження
Пам’ятайте, що це працюватиме лише в тому випадку, якщо програму розпаковано в папку з правами на запис. Якщо запускати виконуваний файл із папки, доступної лише для читання, наприклад C:\Program Files у Windows, виникнуть помилки, пов’язані з правами доступу.
Створення інсталяторів
Хоча ігри зазвичай встановлюються через лаунчери, такі як Steam, або завантажуються у вигляді ZIP-архіву, програми часто розповсюджуються як інсталятори для кращої інтеграції з робочим столом. Інсталятор може виконувати такі дії, як додавання ярликів до меню «Пуск» або на робочий стіл, налаштування асоціацій файлів тощо. Інсталятори також можуть запускатися автоматично через командний рядок, що робить їх більш бажаними для корпоративних середовищ.
Godot не має вбудованої підтримки для створення інсталяторів для експортованих проектів. Однак, все ще можна створювати власні інсталятори за допомогою сторонніх інструментів.
Ось неповний список інструментів, які можна використовувати для створення інсталяторів:
Windows: Inno Setup, NSIS
Якщо у вас є сертифікат підпису коду, не забудьте підписати як інсталятор, так і виконуваний файл проекту. Для цього підпишіть експортований виконуваний файл проекту, створіть інсталятор, що містить експортований проект, а потім вручну підпишіть щойно створений інсталятор.
macOS: create-dmg
Linux: Flatpak
Існує Godot BaseApp, який можна використовувати як основу для створення пакетів Flatpak для проектів Godot. Дивіться Pixelorama Flatpak для прикладу Flatpak, який використовує цей BaseApp.
Ресурси
Ці сторінки охоплюють завдання, які зазвичай виконуються в неігрових програмах:
ConfigFile (використовується для збереження налаштувань користувача)