diff --git a/about/docs_changelog.rst b/about/docs_changelog.rst index 5f9ea448b..2ac81fd00 100644 --- a/about/docs_changelog.rst +++ b/about/docs_changelog.rst @@ -107,7 +107,7 @@ Step by step ^^^^^^^^^^^^ - :ref:`doc_signals` -- :ref:`doc_exporting_basics` +- Exporting Scripting ^^^^^^^^^ diff --git a/tutorials/export/exporting_basics.rst b/tutorials/export/exporting_basics.rst deleted file mode 100644 index 8226658ff..000000000 --- a/tutorials/export/exporting_basics.rst +++ /dev/null @@ -1,442 +0,0 @@ -.. _doc_exporting_basics: - -Exporting -========= - -Overview --------- - -Now that you have a working game, you probably want to share your success with -others. However, it's not practical to ask your friends to download Godot -just so they can open your project. Instead, you can *export* your project, -converting it into a "package" that can be run by anyone. - -The way you export your game depends on what platform you are targeting. In -this tutorial, you'll learn how to export the *Dodge the Creeps* game for a -variety of platforms. First, however, we need to make some changes to the -way the game works. - -.. note:: If you haven't made *Dodge the Creeps* yourself yet, please read - :ref:`doc_your_first_2d_game` before continuing with this tutorial. - -Preparing the project ---------------------- - -In *Dodge the Creeps*, we used keyboard controls to move the player's character. -This is fine if your game is being played on a PC platform, but on a phone -or tablet, you need to support touchscreen input. Because a click event can -be treated the same as a touch event, we'll convert the game to a click-and-move -input style. - -By default, Godot emulates mouse input from touch input. That means that if -anything is coded to happen on a mouse event, touch will trigger it as well. -Godot can also emulate touch input from mouse clicks, which we will need to be -able to keep playing our game on our computer after we switch to touch input. - -In **Project > Project Settings**, under **Input Devices > Pointing**, enable -**Emulate Touch From Mouse**. - -.. image:: img/export_touchsettings.png - -We also want to ensure that the game scales consistently on different-sized screens, -so in the project settings go to **Display**, then click on **Window**. In the **Stretch** -options, set **Mode** to ``2d`` and **Aspect** to ``keep``. - -Since we are already in the **Window** settings, we should also set under **Handheld** -the **Orientation** to ``portrait``. - -.. image:: img/export_handheld_stretchsettings.png - -Next, we need to modify the ``Player.gd`` script to change the input method. -We'll remove the key inputs and make the player move towards a "target" that's -set by the touch (or click) event. - -Here is the full script for the player, with comments noting what we've -changed: - -.. tabs:: - .. code-tab:: gdscript GDScript - - 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) - - .. code-tab:: csharp - - 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").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"); - - 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").SetDeferred("disabled", true); - } - } - -Setting a main scene --------------------- - -The main scene is the one that your game will start in. For this -*Dodge the Creeps* example, in -**Project -> Project Settings -> Application -> Run**, set **Main Scene** -to ``Main.tscn`` by clicking the folder icon and selecting it. - -Export templates ----------------- - -To export the project, you need to download the *export templates* from the -http://godotengine.org/download. These templates are optimized versions of the engine -without the editor pre-compiled for each platform. You can also -download them in Godot by clicking on **Editor -> Manage Export Templates**: - -.. image:: img/export_template_menu.png - -.. note:: - - If you've downloaded Godot from - `Steam `__, - export templates are already included. Therefore, you don't need to download - them using the **Manage Export Templates** dialog. - -In the window that appears, you can click **Download** to get the template -version that matches your version of Godot. - -.. image:: img/export_template_manager.png - -.. note:: - - Export templates are bound to a specific Godot version. If you upgrade - Godot, you must download templates that match the new version. - -Export presets --------------- - -Next, you can configure the export settings by clicking on **Project -> Export**. - -Create a new export preset by clicking **Add...** and selecting a platform. You -can make as many presets as you like with different settings. - -.. image:: img/export_presets_window.png - -At the bottom of the window are two buttons. **Export PCK/ZIP** only creates -a packed version of your project's data. This doesn't include an executable -so the project can't be run on its own. - -The second button, **Export Project**, creates a complete executable version -of your game, such as an ``.apk`` for Android or an ``.exe`` for Windows. - -In the **Resources** and **Features** tabs, you can customize how the game is -exported for each platform. We can leave those settings alone for now. - -Exporting by platform ---------------------- - -In this section, we'll walk through the process for each platform, -including any additional software or requirements you'll need. - -PC (Linux/macOS/Windows) -~~~~~~~~~~~~~~~~~~~~~~~~ - -Exporting PC platforms works the same across the three supported operating -systems. Open the export window and click **Add...** to create the preset(s) you -want to make. Then click **Export Project** and choose a name and destination -folder. Choose a location *outside* of your project folder. - -Click **Save** and the engine will build the export files. - -.. note:: - - When exporting for macOS, if you export from a macOS computer, you'll end up - with a ``.dmg`` file, while using Linux or Windows produces a ``.zip``. In - either case, the compressed file contains a macOS ``.app`` that you can - double-click and run. - -.. note:: - - On Windows, if you want your exported executable to have a different icon - than the default one, you need to change it manually. See - :ref:`doc_changing_application_icon_for_windows`. - -Android -~~~~~~~ - -.. tip:: - - Mobile devices come with a wide variety of capabilities. In most cases, - Godot's default settings will work, but mobile development is sometimes more - art than science, and you may need to do some experimenting and searching - for help in order to get everything working. - -Before you can export your project for Android, you must download the following -software: - -* Android SDK: https://developer.android.com/studio/ -* Open JDK (**version 8 is required**, more recent versions won't work): https://adoptopenjdk.net/index.html - -When you run Android Studio for the first time, click on **Configure -> SDK Manager** -and install **Android SDK Platform Tools**. This installs the ``adb`` -command-line tool that Godot uses to communicate with your device. - -Next, create a debug keystore by running the following command on your -system's command line: - -.. code-block:: shell - - keytool -keyalg RSA -genkeypair -alias androiddebugkey -keypass android -keystore debug.keystore -storepass android -dname "CN=Android Debug,O=Android,C=US" -validity 9999 - -Click on *Editor -> Editor Settings* in Godot and select the *Export/Android* -section. Here, you need to set the paths to the Android SDK applications on -your system and the location of the keystore you just created. - -.. image:: img/export_editor_android_settings.png - -Now you're ready to export. Click on **Project -> Export** and add a preset -for Android (see above). Select the newly added Android preset. Under **Options**, -go to **Screen** and set **Orientation** to **Portrait**. If your game is in -landscape mode (i.e. the window width in pixels is greater than the window height), -leave this on **Landscape**. - -Click the **Export Project** button and Godot will build an APK you can download -on your device. To do this on the command line, use the following: - -.. code-block:: shell - - adb install dodge.apk - -.. note:: Your device may need to be in *developer mode*. Consult your - device's documentation for details. - -If your system supports it, connecting a compatible Android device will cause -a **One-click Deploy** button to appear in Godot's playtest button area: - -.. image:: img/export_android_oneclick.png - -Clicking this button builds the APK and copies it onto your device in one step. - -iOS -~~~ - -.. note:: - - To build your game for iOS, you must have a computer running macOS with - Xcode installed. - -Before exporting, there are some settings that you *must* complete for the project -to export successfully. First, the **App Store Team Id**, which you can find by -logging in to your Apple developer account and looking in the **Membership** section. - -You must also provide icons and splash screen images as shown below: - -.. image:: img/export_ios_settings.png - -Click **Export Project** and select a destination folder. - -Once you have successfully exported the project, you'll find the following -folders and files have been created in your selected location: - -.. image:: img/export_xcode_project_folders.png - -You can now open the project in Xcode and build the project for iOS. -The Xcode build procedure is beyond the scope of this tutorial. -See https://help.apple.com/xcode/mac/current/#/devc8c2a6be1 -for more information. - -HTML5 (web) -~~~~~~~~~~~ - -Click **Export Project** on the HTML5 preset. We don't need to change any -of the default settings. - -When the export is complete, you'll have a folder containing the following -files: - -.. image:: img/export_web_files.png - -Viewing the ``.html`` file in your browser lets you play the game. However, you -can't open the file directly. Instead, it needs to be served by a web server. If -you don't have one set up on your computer, you can search online to find -suggestions for your specific OS. - -Point your browser at the URL where you've placed the HTML file. You may have -to wait a few moments while the game loads before you see the start screen. - -.. image:: img/export_web_example.png - -The console window beneath the game tells you if anything goes wrong. You can -disable it by disabling **Export With Debug** in the final file dialog that appears -when you export the project. - -.. image:: img/export_web_export_with_debug_disabled.png - -.. note:: - - While WebAssembly is supported in all major browsers, it is still an - emerging technology and you may find some things that don't work. Make sure - you have updated your browser to the most recent version, and report any - bugs you find on the - `Godot GitHub repository `_. diff --git a/tutorials/export/img/export_android_oneclick.png b/tutorials/export/img/export_android_oneclick.png deleted file mode 100644 index 3f2ef2b36..000000000 Binary files a/tutorials/export/img/export_android_oneclick.png and /dev/null differ diff --git a/tutorials/export/img/export_editor_android_settings.png b/tutorials/export/img/export_editor_android_settings.png deleted file mode 100644 index 2b50201d8..000000000 Binary files a/tutorials/export/img/export_editor_android_settings.png and /dev/null differ diff --git a/tutorials/export/img/export_handheld_stretchsettings.png b/tutorials/export/img/export_handheld_stretchsettings.png deleted file mode 100644 index 24549c1cc..000000000 Binary files a/tutorials/export/img/export_handheld_stretchsettings.png and /dev/null differ diff --git a/tutorials/export/img/export_ios_settings.png b/tutorials/export/img/export_ios_settings.png deleted file mode 100644 index 2cb88c34e..000000000 Binary files a/tutorials/export/img/export_ios_settings.png and /dev/null differ diff --git a/tutorials/export/img/export_preset.png b/tutorials/export/img/export_preset.png index b12c558aa..fadeaa73f 100644 Binary files a/tutorials/export/img/export_preset.png and b/tutorials/export/img/export_preset.png differ diff --git a/tutorials/export/img/export_presets_window.png b/tutorials/export/img/export_presets_window.png deleted file mode 100644 index eb619da17..000000000 Binary files a/tutorials/export/img/export_presets_window.png and /dev/null differ diff --git a/tutorials/export/img/export_template_manager.png b/tutorials/export/img/export_template_manager.png deleted file mode 100644 index 106556bec..000000000 Binary files a/tutorials/export/img/export_template_manager.png and /dev/null differ diff --git a/tutorials/export/img/export_template_menu.png b/tutorials/export/img/export_template_menu.png deleted file mode 100644 index 0792c4df2..000000000 Binary files a/tutorials/export/img/export_template_menu.png and /dev/null differ diff --git a/tutorials/export/img/export_touchsettings.png b/tutorials/export/img/export_touchsettings.png deleted file mode 100644 index 2c4a78933..000000000 Binary files a/tutorials/export/img/export_touchsettings.png and /dev/null differ diff --git a/tutorials/export/img/export_web_example.png b/tutorials/export/img/export_web_example.png deleted file mode 100644 index 62d396e06..000000000 Binary files a/tutorials/export/img/export_web_example.png and /dev/null differ diff --git a/tutorials/export/img/export_web_export_with_debug_disabled.png b/tutorials/export/img/export_web_export_with_debug_disabled.png deleted file mode 100644 index 0a884f623..000000000 Binary files a/tutorials/export/img/export_web_export_with_debug_disabled.png and /dev/null differ diff --git a/tutorials/export/img/export_web_files.png b/tutorials/export/img/export_web_files.png deleted file mode 100644 index 843e883b6..000000000 Binary files a/tutorials/export/img/export_web_files.png and /dev/null differ diff --git a/tutorials/export/img/export_xcode_project_folders.png b/tutorials/export/img/export_xcode_project_folders.png deleted file mode 100644 index c281a1d5c..000000000 Binary files a/tutorials/export/img/export_xcode_project_folders.png and /dev/null differ diff --git a/tutorials/export/img/expselected.png b/tutorials/export/img/expselected.png index 4a8f47e44..b1960ef3b 100644 Binary files a/tutorials/export/img/expselected.png and b/tutorials/export/img/expselected.png differ diff --git a/tutorials/export/index.rst b/tutorials/export/index.rst index 0572450df..156f6b3dc 100644 --- a/tutorials/export/index.rst +++ b/tutorials/export/index.rst @@ -5,7 +5,6 @@ Export :maxdepth: 1 :name: toc-learn-workflow-export - exporting_basics exporting_projects exporting_pcks feature_tags