Экспорт

Обзор

Теперь, когда у вас есть рабочая игра, вы, вероятно, захотите поделиться своим успехом с другими. Однако непрактично просить ваших друзей, чтобы они скачали Godot для открытия вашего проекта с игрой. Вместо этого, вы можете экспортировать ваш проект, превращая его в "пакет", который может открыть любой пользователь.

Способ экспорта вашей игры зависит от того, на какую платформу вы ориентируетесь. В этом уроке вы научитесь экспортировать игру "Увернись от Крипов" на различные платформы. Во-первых, нам нужно внести некоторые изменения в работу игры.

Примечание

Если вы еще не создали "Увернись от Крипов!" самостоятельно, пожалуйста, прочтите Ваша первая игра, прежде чем продолжить этот урок.

Подготовка проекта

В "Увернись от Крипов" мы использовали управление с клавиатуры для перемещения игрока. Это хорошо, если ваша игра для PC, но на телефоне или планшете требуется поддержка сенсорного ввода. Поскольку событие щелчка мыши может обрабатываться так же, как сенсорное событие, мы переведем игру на стиль ввода click-and-move (клик и перемещение).

По умолчанию Godot эмулирует ввод мыши с сенсорного ввода. Это означает что все, что запрограммировано случаться по событию мыши, также будет реагировать и при события сенсорного ввода. Godot также может эмулировать сенсорный ввод из щелчков мыши, что позволяет нам продолжать играть в нашу игру на компьютере после перехода на сенсорный ввод.

В Проект > Настройки проекта, под Устройства ввода > Указание, включите**Эмулировать нажатие из мыши**.

../../_images/export_touchsettings.png

Нам также надо убедиться, что игра будет корректно масштабироваться при разных размерах экрана, поэтому в настройках проекта перейдите в Display, затем кликните на Window. В разделе Stretch измените Mode на 2d и Aspect на keep.

Так как мы уже в настройках Window, нам также необходимо установить под Handheld значение Orientation в portrait.

../../_images/export_handheld_stretchsettings.png

Далее, нужно модифицировать скрипт Player.gd, чтобы изменить метод ввода. Уберем клавишное управление и сделаем так, чтобы игрок двигался к цели ("target"), которая задается событием нажатия по экрану (или клика мыши).

Вот полный скрипт для игрока, с комментариями, которые мы изменили:

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 из Steam <https://store.steampowered.com/app/404790/Godot_Engine/> `__, шаблоны экспорта уже включены. Следовательно, вам не нужно загружать их с помощью диалогового окна ** Управление шаблонами экспорта **.

В окне, которое откроется, вы сможете нажать Загрузка и получить версию шаблона, соответствующую вашей версии Godot.

../../_images/export_template_manager.png

Примечание

Шаблоны экспорта привязаны к определенной версии Godot. Если вы обновляете Godot, вы должны загрузить шаблоны, соответствующие новой версии.

Экспорт предустановок

Далее, вы можете настроить параметры экспорта, кликнув на Проект -> Экспортировать.

Создайте новую предустановку экспорта, нажав на Добавить... и выбрав платформу. Вы можете создать сколько угодно предустановок с различными настройками.

../../_images/export_presets_window.png

Внизу окна есть две кнопки. Экпортировать PCK/Zip лишь создает упакованную версию данных вашего проекта. Исполняемый файл при этом не включается, поэтому проект не сможет быть запущен самостоятельно.

Вторая кнопка, Экспортировать проект, создает полную исполняемую версию вашего проекта, например .apk для Android или .exe для Windows.

Во вкладках Ресурсы и Свойства вы можете настроить экспорт игры для каждой платформы. Эти настройки пока оставим.

Экспортирование на платформу

В данном разделе мы рассмотрим процесс для каждой платформы, включая любое дополнительное программное обеспечение или требования, которые вам понадобятся.

ПК (Linux/macOS/Windows)

Экспорт на платформы ПК работает одинаково для трех поддерживаемых операционных систем. Откройте окно экспорта и кликните Добавить..., чтобы создать жалаемую предустановку(-и). Затем кликните Экспортировать проект и подберите имя и целевую папку. Выберите расположение снаружи вашей папки с проектом.

Кликните Сохранить, и движок соберёт экспортируемые файлы.

Примечание

При экспорте для macOS, если вы экспортируете на компьютере с macOS, то вы получите файл .dmg, в то время как при использовании Linux или Windows создается файл .zip. В любом случае сжатый файл содержит в себе .app macOS'а, который вы можете запустить двойным нажатием.

Примечание

На Windows, если вы хотите, чтобы ваш экспортированный исполняемый файл имел иконку отличную от той, что установлена по умолчанию, вам необходимо изменить ее вручную. Смотрите: Изменение значка приложения для Windows.

Android

Совет

Мобильные устройства обладают широким спектром возможностей. В большинстве случаев настойки Godot по умолчанию будут работать, однако временами мобильная разработка - это скорее искусство, чем наука, и вам, вероятно, придется экспериментировать и искать помощи для того, чтобы все заработало.

Прежде чем вы сможете экспортировать свой проект на Android, вы должны загрузить следующее программное обеспечение:

При первом запуске Android Studio щелкните на Настройки -> SDK Manager и установите Android SDK Platform Tools. Это установит 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. В Параметры перейдите к Screen и установите Orientation на Portrait. Если ваша игра в ландшафтном режиме(т.е. ширина окна в пикселях больше высоты), оставьте ее на Landscape.

Нажмите кнопку Экспортировать проект, и 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

Если что-то пойдёт не так, окно консоли ниже игры скажет, в чём проблема. Вы можете его отключить, сняв опцию Экспорт в режиме отладки в завершающем окне файла при экспорте проекта.

../../_images/export_web_export_with_debug_disabled.png

Примечание

Хотя WebAssembly поддерживается во всех основных браузерах, это все еще развивающаяся технология, и вы можете обнаружить, что некоторые вещи не работают. Убедитесь, что вы обновили браузер до последней версии и сообщите о любых обнаруженных ошибках в репозиторий Godot на Github.