Експортування

Огляд

Тепер, коли у вас є робоча гра, ви, мабуть, хочете поділитися своїм успіхом з іншими. Однак не практично просити своїх друзів завантажити Godot лише для того, щоб вони могли відкрити ваш проект. Натомість ви можете експортувати свій проект, перетворюючи його у «пакет», який може запускати будь-хто.

Спосіб експорту вашої гри залежить від платформи, на яку ви орієнтовані. У цьому уроці ви дізнаєтесь, як експортувати гру «Dodge the Creeps» для різних платформ. Однак спершу нам потрібно внести деякі зміни в спосіб роботи гри.

Примітка

Якщо ви ще не зробили «Dodge the Creeps», будь ласка, прочитайте Ваша перша гра, перш ніж продовжувати цей урок.

Приготування проекту

У “Dodge the Creeps” ми використовували клавіатуру для переміщення персонажа гравця. Це добре, якщо ваша гра грається на платформі ПК, але на телефоні, чи планшеті, вам потрібна підтримка сенсорного екрану. Оскільки подію клацання мишки можна трактувати так само, як сенсорну подію, ми перетворимо гру в стиль «click-and-move» («клац і рух»).

За замовчуванням Godot емулює введення миші з сенсорного введення. Це означає, що все що закодовано на події миші, буде працювати і на події сенсорного введення. Godot також може імітувати сенсорне введення з натискання миші, що дає нам можливість продовжувати грати в нашу гру на комп’ютері переключившись на сенсорний ввід. У розділі «Параметри проекту» в розділі Input Devices*(*Пристрої введення) встановіть Emulate Touch From Mouse (Емуляція дотику від миші) на «Увімкнено».

../../_images/export_touchsettings.png

Нам також необхідно впевнитись, що гра масштабується коректно на різних розмірах екранів, тому в параметрах проекту перейдіть до меню Display (Екран), натисніть Window (Вікно). У параметрах Stretch (Розтягування) встановіть для Mode (Режим) - «2d», а для Aspect (Вигляд) - «keep» («утримувати»).

Оскільки ми вже в Window, то також встановимо під Handheld в Orientation (Орієнтація) на «portrait» («портретна»»).

../../_images/export_handheld_stretchsettings.png

Далі нам потрібно модифікувати скрипт Player.gd, щоб змінити метод введення. Ми видалимо керування клавішами та змусимо гравця рухатись до «цілі», встановленої дотиком (або клацанням мишки).

Ось повний скрипт для гравця із коментарями щодо того, що ми змінили:

extends Area2D

signal hit

export var speed = 400
var screen_size
# Add this variable to hold the clicked position.
var target = Vector2()

func _ready():
    hide()
    screen_size = get_viewport_rect().size

func start(pos):
    position = pos
    # Initial target is the start position.
    target = pos
    show()
    $CollisionShape2D.disabled = false

# Change the target whenever a touch event happens.
func _input(event):
    if event is InputEventScreenTouch and event.pressed:
        target = event.position

func _process(delta):
    var velocity = Vector2()
    # Move towards the target and stop when close.
    if position.distance_to(target) > 10:
        velocity = target - position

# Remove keyboard controls.
#    if Input.is_action_pressed("ui_right"):
#       velocity.x += 1
#    if Input.is_action_pressed("ui_left"):
#        velocity.x -= 1
#    if Input.is_action_pressed("ui_down"):
#        velocity.y += 1
#    if Input.is_action_pressed("ui_up"):
#        velocity.y -= 1

    if velocity.length() > 0:
        velocity = velocity.normalized() * speed
        $AnimatedSprite.play()
    else:
        $AnimatedSprite.stop()

    position += velocity * delta
    # We still need to clamp the player's position here because on devices that don't
    # match your game's aspect ratio, Godot will try to maintain it as much as possible
    # by creating black borders, if necessary.
    # Without clamp(), the player would be able to move under those borders.
    position.x = clamp(position.x, 0, screen_size.x)
    position.y = clamp(position.y, 0, screen_size.y)

    if velocity.x != 0:
        $AnimatedSprite.animation = "walk"
        $AnimatedSprite.flip_v = false
        $AnimatedSprite.flip_h = velocity.x < 0
    elif velocity.y != 0:
        $AnimatedSprite.animation = "up"
        $AnimatedSprite.flip_v = velocity.y > 0

func _on_Player_body_entered( body ):
    hide()
    emit_signal("hit")
    $CollisionShape2D.set_deferred("disabled", true)
using Godot;
using System;

public class Player : Area2D
{
    [Signal]
    public delegate void Hit();

    [Export]
    public int Speed = 400;

    private Vector2 _screenSize;
    // Add this variable to hold the clicked position.
    private Vector2 _target;

    public override void _Ready()
    {
        Hide();
        _screenSize = GetViewport().Size;
    }

    public void Start(Vector2 pos)
    {
        Position = pos;
        // Initial target us the start position.
        _target = pos;
        Show();
        GetNode<CollisionShape2D>("CollisionShape2D").Disabled = false;
    }

    // Change the target whenever a touch event happens.
    public override void _Input(InputEvent @event)
    {
        if (@event is InputEventScreenTouch eventMouseButton && eventMouseButton.Pressed)
        {
            _target = (@event as InputEventScreenTouch).Position;
        }
    }

    public override void _Process(float delta)
    {
        var velocity = new Vector2();
        // Move towards the target and stop when close.
        if (Position.DistanceTo(_target) > 10)
        {
            velocity = _target - Position
        }

        // Remove keyboard controls.
        //if (Input.IsActionPressed("ui_right"))
        //{
        //    velocity.x += 1;
        //}

        //if (Input.IsActionPressed("ui_left"))
        //{
        //    velocity.x -= 1;
        //}

        //if (Input.IsActionPressed("ui_down"))
        //{
        //    velocity.y += 1;
        //}

        //if (Input.IsActionPressed("ui_up"))
        //{
        //    velocity.y -= 1;
        //}

        var animatedSprite = GetNode<AnimatedSprite>("AnimatedSprite");

        if (velocity.Length() > 0)
        {
            velocity = velocity.Normalized() * Speed;
            animatedSprite.Play();
        }
        else
        {
            animatedSprite.Stop();
        }

        Position += velocity * delta;
        // We still need to clamp the player's position here because on devices that don't
        // match your game's aspect ratio, Godot will try to maintain it as much as possible
        // by creating black borders, if necessary.
        // Without clamp(), the player would be able to move under those borders.
        Position = new Vector2(
            x: Mathf.Clamp(Position.x, 0, _screenSize.x),
            y: Mathf.Clamp(Position.y, 0, _screenSize.y)
        );

        if (velocity.x != 0)
        {
            animatedSprite.Animation = "walk";
            animatedSprite.FlipV = false;
            animatedSprite.FlipH = velocity.x < 0;
        }
        else if(velocity.y != 0)
        {
            animatedSprite.Animation = "up";
            animatedSprite.FlipV = velocity.y > 0;
        }
    }
    public void OnPlayerBodyEntered(PhysicsBody2D body)
    {
        Hide(); // Player disappears after being hit.
        EmitSignal("Hit");
        GetNode<CollisionShape2D>("CollisionShape2D").SetDeferred("disabled", true);
    }
}

Налаштування головної сцени

Головна сцена - це та, з якої буде розпочинатися ваша гра. У Проект -> Параметри проекту -> Application (Застосування) -> Run, встановіть для Main Scene (Головна сцена) значення «Main.tscn», натиснувши піктограму теки та вибравши його.

Шаблони експорту

Для експорту вам потрібно завантажити шаблони експорту з http://godotengine.org/download. Ці шаблони є оптимізованими версіями редактора без самого редактора оптимізованого для кожної платформи. Ви також можете завантажити їх у Godot, натиснувши Редактор -> Керування шаблонами експорту:

../../_images/export_template_menu.png

У вікні, що з’явиться, ви можете натиснути «Завантажити», щоб отримати версію шаблону, що відповідає вашій версії Godot.

../../_images/export_template_manager.png

Примітка

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

Export presets

Далі ви можете налаштувати параметри експорту, натиснувши на Проект -> Експортувати.

Створіть нову передустановку експорту, натиснувши «Додати…» та обравши платформу. За допомогою різних налаштувань можна зробити стільки завгодно передустановок з різними налаштуваннями.

../../_images/export_presets_window.png

У нижній частині вікна є дві кнопки. «Експорт PCK / ZIP» створює лише упаковану версію даних вашого проекту. Без виконуваного файлу, тому проект не бути запускатися самостійно.

Друга кнопка - «Експорт проекту» створює повну виконавчу версію вашої гри, наприклад як .apk для Android, або .exe для Windows.

На вкладках «Resources» («Ресурси») та «Features» («Особливості») ви можете налаштувати, як гра експортується для кожної платформи. Наразі ці налаштування ми можемо залишити в спокої.

Експортування на платформами

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

ПК (Linux/macOS/Windows)

Експорт на платформи ПК працює однаково в трьох підтримуваних операційних системах. Відкрийте вікно експорту та натисніть «Додати ..», щоб створити передустановку, яку ви хочете використати. Потім натисніть «Експорт проекту» та оберіть ім’я та теку. Виберіть розташування за межами папки вашого проекту.

Натисніть «Зберегти», і редактор створить файли експорту.

Примітка

Якщо ви експортуєте для MacOS, ви отримаєте файл .dmg, для Linux, або Windows, буде .zip. У будь-якому випадку стиснутий файл містить macOS .app, який можна двічі клацнути та запустити.

Примітка

Якщо ви хочете, щоб експортований виконуваний файл мав інакший значок, а не стандартний, його потрібно змінити вручну. Дивіться: Зміна іконки програми для Windows.

Android

Порада

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

Перш ніж експортувати проект для Android, потрібно завантажити таке програмне забезпечення:

Коли ви вперше запускаєте Android Studio, натисніть Налаштувати -> SDK Manager та встановіть «Android SDK Platform Tools» («Інструменти платформи Android SDK»). Тут встановлюється інструмент командного рядка adb, який Godot використовує для спілкування з вашим пристроєм.

Далі створіть сховище ключів налагодження, запустивши таку команду в командному рядку вашої системи:

keytool -keyalg RSA -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname "CN=Android Debug,O=Android,C=US" -validity 9999

Клацніть на Редактор -> Параметри редактора в Godot і виберіть розділ Export/Android. Тут вам потрібно встановити шляхи до додатків Android SDK у вашій системі та місце розташування створеного вами сховища ключів.

../../_images/export_editor_android_settings.png

Тепер ви готові експортувати. Клацніть на Проект -> Експортувати та додайте передустановку для Android (дивіться вище). Виберіть Android Presets і в розділі Options (Опції) перейдіть до Screen (Екран) та встановіть Orientation (Орієнтація) на «Portrait» («портретна»).

Натисніть кнопку «Експорт проекту» і Godot створить APK, який ви можете завантажити на свій пристрій. Для цього в командному рядку використовуйте наступне:

adb install dodge.apk

Примітка

Можливо, ваш пристрій повинен перебувати в режимі розробника. Для отримання детальної інформації зверніться до документації пристрою.

Якщо ваша система підтримує це, підключення сумісного пристрою Android спричинить появу кнопки «Розгортання одним натисканням кнопки» в області кнопок відтворення Godot:

../../_images/export_android_oneclick.png

Натискання цієї кнопки створює APK і копіює його на ваш пристрій за один крок.

iOS

Примітка

Для того щоб створити гру для iOS, у вас повинен бути встановлений комп’ютер під управлінням macOS з Xcode.

Перед експортом є кілька параметрів, які ви повинні змінити для успішного експорту проекту. По-перше, «App Store Team Id», який ви можете знайти, увійшовши до свого облікового запису розробника Apple і переглянувши розділ «Membership».

Ви також повинні надати піктограми та зображення екрану, як показано нижче:

../../_images/export_ios_settings.png

Клацніть «Експорт проекту» та оберіть теку призначення.

Після того, як ви успішно експортували проект, ви знайдете такі папки та файли, які були створені у вибраному вами місці:

../../_images/export_xcode_project_folders.png

Тепер ви можете відкрити проект у Xcode та створити проект для iOS. Процедура збирання Xcode виходить за межі цього підручника. Дивіться https://help.apple.com/xcode/mac/current/#/devc8c2a6be1 для отримання додаткової інформації.

HTML5 (web)

Натисніть «Експорт проекту» на передустановці HTML5. Нам не потрібно змінювати жодні налаштування за замовчуванням.

Коли експорт завершиться, у вас з’явиться папка, що містить такі файли:

../../_images/export_web_files.png

Перегляд .html - файлу у вашому браузері дозволяє вам грати. Однак ви не можете відкрити файл безпосередньо, його потрібно обслуговувати веб-сервером. Якщо у вас немає налаштувань на комп’ютері, ви можете пошукати в Інтернеті, щоб знайти пропозиції для вашої конкретної ОС.

Наберіть в браузері URL-адресу, де ви розмістили файл html. Можливо, вам доведеться почекати кілька хвилин, поки гра завантажиться, перш ніж побачити екран запуску.

../../_images/export_web_example.png

Вікно консолі під грою підкаже в чому проблема, якщо щось піде не так. Ви можете відключити його, в параметрі «Export With Debug» під час експорту проекту.

../../_images/export_web_export_with_debug_disabled.png

Примітка

Хоча WASM підтримується у всіх основних браузерах, це все ще нова технологія, і ви можете знайти деякі речі, які не працюють. Переконайтеся, що ви оновили веб-переглядач до останньої версії та повідомте про будь-які помилки, які ви знайдете у Godot Github repository.