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.

Створення додатків

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

Порівняння стандартного 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 Game screen, clicking the rightmost icon in the bar at the top and unchecking Embed Game on Next Play.

Створення значка в системному треї

Це підтримується лише у 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.

У macOS програми можуть використовувати глобальний рядок меню системи замість відображення рядка меню всередині вікна програми. Це також називається власним меню у Godot.

Порівняння стандартного меню (ліворуч), меню з нативними спливаючими вікнами (посередині) та нативного меню (праворуч) на macOS

Порівняння стандартного меню (ліворуч), меню з нативними спливаючими вікнами (посередині) та нативного меню (праворуч) на macOS

Godot підтримує створення меню через вузол MenuBar, який відображає свої дочірні елементи class_PopupMenu як меню. Ви можете ввімкнути підтримку глобального меню для певного вузла MenuBar, увімкнувши його властивість prefer_global_menu в інспекторі. У macOS це призведе до того, що вузол MenuBar зникне і не займатиме місця, а його меню відображатимуться в глобальному рядку меню системи. Якщо цю властивість вимкнено, вузол MenuBar відображатиме свої меню у вікні програми, як завжди, але власні спливаючі вікна все одно використовуються, якщо це підтримується операційною системою.

Примітка

Меню програми (з назвою проекту, виділеною жирним шрифтом), а також меню Window та Help завжди присутні в macOS. Не слід додавати їх до глобального меню вручну.

У Godot 4.6 та пізніших версіях ви можете додавати нові елементи в ці меню, змінюючи властивість system_menu_id вузла PopupMenu. Ви можете вибрати між Меню програми (перше меню з назвою програми, виділеною жирним шрифтом), Меню вікна, Меню довідки та Док (відображається при клацанні правою кнопкою миші на значку в Доку). Стандартні елементи меню, які вже присутні в цих меню, будуть збережені:

Додано користувацькі параметри до системного меню Window у macOS

Додано користувацькі параметри до системного меню Window у macOS

Проєкт може мати кілька вузлів MenuBar. Якщо для кількох вузлів MenuBar увімкнено властивість Надавати перевагу глобальному меню, пункти меню будуть додані за індексом, визначеним властивістю Початок індексу, коли вузол MenuBar додається до дерева сцени. Це дозволяє розміщувати контекстно-залежні меню в кінці рядка меню, щоб перші пункти меню залишалися на місці під час додавання або видалення додаткового рядка меню.

Для більш складних випадків використання ви також можете використовувати синглтон NativeMenu безпосередньо, без використання вузла MenuBar.

Примітка

Global menu integration 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 Game screen, clicking the rightmost icon in the bar at the top and unchecking Embed Game on Next Play.

Використання декорацій на стороні клієнта

Це підтримується лише на macOS.

Багато сучасних програм використовують клієнтські декорації (CSD) замість того, щоб покладатися на менеджер вікон операційної системи для малювання рядка заголовка та меж вікна (серверні декорації). Це дозволяє створити більш настроюваний зовнішній вигляд та краще інтегруватися з інтерфейсом програми.

Наразі Godot підтримує лише клієнтське оформлення на macOS. Це можна зробити, увімкнувши параметр проекту display/window/size/extend_to_title.

Порівняння стандартних декорацій вікон (зверху) та декорацій на стороні клієнта (знизу) на macOS

Порівняння стандартних декорацій вікон (зверху) та декорацій на стороні клієнта (знизу) на 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

Примітка

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 Game screen, clicking the rightmost icon in the bar at the top and unchecking Embed Game on Next Play.

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

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 Game screen, clicking the rightmost icon in the bar at the top and unchecking Embed Game on Next Play.

Надсилання сповіщень на робочому столі

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 Game screen, clicking the rightmost icon in the bar at the top and unchecking Embed Game on Next Play.

Крім того, пам’ятайте, що накладання не можна відображати поверх іншої програми, якщо відповідна програма використовує ексклюзивний повноекранний режим. Щоб накладання були видимими, потрібно використовувати повноекранний режим без рамок.

Також існують відомі проблеми з прозорим відображенням вікон у 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, а також забезпечити логічне відображення інтерфейсу користувача під час читання програмою зчитування з екрана.

Дивись також

Див. також Перетворення тексту на мовлення щодо функції перетворення тексту в мовлення, окремої від програм зчитування з екрана.

Додавання модульних тестів

У застосунку часто є більш цінним використання налаштування модульного тестування порівняно з грою. Це можна використовувати для автоматичного виявлення регресій, що, як правило, легше зробити в сценарії застосунку, де логіку можна чітко розділити.

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.

Ресурси

Ці сторінки охоплюють завдання, які зазвичай виконуються в неігрових програмах: