Експорт пакетів, патчів та модів
Випадки використання
Часто хочеться додати функціональність до своєї гри після її розгортання.
Наприклад...
Зміст, який можна завантажити: можливість додавати функції та вміст у гру.
Патчі: можливість виправити помилку, яка присутня у створеному продукті.
Моди: надайте іншим людям можливість створювати контент для своєї гри.
Ці інструменти допомагають розробникам розширити свою розробку після початкового випуску.
Огляд файлів PCK/ZIP
Godot дозволяє це за допомогою функції під назвою паки ресурсів (файли PCK з розширенням .pck або ZIP-файли).
Переваги:
покрокові оновлення / виправлення
пропонує DLC
пропонує підтримку модів
не потрібне розкриття вихідного коду для модів
більш модульна структура проєкту
користувачі не повинні замінювати всю гру
Перший етап їх використання включає експорт та доставку проєкту гравцям. Потім, коли пізніше потрібно додати функціональність або контент, оновлення просто доставляють користувачам у вигляді PCK/ZIP-файлів.
Файли PCK/ZIP зазвичай містять, але не обмежуються:
скрипти
сцени
шейдери
моделі
текстури
звукові ефекти
музику
будь-який інший актив, придатний для імпорту в гру
Файли PCK/ZIP можуть бути навіть зовсім іншим проектом Godot, який оригінальна гра завантажує під час виконання.
Можна одночасно завантажувати файли PCK та ZIP як додаткові пакети. Див. Формати файлів PCK та ZIP для порівняння двох форматів.
Дивись також
Якщо ви хочете завантажувати окремі файли під час виконання (не упаковані в PCK або ZIP-архів Godot), розгляньте можливість використання Завантаження та збереження виконавчого файлу. Це корисно для завантаження контенту, створеного користувачем не за допомогою Godot, без необхідності пакування модів у певний формат файлу.
Недоліком цього підходу є те, що він менш прозорий для ігрової логіки, оскільки не отримає такого ж користі від управління ресурсами, як файли PCK/ZIP.
Генерування файлів PCK
Щоб упакувати всі ресурси проєкту у файл PCK, відкрийте проєкт і перейдіть до Проєкт > Експорт та натисніть Експорт PCK/ZIP. Також переконайтеся, що під час виконання вибрано пресет експорту.
Іншим методом було б export from the command line з --export-pack. Вихідний файл повинен мати розширення .pck або .zip. Процес експорту створить файл цього типу для вибраної платформи.
Примітка
Якщо хтось хоче включити підтримку модів для своєї гри, то він може потребувати від своїх користувачів створення аналогічних експортованих файлів. Якщо припустити, що оригінальна гра очікує певної структури ресурсів PCK та/або певного інтерфейсу для її скриптів, то будь-який…
Розробник повинен оприлюднити документацію цих очікуваних структур/інтерфейсів, розраховувати, що модери встановлять Godot Engine, а потім також очікувати, що ці модери будуть відповідати визначеній документацією API при створенні модів для гри (щоб він працював). Потім користувачі будуть використовувати компілятор Godot для експорту інструментів для створення файлу PCK, як детально описано вище.
Розробник використовує Godot для створення графічного інтерфейсу інструмента для додавання свого вмісту API до проекту. Цей інструмент Godot повинен або бути вбудованим у збірку рушія з підтримкою інструментів, або мати доступ до неї (розповсюджуватися разом з оригінальними файлами гри або, можливо, серед них). Потім інструмент може використовувати виконуваний файл Godot для експорту PCK-файлу з командного рядка за допомогою OS.execute(). Сама гра не повинна використовувати інструментальну збірку рушія (з міркувань безпеки), тому краще тримати інструмент для модифікації окремо від гри.
Відкриття PCK- або ZIP-файлів під час виконання
Щоб завантажити файл PCK або ZIP, використовується синглтон ProjectSettings. У наступному прикладі очікується файл mod.pck у каталозі виконуваного файлу гри. Файл PCK або ZIP містить тестову сцену mod_scene.tscn у своєму кореневому каталозі.
func _your_function():
# This could fail if, for example, mod.pck cannot be found.
var success = ProjectSettings.load_resource_pack(OS.get_executable_path().get_base_dir().path_join("mod.pck"))
if success:
# Now one can use the assets as if they had them in the project from the start.
var imported_scene = load("res://mod_scene.tscn")
private void YourFunction()
{
// This could fail if, for example, mod.pck cannot be found.
var success = ProjectSettings.LoadResourcePack(OS.get_executable_path().get_base_dir().path_join("mod.pck));
if (success)
{
// Now one can use the assets as if they had them in the project from the start.
var importedScene = (PackedScene)ResourceLoader.Load("res://mod_scene.tscn");
}
}
Попередження
За замовчуванням, якщо ви імпортуєте файл із тим самим шляхом/ім’ям, що й у вашого проєкту, імпортований файл замінить його. На це слід звернути увагу під час створення DLC або модів. Ви можете вирішити цю проблему, використовуючи інструмент, який ізолює моди в певну підпапку mods.
Однак, це також спосіб створення патчів для власної гри. Файл PCK/ZIP такого типу може виправити вміст раніше завантаженого PCK/ZIP (тому порядок завантаження пакетів має значення).
Щоб відмовитися від цієї поведінки передайте false в якості другого аргумента в ProjectSettings.load_resource_pack().
Примітка
Для проєкту C# вам потрібно створити DLL і розмістити його спочатку в каталозі проєктів. Потім перед завантаженням пакета ресурсів потрібно завантажити його DLL наступним чином: Assembly.LoadFile("mod.dll")
Вирішення проблем
Якщо ви завантажуєте пакет ресурсів і не помічаєте жодних змін, це може бути пов'язано з тим, що пакет завантажується занадто пізно. Це особливо стосується сцен меню, які можуть попередньо завантажувати інші сцени за допомогою preload(). Це означає, що завантаження пакета в меню не вплине на іншу сцену, яка вже була попередньо завантажена.
Щоб уникнути цього, вам потрібно завантажити пакет якомога раніше. Для цього створіть новий скрипт autoload та викличте ProjectSettings.load_resource_pack() у функції _init() скрипта автозавантаження, а не _enter_tree() або _ready().
Підсумок
Цей підручник пояснює, як додавати модифікації, патчі або DLC до гри. Найважливіше — визначити, як хтось планує розповсюджувати майбутній вміст для своєї гри, і розробити робочий процес, налаштований для цієї мети. Godot має зробити цей процес гладким незалежно від того, який шлях розробник прагне.