diff --git a/manual/get-started/create-a-project.md b/manual/get-started/create-a-project.md index 3bb1cafc..6107ad67 100644 --- a/manual/get-started/create-a-project.md +++ b/manual/get-started/create-a-project.md @@ -4,7 +4,7 @@ After you [get Flax](get-flax.md), navigate to the **Projects** page in the Flax Launcher. Here you can view your projects library. You can open existing projects by double clicking on them (the default engine version) and you can use the context menu (3 dots near its name label) to delete, unlink or view project location. -If it's your first time with Flax we recommend you click **Get Flax Samples** to download a collection of free projects that showcase various engine features and can be used as a base for your journey with Flax. Flax Samples are free and [available here](https://github.com/FlaxEngine/FlaxSamples). +If it's your first time with Flax we recommend you click **Get Flax Samples** to download a collection of free projects that showcase various engine features and can be used as a base for your journey with Flax. Flax Samples are free and the repository is [available here](https://github.com/FlaxEngine/FlaxSamples). You can also add an existing project from your drive using the **Add Project** button. Simply pick the folder that contains the project and it will appear in your project's library. @@ -12,18 +12,20 @@ To create a new project use the **New Project** button in the upper right corner ![New Flax Project Dialog](media/new-project-dialog.jpg) -Now it's time to [learn about Flax Editor](editor.md)... +Now it's time to [learn about the Flax Editor](editor.md)... -### Project from command line +## Project from command line -An alternative way to create a new project without using Flax Launcher is to run Flax Editor executable with `-new -project ` to create a new project inside a specified folder. +An alternative way to create a new project without using Flax Launcher is to run the Flax Editor executable with `-new -project ` to create a new project inside a specified folder. + +## Next Step
- -

Editor

-

Learn how to work with Flax Editor.

+ a sample image of the editor +

Editor

+

Learn how to work with Flax Editor.

diff --git a/manual/get-started/distribute-a-game.md b/manual/get-started/distribute-a-game.md index b6752d1e..df6bc0d1 100644 --- a/manual/get-started/distribute-a-game.md +++ b/manual/get-started/distribute-a-game.md @@ -18,18 +18,7 @@ Now to prepare the final build. Remember to use **Release** mode and remove any ## 4. Distribute your game -Every platform has it's own building process and custom output data format but in most cases simply grab the files from the *Output* directory. +Every platform has it's own building process and custom output data format but in most cases simply grab the files from the *Output* directory. How you distribute the game is up to you. ![Game Output](media/build-output.jpg) - - - - - - - - - - - diff --git a/manual/get-started/editor.md b/manual/get-started/editor.md index 823d10a4..51897ef8 100644 --- a/manual/get-started/editor.md +++ b/manual/get-started/editor.md @@ -12,40 +12,39 @@ Follow these instructions to further your game development!
- +a sample image of the Flax Editor interface

Interface

Learn about Flax Editor interface and using dockable windows.

- +a sample image of the Flax Editor interface with play in-editor enabled

Play in-editor

Test your game right in the editor.

- +a sample image of a Flax Editor window

Windows

See the detailed documentation about editor windows.

- +a sample image of the Flax Editor settings window

Game Settings

Learn about your game configuration and build settings.

- +a sample image of the Flax Editor Game cooker

Game Cooker

Cook your game files and produce ready to deploy files.

- +a sample image of using an advanced feature of the Flax Editor

Advanced

Learn some advanced stuff about using Flax Editor.

- diff --git a/manual/get-started/flax-for-godot-devs/index.md b/manual/get-started/flax-for-godot-devs/index.md index e583b0d7..a5c17628 100644 --- a/manual/get-started/flax-for-godot-devs/index.md +++ b/manual/get-started/flax-for-godot-devs/index.md @@ -22,13 +22,13 @@ Flax Editor and Godot Editor are very similar. You can see the color-coded, high This section contains the most common terms used in Godot and their Flax equivalents (or rough equivalents). Flax keywords link directly to more in-depth information inside the documentation. -| Godot | Flax | -|--------|--------| -| **Node** | [Actor](../scenes/actors.md) | -| **Script** | [Script](../../scripting/index.md) | -| **Scene** | [Scene Window](../../editor/windows/scene-window.md) | -| **Inspector** | [Properties Window](../../editor/windows/properties-window.md) | -| **FileSystem** | [Content Window](../../editor/windows/content-window.md) | +| Godot | Flax | +| -------------- | -------------------------------------------------------------- | +| **Node** | [Actor](../scenes/actors.md) | +| **Script** | [Script](../../scripting/index.md) | +| **Scene** | [Scene Window](../../editor/windows/scene-window.md) | +| **Inspector** | [Properties Window](../../editor/windows/properties-window.md) | +| **FileSystem** | [Content Window](../../editor/windows/content-window.md) | ## Project @@ -59,11 +59,12 @@ If you want to create multiple instances of compound object you can use [Prefabs ## Scripting > [!Tip] -> Scripting in C# and C\+\+ is feature-complete and production-ready in Flax (compared to Godot). Also, Visual Scripting offers far more tools and features. +> Scripting in C# and C\+\+ is fully feature-complete and production-ready in Flax (in contrast to Godot). Also, Visual Scripting offers far more tools and features. When it comes to game scripting, Flax supports Visual, C# and C\+\+ scripts (similar to Godot). The are some differences in C# API. In fact, the whole C# API is an open-source project and can be found [here](https://github.com/FlaxEngine/FlaxEngine). All contributions are welcome. * Godot + ```cs public class MyScript : Node { @@ -75,6 +76,7 @@ public class MyScript : Node ``` * Flax + ```cs public class MyScript : Script { diff --git a/manual/get-started/flax-for-ue4-devs/index.md b/manual/get-started/flax-for-ue4-devs/index.md index 133d704e..e79662de 100644 --- a/manual/get-started/flax-for-ue4-devs/index.md +++ b/manual/get-started/flax-for-ue4-devs/index.md @@ -37,11 +37,11 @@ This section contains the most common terms used in UE4 and their Flax equivalen ![Flax Project](../media/project-structure.png) -Flax projects structure is similar to UE4 projects. The editor uses **Cache** folder to keep temporary data. Also, **Content** folder works the same way as in Unreal (assets-only), while **Source** directory is used to keep all C# and C\+\+ scripts. +Flax projects structure is similar to UE4 projects. The editor uses the **Cache** folder to keep temporary data. Also, **Content** folder works the same way as in Unreal (assets-only), while **Source** directory is used to keep all C# and C\+\+ scripts. -Flax also generates a solution and project files for your game scripts. +Flax also generates a solution file and project files for your game scripts. -See [Flax projects structure](../project-structure.md) page to learn more about the projects in Flax Engine. +See the [Flax projects structure](../project-structure.md) page to learn more about the projects in Flax Engine. ## Assets @@ -49,27 +49,27 @@ Flax also uses binary asset files with extension `.flax` (instead of `.uasset`). Flax supports the most popular asset files formats (for 3D models and textures) so you can import your game content. -See [Assets](../assets/index.md) page to learn more about importing and using game assets. +See the [Assets](../assets/index.md) page to learn more about importing and using game assets. ## Scenes and Actors -Flax doesn't use components to build scene objects logic. We only use [Actors](../scenes/actors.md). Each Actor has its own type (e.g. point light, box collider) and a collection of attached scripts. This means, in Flax the scene object hierarchy is created with Actors. +Flax doesn't use components to build scene objects logic. We only use [Actors](../scenes/actors.md). Each Actor has its own type (e.g. point light, box collider) and a collection of attached scripts. This mean that in Flax, the scene object hierarchy is created with Actors. However, you can still use the entity-component design with your scripts because every actor can have scripts. You can use `GetChild()`/`GetScript()` methods in your scripts to access the other objects. In Flax, Scene object is also an Actor so you can access it like any other Actor. This means that Scenes can have their own scripts and be transformed like other objects. -Also, multiple actors can have the same name and you can also move assets whenever you like because Flax uses unique IDs of the objects for tracking. This unlocks your development speed. We don't want to constrain your development to some ancient-design but to allow you to iterate faster and create beautiful games even easier. +Also, multiple actors can have the same name and you can also move assets whenever you like because Flax uses unique IDs of the objects for tracking. This unlocks your development speed. We don't want to constrain your development to some ancient design but to allow you to iterate faster and create beautiful games even easier. ## Scripting When it comes to game scripting, there is a significant difference between Unreal and Flax. -Firstly, we support both C\+\+ and C# languages to write game code and Visual Scripting as an addition. -Using Visual Scripts or C# helps with rapid game development and simplifies the development while writing parts of the gameplay in C\+\+ can benefit the performance. +Firstly, we support both C\+\+ and C# languages to write game code, as well as Visual Scripting. +Using Visual Scripts or C# helps with rapid game development and simplifies development while writing parts of the gameplay in C\+\+ can benefit performance. The Flax Engine core itself is written in C++, while Flax Editor is mostly written in C#. -You can create C# and C\+\+ files with script classes that provide a gameplay logic. Then scripts can be attached to the actors and used in a game. Our scripting C# API is an open-source project and can be found [here](https://github.com/FlaxEngine/FlaxEngine). All contributions are welcome. +You can create C# and C\+\+ files with script classes that provide gameplay logic. Then, scripts can be attached to the actors and used in a game. Our scripting C# API is an open-source project and can be found [here](https://github.com/FlaxEngine/FlaxEngine). All contributions are welcome. Here is an example script that has been written for Unreal and Flax which prints the next number every frame. diff --git a/manual/get-started/flax-for-unity-devs/index.md b/manual/get-started/flax-for-unity-devs/index.md index b1c946c5..4cda7086 100644 --- a/manual/get-started/flax-for-unity-devs/index.md +++ b/manual/get-started/flax-for-unity-devs/index.md @@ -2,7 +2,7 @@ ![Unity to Flax](media/title.jpg) -Flax and Unity have many similarities (C# scripting, physics engine) and share many concepts, however there are a few differences. This page helps Unity Engine developers to translate their existing Unity experience into the world of Flax Engine. +Flax and Unity have many similarities (such as C# scripting, physics engine) and share many concepts, however there are a few differences. This page helps Unity Engine developers to translate their existing Unity experience into the world of Flax Engine. > [!Warning] > Warning! You will love the direction and development speed of this engine! @@ -39,11 +39,11 @@ This section contains the most common terms used in Unity and their Flax equival ![Flax Project](../media/project-structure.png) -Flax projects structure is similar to Unity projects. Instead of **Library** folder, editor uses **Cache** folder. Also **Assets** folder from Unity is splitted into two separate parts: **Content** and **Source**. All C# script files are located in the source directory so there is less mess with assets and scripts. +Flax projects structure is similar to Unity projects. Instead of a **Library** folder, editor uses the **Cache** folder. Also the **Assets** folder from Unity is split into two separate parts: **Content** and **Source**. All C# script files are located in the source directory so there is less mess with assets and scripts. -Flax also generates a solution and project files for your game C# scripts. +Flax also generates a solution file and project files for your game C# scripts. -See [Flax projects structure](../project-structure.md) page to learn more about the projects in Flax Engine. +See the [Flax projects structure](../project-structure.md) page to learn more about the projects in Flax Engine. ## Assets @@ -51,11 +51,11 @@ Flax doesn't use `.meta` files. Instead, every asset contains all required metad Flax supports the most popular asset file formats (for 3D models and textures) so you can import your game content. -See [Assets](../assets/index.md) page to learn more about importing and using game assets. +See the [Assets](../assets/index.md) page to learn more about importing and using game assets. ## GameObject vs Actor -Flax doesn't use components to build scene objects logic. We use [Actors](../scenes/actors.md). Each Actor has its own type (e.g. point light, box collider) and a collection of attached scripts. Also there is no *TransformComponent* but Actors have built-in transformation (less objects, more optimized design for bigger games). This means, in Flax the scene objects hierarchy is created with Actors, not by Transforms like in Unity. +Flax doesn't use components to build scene objects logic. We use [Actors](../scenes/actors.md). Each Actor has its own type (e.g. point light, box collider) and a collection of attached scripts. Also there is no *TransformComponent*, but Actors have built-in transformation (less objects, more optimized design for bigger games). This means that in Flax, the scene object hierarchy is created with Actors, not by Transforms like in Unity. However, you can still use the entity-component design with your scripts because every actor can have scripts like in Unity. Just instead of using `GetComponent()` in your scripts, write `GetChild()`/`GetScript()`. @@ -67,13 +67,14 @@ In Flax, a Scene object is also an Actor so you can access it like any other Act ## MonoBehaviour vs Script -When it comes to game scripting, Unity and Flax are very similar. There are some differences in C# API (Flax has bigger math library, is more performance-oriented and uses new C# 11 via .NET 7). In fact, the whole C# editor and C++ engine including scripting API is open and can be found [here](https://github.com/FlaxEngine/FlaxEngine). All contributions are welcome. +When it comes to game scripting, Unity and Flax are very similar. There are some differences in C# API (Flax has a bigger math library, is more performance-oriented and uses new C# 11 via .NET 7). In fact, the whole C# editor and C++ engine including scripting API is open and can be found [here](https://github.com/FlaxEngine/FlaxEngine). All contributions are welcome. -Also, Flax support native **[C++](../../scripting/cpp/index.md)** scripting and **[Visual Scripting](../../scripting/visual/index.md)** as a built-in feature. We don't want to limit our developers to just one programming language for the game development as using C\+\+ and Visual Scripting together with C# can benefit. +Also, Flax support native **[C++](../../scripting/cpp/index.md)** scripting and **[Visual Scripting](../../scripting/visual/index.md)** as built-in features. We don't want to limit our developers to just one programming language for game development as using C\+\+ and Visual Scripting together with C# can be beneficial. -If you write C# scripts simply replace `MonoBehaviour` with `Script` as it makes more sense (and is shorter to write). +If you write C# scripts simply replace `MonoBehaviour` with `Script`. It makes more sense (and is shorter to write). * Unity + ```cs public class MyScript : MonoBehaviour { @@ -85,6 +86,7 @@ public class MyScript : MonoBehaviour ``` * Flax + ```cs public class MyScript : Script { @@ -100,6 +102,7 @@ See [Scripting](../../scripting/index.md) documentation to learn more about C# s ## Cool things in the C# API If you're a programmer here is a list of new cool things in Flax C# API that may be useful: + * You can use the latest .NET 7 and new C# 11 * Engine and Editor are open with full source code ([link](https://github.com/FlaxEngine/FlaxEngine)) * You can edit all input settings at runtime ([link](https://docs.flaxengine.com/api/FlaxEngine.Input.html)) diff --git a/manual/get-started/get-flax.md b/manual/get-started/get-flax.md index 207caeaf..c7c1c354 100644 --- a/manual/get-started/get-flax.md +++ b/manual/get-started/get-flax.md @@ -1,14 +1,16 @@ -# Installing The Flax Launcher +# Get Flax + +## Installing The Flax Launcher ![Installing Flax](media/installing-flax.png) -To get Flax: visit the [download page](https://flaxengine.com/download) to access Flax Launcher installer. +To get Flax: visit the [download page](https://flaxengine.com/download) to access the Flax Launcher installer. -After downloading the Flax Launcher, start the installer and follow the installation wizard steps. In order to install Flax you will be asked to accept the *EULA* that defines the engine licensing terms. You can learn more about legal regulations [here](https://flaxengine.com/licensing). +After downloading the Flax Launcher installer, open it and follow the installation wizard steps. In order to install Flax you will be asked to accept the *EULA* that defines the engine licensing terms. You can learn more about legal regulations [here](https://flaxengine.com/licensing). To learn more about the software and hardware requirements please visit [this page](requirements.md). -# Running The Flax Launcher +## Running The Flax Launcher To install the Flax Engine: Run Flax (By default Flax creates a shortcut on the desktop.) The next step is to **log in** to the Flax Launcher. @@ -17,15 +19,15 @@ The next step is to **log in** to the Flax Launcher. ![Login To Flax Launcher](media/flax-launcher-login.png) -# Installing The Flax Engine +## Installing The Flax Engine -After the login screen go to the **Engine** page. This is where you can download and manage engine installations. You can have multiple different versions of Flax installed on your computer. Here you can add new updates and download additional packages. +After the login screen go to the **Engine** page. This is where you can download and manage engine installations. You can have multiple different versions of Flax installed on your computer. Here you can add new updates and download additional packages. ![Open Launcher](media/launcher-engine.png) To install Flax use the **Add Version** button to select the Engine version and target installation destination folder. Here is where you can pick a target platform to install the packages required to build and deploy your game for a given platform. Finally, you can press the **Install** button to download the Flax binaries. -By using *Version* dropdown menu you can pick the engine version to install. By default it selects the latest version but you can change it to get older engine version (eg. that your team is using). Also, it allows to download and use daily builds from Github master branch (named `master branch (daily)`). You will be able to download updates every day and enjoy frequent features and bug fixes. +By using the *Version* dropdown menu you can pick the engine version to install. By default it selects the latest version but you can change it to get an older engine version (eg. that your team is using). Also, it allows you to download and use daily builds from Github master branch (named `master branch (daily)`). With this option, you can download updates every day and enjoy frequent features and bug fixes. ![Download Flax](media/download-flax.png) diff --git a/manual/get-started/glossary.md b/manual/get-started/glossary.md index 530cec97..a4f498f1 100644 --- a/manual/get-started/glossary.md +++ b/manual/get-started/glossary.md @@ -4,17 +4,14 @@ This page lists and describes the most common terms used in the Flax Engine. For ## Glossary -| Term | Description | -|--------|--------| -| **Project** | A self-contained directory that holds all the game files used during development. See [Flax projects structure](project-structure.md) page to learn more about it. | -| **Actor** | Actors are objects that can be placed in your level. Every [Actor](https://docs.flaxengine.com/api/FlaxEngine.Actor.html) is linked to the parent actor (except the Scene actors which are the root of the hierarchy) and can have child actors (tree hierarchy). Actors have their own 3D transformation (translation, rotation and scale) and inherit the parent actor transformation. You can attach C# scripts to actors and spawn/destroy them at runtime. See [Actors](scenes/actors.md) page to learn more about it. | -| **C# Script** | A text document that contains the source code of the custom [Script](https://docs.flaxengine.com/api/FlaxEngine.Script.html) class implementation written in [C# language](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/). | -| **Scene Objects** | This term refers to both **Actors** and **Scripts** as they can be instantiated in your game and appear in the scene. Every scene object can be created and destroyed at runtime and is identified by the [Object.ID](https://docs.flaxengine.com/api/FlaxEngine.Object.html#FlaxEngine_Object_ID). | -| **Visject** | A visual surface graph that contains nodes connected to a network. For instance, it is used by the [Materials Editor](../graphics/materials/material-editor/index.md) to create material shaders. *Visject* was the name of the now deprecated visual scripting interface that was featured in a previous version of the engine. It has been replaced by C# scripts. | -| **Visual Script** | A built-in binary asset that contains a graph with visual script nodes, properties and metadata. This graph is processed and executed at runtime by the engine. It is used for Visual Scripting, a non-code based method for programming game logic. | -| **Prefab** | An asset in json format that contains prefab data. It holds serialized data of the prefab objects collection. Prefabs can be instantiated to reuse the objects within an archetype. | -| **Prefab Instance** | Spawned prefab objects can contain links to prefab assets and prefab objects. They can be modified at runtime and can contain more than one actor (whole actors tree, including nested prefabs). | -| **Flax** | ![Flax Icon](../../media/Web_Logo_64.png) | - - - +| Term | Description | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Project** | A self-contained directory that holds all the game files used during development. See [Flax projects structure](project-structure.md) page to learn more about it. | +| **Actor** | Actors are objects that can be placed in your level. Every [Actor](https://docs.flaxengine.com/api/FlaxEngine.Actor.html) is linked to the parent actor (except the Scene actors which are the root of the hierarchy) and can have child actors (tree hierarchy). Actors have their own 3D transformation (translation, rotation and scale) and inherit the parent actor transformation. You can attach C# scripts to actors and spawn/destroy them at runtime. See [Actors](scenes/actors.md) page to learn more about it. | +| **C# Script** | A text document that contains the source code of a custom [Script](https://docs.flaxengine.com/api/FlaxEngine.Script.html) class implementation written in [C# language](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/). | +| **Scene Objects** | This term refers to both **Actors** and **Scripts** as they can be instantiated in your game and appear in the scene. Every scene object can be created and destroyed at runtime and is identified by the [Object.ID](https://docs.flaxengine.com/api/FlaxEngine.Object.html#FlaxEngine_Object_ID). | +| **Visject** | A visual surface graph that contains nodes connected to a network. For instance, it is used by the [Materials Editor](../graphics/materials/material-editor/index.md) to create material shaders. *Visject* was the name of the now deprecated visual scripting interface that was featured in a previous version of the engine. It has been replaced by C# scripts and visual scripts. | +| **Visual Script** | A built-in binary asset that contains a graph with visual script nodes, properties and metadata. This graph is processed and executed at runtime by the engine. It is used for Visual Scripting, a non-code based method for programming game logic. | +| **Prefab** | An asset in json format that contains prefab data. It holds serialized data of the prefab objects collection. Prefabs can be instantiated to reuse the objects within an archetype. | +| **Prefab Instance** | Spawned prefab objects can contain links to prefab assets and prefab objects. They can be modified at runtime and can contain more than one actor (whole actors tree, including nested prefabs). | +| **Flax** | ![Flax Icon](../../media/Web_Logo_64.png) | diff --git a/manual/get-started/index.md b/manual/get-started/index.md index 2e8cde0c..fcd8feb8 100644 --- a/manual/get-started/index.md +++ b/manual/get-started/index.md @@ -11,7 +11,7 @@ Welcome to the Official Flax Engine Manual! In this section you will find everyt

Get Flax

-

Start using the Flax.

+

Start using the Flax Engine.

@@ -23,7 +23,7 @@ Welcome to the Official Flax Engine Manual! In this section you will find everyt

Samples and Tutorials

-

Collection of sample projects and tutorials.

+

A collection of sample projects and tutorials.

@@ -93,4 +93,3 @@ Welcome to the Official Flax Engine Manual! In this section you will find everyt - diff --git a/manual/get-started/linux.md b/manual/get-started/linux.md index d5d79b28..8cc98f01 100644 --- a/manual/get-started/linux.md +++ b/manual/get-started/linux.md @@ -4,7 +4,7 @@ ## Download -You can get Flax from your [Download](https://flaxengine.com/download/) page or compile it manually from the official [source code repository](https://github.com/FlaxEngine/FlaxEngine). +You can get Flax from the [Download](https://flaxengine.com/download/) page or compile it manually from the official [source code repository](https://github.com/FlaxEngine/FlaxEngine). The Editor executable is in folder `Binaries/Editor/Linux/Development/FlaxEditor` (you can use also Debug or Release configuration if you want). @@ -12,53 +12,54 @@ The Editor executable is in folder `Binaries/Editor/Linux/Development/FlaxEditor For developers using Flax Editor on Linux platforms the requirements are: -| | Recommended | -|-------|-------|-------| -| Tested operating systems | Ubuntu 22 LTS | -| Processor | Quad-core or more, 2 GHz or faster | -| RAM | 4 GB or more | -| Hard drive space | 1 GB minimum | -| GPU | **Vulkan required** | +| | Recommended | +| ------------------------ | ---------------------------------- | +| Tested operating systems | Ubuntu 22 LTS | +| Processor | Quad-core or more, 2 GHz or faster | +| RAM | 4 GB or more | +| Hard drive space | 1 GB minimum | +| GPU | **Vulkan required** | Flax Editor needs: * `curl` lib on the system: -``` +```bash apt-get install -y curl libcurl4-gnutls-dev ``` -* `.Net 7 SDK` ([https://dotnet.microsoft.com/en-us/download/dotnet/7.0](https://dotnet.microsoft.com/en-us/download/dotnet/7.0)). Setup can be verified with: +* `.Net 7 SDK` ([https://dotnet.microsoft.com/en-us/download/dotnet/7.0](https://dotnet.microsoft.com/en-us/download/dotnet/7.0)). Setup can be verified with: -``` +```bash dotnet --version ``` -*On Fedora you might need additional fix for invalid lib linkage: `sudo ln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl-gnutls.so.4`. +*On Fedora you might need an additional fix for invalid lib linkage: `sudo ln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl-gnutls.so.4`. ## GPU Drivers Please ensure to have the latest GPU drivers installed. Helper links: -- [NVIDIA drivers](http://www.nvidia.com/Download/index.aspx?lang=en-us/) -- [AMD drivers](http://support.amd.com/en-us/download) + +* [NVIDIA drivers](http://www.nvidia.com/Download/index.aspx?lang=en-us/) +* [AMD drivers](http://support.amd.com/en-us/download) For information about supported platforms, see [Platforms](../platforms/index.md). ## Command line access -Ig you're using laptop with integrated GPU and you want Flax to run on dedicated GPU for more power you can use command line switches to instruct engine to select a desire GPU based on the manufacturer: +If you're using a laptop with an integrated GPU and you want Flax to run on a dedicated GPU for more power you can use command line switches to instruct the engine to select a desired GPU based on the manufacturer: -| Option | Description | -|-------|-------| +| Option | Description | +| --------- | ------------------- | | `-nvidia` | Selects Nvidia GPU. | -| `-amd` | Selects AMD GPU. | -| `-intel` | Selects Intel GPU. | +| `-amd` | Selects AMD GPU. | +| `-intel` | Selects Intel GPU. | To learn more about command line switches see [this documentation page](../editor/advanced/command-line-access.md). Example command line to run Editor with custom options: -``` +```bash ./FlaxEditor -project "" -std -nvidia ``` diff --git a/manual/get-started/mac.md b/manual/get-started/mac.md index 9dafe74a..24e044c0 100644 --- a/manual/get-started/mac.md +++ b/manual/get-started/mac.md @@ -6,14 +6,14 @@ To get Flax for Mac: visit the [download page](https://flaxengine.com/download). -After downloading the `FlaxEditor.dmg` file, open a disk image and run the Flax Editor application. Also, you can install it on your drive by dragging it into the Application. +After downloading the `FlaxEditor.dmg` file, open a disk image and run the Flax Editor application. Also, you can install it on your drive by dragging it into Applications. ## Requirements For developers using Flax Editor on Mac platforms the requirements are: | | Recommended | -|-------|-------|-------| +|-------|-------| | Minimum supported version | **macOS 11.7 or higher** | | Processor | **arm64** (M1/M2/M3) | | RAM | 4 GB or more | @@ -21,7 +21,7 @@ For developers using Flax Editor on Mac platforms the requirements are: ## Sample projects -To help you start using Flax pick the latest Flax Samples from [https://github.com/FlaxEngine/FlaxSamples](https://github.com/FlaxEngine/FlaxSamples). This collection contains various example projects that showcase the engine features and can be used as a foundation for your future Flax projects. Have fun! +To help you start using Flax pick up the latest Flax Samples from [https://github.com/FlaxEngine/FlaxSamples](https://github.com/FlaxEngine/FlaxSamples). This collection contains various example projects that showcase the engine features and can be used as a foundation for your future Flax projects. Have fun! ## New project diff --git a/manual/get-started/prefabs/creating-prefabs.md b/manual/get-started/prefabs/creating-prefabs.md index 387a0256..14ab9209 100644 --- a/manual/get-started/prefabs/creating-prefabs.md +++ b/manual/get-started/prefabs/creating-prefabs.md @@ -1,6 +1,6 @@ # HOWTO: Create prefab -In this tutorial, you will learn how to create a new prefab asset. Follow the instructions to see how to do it. In Flax, there are 3 main ways to create a prefab asset. Use the one that fits your workflow the most. +In this tutorial, you will learn how to create a new prefab asset. Follow the instructions to see how to do it. In Flax, there are 3 main ways to create a prefab asset. Use the one that best fits your workflow. ## New Prefab @@ -10,7 +10,7 @@ The easiest option to create an empty prefab is by using the *Content Window*. * ## Drag and Drop -Another way to create a new prefab asset is by using the existing actors as an archetype. To do this simply select the actor on a scene that you want to turn into a prefab and drag it into the *Content Window*. Specify its name and hit enter to confirm. Then double-click and edit your new asset. +Another way to create a new prefab asset is by using existing actors as an archetype. To do this simply select the actor on a scene that you want to turn into a prefab and drag it into the *Content Window*. Specify its name and hit enter to confirm. Then double-click and edit your new asset. ![New Prefab Asset](media/new-prefab2.png) @@ -18,7 +18,8 @@ Another way to create a new prefab asset is by using the existing actors as an a The last way to create a new prefab is by using an editor script that creates a new prefab asset using C# or C++. -# [C#](#tab/code-csharp) +### [C#](#tab/code-csharp) + ```cs // Setup prefab objects var myLight = new PointLight @@ -34,7 +35,9 @@ new Decal // Create a prefab PrefabManager.CreatePrefab(myLight, StringUtils.CombinePaths(Globals.ProjectContentFolder, "myPrefab.prefab"), false); ``` -# [C++](#tab/code-cpp) + +### [C++](#tab/code-cpp) + ```cpp // Setup prefab objects PointLight* myLight = New(); @@ -48,4 +51,5 @@ myDecal->SetParent(myLight); // Create a prefab PrefabManager::CreatePrefab(myLight, Globals::ProjectContentFolder / TEXT("myPrefab.prefab"), false); ``` + *** diff --git a/manual/get-started/prefabs/index.md b/manual/get-started/prefabs/index.md index dd07013d..e4da7e92 100644 --- a/manual/get-started/prefabs/index.md +++ b/manual/get-started/prefabs/index.md @@ -2,11 +2,11 @@ ![Prefabs](media/nested_prefabs.gif) -A **Prefab** is an asset that contains serialized **actors hierarchy including scripts** and data. The prefab acts like a template or an archetype which you can spawn in the scene. Any edits made to a prefab asset are immediately reflected in all instances produced from it, but you can also override components and settings for each instance individually. +A **Prefab** is an asset that contains serialized **actors hierarchy, including scripts and data**. The prefab acts like a template or an archetype which you can spawn in the scene. Any edits made to a prefab asset are immediately reflected in all instances produced from it, but you can also override components and settings for each instance individually. Flax supports creating **Nested Prefabs** which means you can use objects from prefabs inside other prefabs. This helps with creating advanced gameplay content. -Creating and applying changes to prefabs is only supported in the Editor. However, spawning prefabs is dedicated to being used at runtime right in your game. Use this documentation section to learn more about creating and using prefabs. +Creating and applying changes to prefabs is only supported in the Editor. However, spawning prefabs can be done at game runtime, and can be done using game scripts. Use this documentation section to learn more about creating and using prefabs. ## Topics @@ -51,4 +51,3 @@ The **View Changes** button shows a popup with any modified actor and scripts pr You can also see per-property modifications applied to the prefab instance. The Editor shows them by highlighting the label of the changed property as shown in the picture below. You can right click on it and revert the changes applied to this property (with undo support). ![Prefab Instance Diff Popup](media/prefab-instance-property-diff.png) - diff --git a/manual/get-started/prefabs/prefab-editor.md b/manual/get-started/prefabs/prefab-editor.md index 2106a139..f1811928 100644 --- a/manual/get-started/prefabs/prefab-editor.md +++ b/manual/get-started/prefabs/prefab-editor.md @@ -29,27 +29,27 @@ The prefab window UI consists of a toolstrip, hierarchy panel, viewport, and pro 1. Toolstrip 2. Hierarchy Panel -2. Viewport -3. Properties Panel +3. Viewport +4. Properties Panel ### Toolstrip The following table lists the options in the toolstrip and what they do. -| Icon | Description | -|--------|--------| -| ![icon](media/prefab-editor-ui-toolstrip-1.png) | Shows and selects the asset in the *Content Window*. | -| ![icon](media/prefab-editor-ui-toolstrip-2.png) | Saves the prefab to a file and updates the existing prefab instances. | -| ![icon](media/prefab-editor-ui-toolstrip-3.png) | Reverts the last scene modification action (Ctrl+Z). | -| ![icon](media/prefab-editor-ui-toolstrip-4.png) | Replays the last scene modification action (Ctrl+Y). | -| ![icon](media/prefab-editor-ui-toolstrip-5.png) | Changes Gizmo tool mode to *Translate* (1). | -| ![icon](media/prefab-editor-ui-toolstrip-6.png) | Changes Gizmo tool mode to *Rotate* (2) | -| ![icon](media/prefab-editor-ui-toolstrip-7.png) | Changes Gizmo tool mode to *Scale* (3) | +| Icon | Description | +| ----------------------------------------------- | ---------------------------------------------------------------------------- | +| ![icon](media/prefab-editor-ui-toolstrip-1.png) | Shows and selects the asset in the *Content Window*. | +| ![icon](media/prefab-editor-ui-toolstrip-2.png) | Saves the prefab to a file and updates the existing prefab instances. | +| ![icon](media/prefab-editor-ui-toolstrip-3.png) | Reverts the last scene modification action (Ctrl+Z). | +| ![icon](media/prefab-editor-ui-toolstrip-4.png) | Replays the last scene modification action (Ctrl+Y). | +| ![icon](media/prefab-editor-ui-toolstrip-5.png) | Changes Gizmo tool mode to *Translate* (1). | +| ![icon](media/prefab-editor-ui-toolstrip-6.png) | Changes Gizmo tool mode to *Rotate* (2) | +| ![icon](media/prefab-editor-ui-toolstrip-7.png) | Changes Gizmo tool mode to *Scale* (3) | | ![icon](media/prefab-editor-ui-toolstrip-8.png) | Live changes preview (applies prefab changes on modification automatically). | ### Hierarchy Panel -The Hierarchy Panel shows a tree control with the full hierarchy of the prefab objects. Use it to add, remove or move actors. It works similar to the editor [Scene Window](../../editor/windows/scene-window.md). +The Hierarchy Panel shows a tree control with the full hierarchy of the prefab objects. Use it to add, remove or move actors. It works similarly to the editor [Scene Window](../../editor/windows/scene-window.md). Every Actor is represented by a tree node (named after the actor). You can expand and collapse the scene hierarchy by using the arrow icons on the left of the node names. To select one or more nodes use LMB, Ctrl + LMB or Shift + LMB to select range of nodes. @@ -57,11 +57,10 @@ If you select and drag the actor or selection of actors you can reorder or repar ### Viewport -The viewport panel shows the preview of the prefab. You can navigate in the viewport by using the **RMB + Arrows/WSAD**. It works similar to the editor [Scene Window](../../editor/windows/viewport.md). Use the **LMB** to select the objects. +The viewport panel shows the preview of the prefab. You can navigate in the viewport by using the **RMB + Arrows/WSAD**. It works similarly to the [Scene Window](../../editor/windows/viewport.md). Use the **LMB** to select the objects. The upper left and upper right corners of the viewport contain widget buttons. Use them to adjust the view and configure the tool. ### Properties panel This panel shows the properties of the selected objects. If you select any object from the prefab you will be able to modify its properties using this panel. It supports full undo/redo actions and uses the Custom Editors pipeline to generate the UI. - diff --git a/manual/get-started/project-structure.md b/manual/get-started/project-structure.md index fcdf5de8..15c54ddf 100644 --- a/manual/get-started/project-structure.md +++ b/manual/get-started/project-structure.md @@ -1,4 +1,4 @@ -# Flax projects structure +# Flax Project Structure ![Project Structure](media/project-structure.png) @@ -33,19 +33,19 @@ To learn more about project file properties see the [reference](https://docs.fla ## Folders structure * **<root>** - * **Binaries** - compiled game scripts binaries - * **Cache** - editor local cache folder, buid cache, used for thumbnails, game cooker cache and other temporary files - * **Content** - contains all the game assets (models, textures, settings, etc.) - * **SceneData** - dedicated directory for the [private scene assets](scenes/scene-data.md) - * **Shaders** - auto-improted shaders assets (from source) - * **GameSettings.json** - fixed location for the game settings asset - * **Logs** - contains editor log files (and crash dumps) - * **Screenshots** - contains screenshot files (`.png` format) you took in editor (use the `F12` key) - * **Source** - contains all game script files (C++ and C# scripts) organized into modules - * **Shaders** - shader source files - * **<GameModule>** - subfolder with game module code - * **<GameModule>.Build.cs** - game module build script - * **GameTarget.Build.cs** - game target build configuration script - * **GameEditorTarget.Build.cs** - editor target build configuration script - * **<project_name>.sln** - project scripts solution file, open it with Visual Studio - * **<project_name>.flaxproj** - project description and metadata file (used by editor and launcher) + * **Binaries** - compiled game scripts binaries + * **Cache** - editor local cache folder, build cache, used for thumbnails, game cooker cache and other temporary files + * **Content** - contains all the game assets (models, textures, settings, etc.) + * **SceneData** - dedicated directory for the [private scene assets](scenes/scene-data.md) + * **Shaders** - auto-imported shaders assets (from source) + * **GameSettings.json** - fixed location for the game settings asset + * **Logs** - contains editor log files (and crash dumps) + * **Screenshots** - contains screenshot files (`.png` format) you took in editor (use the `F12` key) + * **Source** - contains all game script files (C++ and C# scripts) organized into modules + * **Shaders** - shader source files + * **<GameModule>** - subfolder with game module code + * **<GameModule>.Build.cs** - game module build script + * **GameTarget.Build.cs** - game target build configuration script + * **GameEditorTarget.Build.cs** - editor target build configuration script + * **<project_name>.sln** - project scripts solution file, open it with Visual Studio + * **<project_name>.flaxproj** - project description and metadata file (used by editor and launcher) diff --git a/manual/get-started/requirements.md b/manual/get-started/requirements.md index 62813dad..89b5eb7d 100644 --- a/manual/get-started/requirements.md +++ b/manual/get-started/requirements.md @@ -2,7 +2,7 @@ Flax Engine has specific hardware and software requirements for running the game or developing with the engine. -### Hardware Requirements +## Windows Hardware Requirements | | Minimum | Recommended | |-------|-------|-------| @@ -12,11 +12,11 @@ Flax Engine has specific hardware and software requirements for running the game | Hard drive space | 1 GB | 5 GB | | GPU | 512MB, DirectX 10+ compatible GPU | 2 GB, DirectX 11 | -## Linux +## Linux Hardware Requirements For developers using Flax Editor on Linux platforms the requirements are [here](linux.md). -## Mac +## Mac Hardware Requirements For developers using Flax Editor on Mac platforms the requirements are [here](mac.md). @@ -35,6 +35,7 @@ You can download the free community edition [here](https://www.visualstudio.com/ ## GPU Drivers Please ensure that you have the latest GPU drivers installed: + - [NVIDIA drivers](https://www.nvidia.com/Download/index.aspx) - [AMD drivers](https://www.amd.com/support) diff --git a/manual/get-started/scenes/actors.md b/manual/get-started/scenes/actors.md index 51314f3b..3aecbe3b 100644 --- a/manual/get-started/scenes/actors.md +++ b/manual/get-started/scenes/actors.md @@ -2,9 +2,9 @@ ![Actors](media/actors.png) -**Actors** are the essential objects of the scenes. You can place them into a level to build game environment, setup a lighting and create a gameplay. Every [Actor](https://docs.flaxengine.com/api/FlaxEngine.Actor.html) is linked to the parent actor (except the Scene actors which are the root of the hierarchy) and can have child actors (tree hierarchy). Actors have their own 3D transformation (translation, rotation and scale) and inherit the parent actor transformation. You can attach C# scripts to the actors and spawn/destroy them at runtime. +**Actors** are the essential objects of a scene. You can place them into a scene to build a game environment, setup lighting and create gameplay. Every [Actor](https://docs.flaxengine.com/api/FlaxEngine.Actor.html) is linked to the parent actor (except the Scene actors which are the root of the hierarchy) and can have child actors (tree hierarchy). Actors have their own 3D transformation (translation, rotation and scale) and inherit the parent actor transformation. You can attach C# scripts to the actors and spawn/destroy them at runtime. -This documentation page contains links to all tutorials related to working with actors and references to all actor types. +This documentation page contains links to all tutorials related to working with actors and references to actor types. ## Using actors diff --git a/manual/get-started/scenes/index.md b/manual/get-started/scenes/index.md index f78e82f0..452265f4 100644 --- a/manual/get-started/scenes/index.md +++ b/manual/get-started/scenes/index.md @@ -1,18 +1,18 @@ # Scenes -**Scenes** are levels of your game that are composed of [Actors](actors.md). Single scene is an asset stored in a *json* format and contains serialized scene objects attached to it (actors, scripts, etc.). +**Scenes** are levels of your game that are composed of [Actors](actors.md). A single scene is an asset stored in a *json* format and contains serialized scene objects attached to it (actors, scripts, etc.). -Flax supports dynamic loading and unloading multiple scenes. You can open and edit many scenes in the editor at the same time. +Flax supports dynamically loading and unloading multiple scenes. You can open and edit many scenes in the editor at the same time. ## Create a scene -You can create scenes like any other asset. Use the *Content* window. Right-click and choose option **New -> Scene**. Then specify its name and hit *Enter* to confirm. +You can create scenes like any other asset. Use the *Content* window. Right-click and choose option **New -> Scene**. Then, specify its name and hit *Enter* to confirm. ![New Scene](media/new-scene.jpg) ## Open a scene -To open a scene, simply double-click on it. You can also drag and drop it to the editor viewport to load it additively (won't unload the existing scenes). +To open a scene, simply double-click on it. You can also drag and drop it to the editor viewport to load it additively (this won't unload the existing scene(s)). ![Open Scene](media/open-scene.jpg) @@ -20,8 +20,8 @@ To open a scene, simply double-click on it. You can also drag and drop it to the ![Scene Properties](media/scene-properties.jpg) -You can select a **Scene** actor like the other scene objects using the *Scene* window and edit its properties with the *Properties* window. You can change static flags for all scene objects at once or transform whole scene at once. -Also scene actor contains options for lightmaps baking for this scene. +You can select a **Scene** actor like other scene objects using the *Scene* window and edit its properties with the *Properties* window. You can change static flags for all scene objects at once or transform whole scene at once. +The scene actor properties view also contains options for lightmap baking for the selected scene. ## In this section diff --git a/manual/get-started/scenes/placing-actors.md b/manual/get-started/scenes/placing-actors.md index c84211ba..ed04245e 100644 --- a/manual/get-started/scenes/placing-actors.md +++ b/manual/get-started/scenes/placing-actors.md @@ -6,8 +6,8 @@ After you create a scene, you need to add actors to it and build your game level ![Toolbox Window](media/toolbox-win.jpg) -The easiest method to add a new actor is to use a *Toolbox* window in *Add Mode* active. -Simply select the actor type category and drag and drop it into your scene. +The easiest method to add a new actor is to use a *Toolbox* window with *Add Mode* active. +Simply drag and drop the desired actor type object into your scene. ![Toolbox Spawn Actor](media/toolbox-spawn.jpg) @@ -17,15 +17,17 @@ You can also add new actors using a Context Menu in a *Scene* window. Right-clic ![Scene Window Spawn Actor](media/context-menu-spawning.jpg) -## Placing actors using Drag and Drop +## Placing actors from the Content Browser using Drag and Drop -The fastest way to add new model into the level is by using the *drag and drop* feature. In that way you can add models, prefabs, mesh colliders and even scenes. +The fastest way to add a new model into a scene is by using the *drag and drop* feature. In this way you can add models, prefabs, and mesh colliders. + +You can also drag and drop additional scenes into the active level to render them additively (see [Open a Scene](index.md#open-a-scene)) ![Drag and Drop Spawn Model](media/drag-drop-spawn-model.jpg) ## Placing actors from code -You can also spawn new actors from C# code. To learn more about it see the [Scripting](../../scripting/index.md) documentation. +You can also spawn new actors from code. To learn more about it see the [Scripting](../../scripting/index.md) documentation. ```cs var light = new PointLight(); diff --git a/manual/get-started/scenes/scene-data.md b/manual/get-started/scenes/scene-data.md index 4a9d387b..014073f6 100644 --- a/manual/get-started/scenes/scene-data.md +++ b/manual/get-started/scenes/scene-data.md @@ -1,11 +1,11 @@ # Scene Data Storage -**Scene Data Storage** is a dedicated folder located in a Content directory that is used to store the scene private asset. Each scene uses its own subdirectory scene data to keep its own assets. When you bake the lightmaps or environment probes, they are stored right in the scene data directory. You can move these assets and reuse them in other parts of the game if you need. For instance, environment probe cube texture can be used for a skybox. +**Scene Data Storage** is a dedicated folder located in a Content directory that is used to store the private scene asset. Each scene uses its own subdirectory scene data to keep its own assets. When you bake the lightmaps or environment probes, they are stored right in the scene data directory. You can move these assets and reuse them in other parts of the game if you need. For instance, an environment probe cube texture can be used for a skybox. ## Storage * Content - * SceneData +* SceneData * <scene_name> * **EnvProbes** - directory with baked environment probes cube textures * **Lightmaps** - directory with baked lightmap textures @@ -14,4 +14,3 @@ * **CSG_Data.flax** - additional CSG data * **CSG_Mesh.flax** - CSG model * **NavMesh.flax** - Navigation Mesh tiles data - diff --git a/manual/get-started/scenes/selecting-actors.md b/manual/get-started/scenes/selecting-actors.md index d9770bf6..619420b8 100644 --- a/manual/get-started/scenes/selecting-actors.md +++ b/manual/get-started/scenes/selecting-actors.md @@ -1,6 +1,6 @@ # Selecting Actors -Selecting actors in your scene is one of the most essential parts of the level design. There are different ways to select objects. Each of these is detailed below. +Selecting actors in your scene is one of the most essential parts of creating a scene. There are different ways to select objects. Each of these is detailed below. ## Pick selection diff --git a/manual/get-started/scenes/transforming-actors.md b/manual/get-started/scenes/transforming-actors.md index d3a2c15c..8bc60897 100644 --- a/manual/get-started/scenes/transforming-actors.md +++ b/manual/get-started/scenes/transforming-actors.md @@ -8,15 +8,15 @@ If you select one or more actors you can modify their properties in a *Propertie ![Actor Transform](media/edit-actor-local-transform.jpg) -You can also use sliders near the transform properties to edit an object quicker. +You can also use sliders near the transform properties to edit an object more quickly. ![Actor Transform](media/local-transform-usage.gif) -## Transform gizmo +## Transform gizmos The most common way to transform objects is by using transform/rotate/scale gizmos. -Using those widgets is one of the most essential parts of level design because it allows you to place the objects using your mouse. - +Using these widgets is convenient as it allows you to manipulate the objects in the editor window with your mouse. + To change the transform gizmo widget mode use keys **1**, **2** and **3** or the toolbar buttons: ![Toolbar Buttons](media/transform-gizmo-mode.jpg) @@ -26,22 +26,22 @@ You can use them to adjust the gizmo settings. ![Editor Viewport Widgets](media/gizmo-widgets.png) -### Translation widget +### Translation gizmo ![Translation widget](media/gizmo-translate.gif) The **Translation** gizmo moves selected objects along a particular axis (or plane). -To use it click on an axis (red, green or blue) and drag it. -You can also move objects along the plane (use gray quads). +To use it, click on an axis (red, green or blue) and drag it. +You can also move objects along a plane by using the squares between the axis arrows. -### Rotation widget +### Rotation gizmo ![Rotation widget](media/gizmo-rotate.gif) The **Rotation** gizmo rotates selected objects along a particular axis. To use it click on an axis circle (red, green or blue) and drag it. -### Scale widget +### Scale gizmo ![Scale widget](media/gizmo-scale.gif) @@ -51,9 +51,9 @@ You can also uniform scale objects by using a gray box in the center of the gizm ## World and Local transformation space -The Transformation widget can transform objects in two modes: world and local. In world mode, the gizmo widget is aligned to the world coorinates (left-handed unit X, Y and Z). In local mode, the gizmo widget is aligned to the object transformation frame. In local mode editing local transformation of the objects is easier. - -You can toggle the active transformation space with a widget: +The Transformation gizmo can transform objects in two modes: world and local. In world mode, the gizmo is aligned to the world coordinates (left-handed unit X, Y and Z). In local mode, the gizmo is aligned to the object transformation frame. + +You can toggle the active transformation space of a gizmo: ![Toggle Transformation Space](media/transformation-space-toggle.png) @@ -66,7 +66,7 @@ You can toggle the active transformation space with a widget: You can **snap** transformations to the grid. This means that the degree of transformation you apply to actors is rounded to the closest multiple of the number you specify. For example, if you set the rotation snap value to 10, actors rotate in multiples of 10 (0, 10, 20, 30, etc). When you transform objects hold the **Ctrl** key to snap the values. -Snapping can be configured using a widget buttons: +Snapping can be configured using a widget button: ![Snapping Options](media/widget-spanning.jpg) @@ -75,6 +75,3 @@ Snapping can be configured using a widget buttons: You can duplicate selected objects with a transform gizmo if you hold the **Shift** key and start transforming objects. ![Duplicate actors](media/duplicate-actors.gif) - - - diff --git a/manual/get-started/scenes/world-units.md b/manual/get-started/scenes/world-units.md index 4803e757..7c4d6407 100644 --- a/manual/get-started/scenes/world-units.md +++ b/manual/get-started/scenes/world-units.md @@ -2,13 +2,14 @@ ![World Grid](media/world-grid.png) -Flax uses **centimeters** as a unit of length and **kilograms** as a unit of weight. -These world units are used by the physics and rendering engines. -You should stick to using realistic values in order to create solid visual and physical behaviour of the objects. +Flax uses **centimeters** as a unit of length and **kilograms** as a unit of weight. +These world units are used by both the physics and rendering engines. +You should stick to using realistic values in order to create solid visual and physical behaviours for the objects. ## Coordinate system -Flax uses **left-handed** coordinate system. Where each axis points: +Flax uses a **left-handed** coordinate system. Where each axis points: + * **X** axis - *right* direction * **Y** axis - *up* direction * **Z** axis - *forward* direction @@ -16,5 +17,5 @@ Flax uses **left-handed** coordinate system. Where each axis points: ## Math library Flax uses **row-major matrices** and row vectors. -Hovewer Flax tries to use [Transform](https://docs.flaxengine.com/api/FlaxEngine.Transform.html) structure as much as possible when it comes to objects trasformation representation as it is easier to work with and has better precision in some cases. Transformation order is always: **Scale** -> **Rotate** -> **Translate** (TRS style). +However, Flax tries to use [Transform](https://docs.flaxengine.com/api/FlaxEngine.Transform.html) structure as much as possible when it comes to objects' transformation representation, as it is easier to work with and has better precision in some cases. Transformation order is always: **Translate** -> **Rotate** -> **Scale** (TRS style). Euler angles are stored in order: **pitch - yaw - roll** (x, y, z). diff --git a/manual/get-started/version-control.md b/manual/get-started/version-control.md index e09cb933..deea36ef 100644 --- a/manual/get-started/version-control.md +++ b/manual/get-started/version-control.md @@ -9,7 +9,7 @@ By default, all Flax project data is split into two parts: **Content** and **Sou Here is an example `.gitignore` file for a **Git** repository with a Flax project ([download link](https://github.com/FlaxEngine/FlaxSamples/blob/master/.gitignore)). -``` +```.gitignore # Ignore Flax project files /Binaries/ /Cache/ @@ -69,7 +69,7 @@ packages/ Here is an example `.gitattributes` file for the **Git LFS** repository with a Flax project. By using [Large Files Storage](https://github.com/git-lfs/git-lfs/wiki/Tutorial) you can improve repository performance for asset files that are using binary format and tend to be big (models, textures, etc.). -``` +```.gitattributes # Flax Engine files *.flax filter=lfs diff=lfs merge=lfs -text diff --git a/manual/graphics/shaders/custom-compute-shader.md b/manual/graphics/shaders/custom-compute-shader.md index e859501b..0ab9a7f6 100644 --- a/manual/graphics/shaders/custom-compute-shader.md +++ b/manual/graphics/shaders/custom-compute-shader.md @@ -17,7 +17,7 @@ If you're working with Visual Studio then use **File -> Generate project file** ## 2. Writing compute shader -Now, let's write the compute shader. In this example we use two functions: one will blur the input image horizotnally (`CS_BlurH`), second one will perform a vertical blur (`CS_BlurV`). The blur will use a configurable radius (in range 0-10) and blending intensity. +Now, let's write the compute shader. In this example we use two functions: one will blur the input image horizontally (`CS_BlurH`), second one will perform a vertical blur (`CS_BlurV`). The blur will use a configurable radius (in range 0-10) and blending intensity. Here is an example code used in this tutorial. Follow code comments to better understand how it works. diff --git a/manual/scripting/attributes.md b/manual/scripting/attributes.md index 7a4f4bfe..5a1e25e1 100644 --- a/manual/scripting/attributes.md +++ b/manual/scripting/attributes.md @@ -5,7 +5,8 @@ Flax provides various attributes that are used to extend the default logic or pr ## Using Attributes Most of the attributes can be used for both: fields and properties: -# [C#](#tab/code-csharp) +### [C#](#tab/code-csharp) + ```cs [Limit(0, 10)] public float Field1 = 11f; @@ -13,7 +14,9 @@ public float Field1 = 11f; [Tooltip("Light color")] public Color Field2 { get; set; } ``` -# [C++](#tab/code-cpp) + +### [C++](#tab/code-cpp) + ```cpp API_FIELD(Attributes = "Limit(0, 10)") float Field1 = 11f; @@ -21,6 +24,7 @@ float Field1 = 11f; API_FIELD(Attributes = "Tooltip(\"Light color\")") Color ColorVal; ``` + *** ## Common attributes @@ -43,21 +47,24 @@ The following table lists the most common attributes with usage description. | **MultilineText** | Instructs UI editor to use multiline textbox for editing *string* property or field. | | **AssetReference** | Specifies a options for an asset reference picker in the editor. Allows to customize view or provide custom value assign policy. | | **Collection** | This attributes provides additional information on a member collection for the editor. | -| **CustomEditor** | Overrides the default editor provided for the target object/class/field/property. Allows to extend visuals and editing experience of the object. To learn more see [Custom Editors](custom-editors/index.md) docuemntation. | +| **CustomEditor** | Overrides the default editor provided for the target object/class/field/property. Allows to extend visuals and editing experience of the object. To learn more see [Custom Editors](custom-editors/index.md) documentation. | | **CustomEditorAlias** | Works the same as *CustomEditor* attribute, except uses a typename that can be located in different assembly (not referenced). | | **ExecuteInEditMode** | Makes a script execute in edit mode. | | **RequireChildActor** | Automatically adds required child actor as dependencies if not added yet. | | **VisibleIf** | Shows property/field in the editor only if the specified member has a given value. Can be used to hide properties based on other properties (also private properties). The given member has to be bool type. | | **DefaultValue** | Can be used to specify the default value for the field or the property. The editor will highlight the modified properties and add an option to restore value to default. You can use it on basic types like: `[DefaultValue(3.14f)] public float MyValue;` or on complex types: `[DefaultValue(typeof(Vector2), "1,2")] public Vector2 StartPosition;`. | -| **ReadOnly** | Properties and fields marked with this attribute won't be editable in the inspector. This allows to show object proeprties values in the editor but without option to modify the value which can be handy in some cases. | +| **ReadOnly** | Properties and fields marked with this attribute won't be editable in the inspector. This allows to show object properties values in the editor but without option to modify the value which can be handy in some cases. | | **Category** | Describes the category name for a type. Can be used to group script, asset or actor types for editor pickers to organize types. | ## Script execution in editor By using **ExecuteInEditMode** you can enable your scripts to run in Editor. This is useful to generate procedural content for your game from code. Here is an example script that generates a grid of lights in Editor: -# [C#](#tab/code-csharp) +### [C#](#tab/code-csharp) + [!code-csharp[Example1](code-examples/attributes.cs)] -# [C++](#tab/code-cpp) + +### [C++](#tab/code-cpp) + [!code-cpp[Example2](code-examples/attributes.h)] *** diff --git a/manual/scripting/events.md b/manual/scripting/events.md index e1ff5d74..05c5ed74 100644 --- a/manual/scripting/events.md +++ b/manual/scripting/events.md @@ -1,14 +1,16 @@ # Script events -Scripts in Flax does not work like the traditional programs where code runs continuously in a loop until end. -Instead, Flax calls declared in script functions to handle specific game events like update or physics collision. -These functions are called **event functions** because they are executed by Flax in response to events that occur during gameplay. Using these function allows you to implement gameplay logic and handle different situations inside your game. +Scripts in Flax does not work like traditional programs where code runs continuously in a loop until end. +Instead, Flax calls functions declared in scripts to handle specific game events like update or physics collision. +These functions are called **event functions** because they are executed by Flax in response to events that occur during gameplay. Using these functions allows you to implement gameplay logic and handle different situations inside your game. ## Examples -# [C#](#tab/code-csharp) +### [C#](#tab/code-csharp) + [!code-csharp[Example1](code-examples/events.cs)] -# [C++](#tab/code-cpp) + +### [C++](#tab/code-cpp) [!code-cpp[Example2](code-examples/events.h)] *** @@ -17,15 +19,15 @@ These functions are called **event functions** because they are executed by Flax The following table lists all the available event functions to override from the base **Script** class. > [!TIP] -> You don't have to call the base class methods if you script inherits directly from Script type. The default implementations are empty. +> You don't have to call the base class methods if your script inherits directly from `Script` type. The default implementations are empty. | Event | Description | |--------|--------| -| **void OnAwake()** | Called after the object is loaded to initialize it. Before the enabling it or calling start (including any other scene objects). | +| **void OnAwake()** | Called after the object is loaded to initialize it. This occurs before the object is enabled and before calling start (including any other scene objects). | | **void OnEnable()** | Called when object becomes enabled and active. | | **void OnDisable()** | Called when object becomes disabled and inactive. | | **void OnDestroy()** | Called before the object will be destroyed. | -| **void OnStart()** | Called when a script is enabled just before any of the Update methods is called for the first time. | +| **void OnStart()** | Called when a script is enabled, and just before any of the Update methods is called for the first time. | | **void OnUpdate()** | Called every frame if object is enabled (C++ scripts need to set `_tickUpdate=true` in constructor). | | **void OnLateUpdate()** | Called every frame (after *Update*) if object is enabled (C++ scripts need to set `_tickLateUpdate=true` in constructor). | | **void OnFixedUpdate()** | Called every fixed framerate frame if object is enable (C++ scripts need to set `_tickFixedUpdate=true` in constructor)d. | diff --git a/manual/scripting/index.md b/manual/scripting/index.md index f918341e..b3d99c75 100644 --- a/manual/scripting/index.md +++ b/manual/scripting/index.md @@ -28,7 +28,7 @@ If you want to use custom .NET libraries use build scripts to reference them as ## C++ Scripting -Flax supports native **C++** scripting with direct access to whole engine API. C++ scripts can be created side-by-side with C# scripts and expose own types/functions/properties via automatic bindings as decscribed [here](../editor/flax-build/api-tags.md). To write and use C\+\+ code engine headers and platform toolset are requried. +Flax supports native **C++** scripting with direct access to whole engine API. C++ scripts can be created side-by-side with C# scripts and expose own types/functions/properties via automatic bindings as described [here](../editor/flax-build/api-tags.md). To write and use C\+\+ code engine headers and platform toolset are required. To start native scripting in C\+\+ see the related documentation [here](cpp/index.md). @@ -36,7 +36,7 @@ To start native scripting in C\+\+ see the related documentation [here](cpp/inde Flax supports **Visual** scripting with fully-featured Editor tools for creating, using and debugging Visual Scripts. Visual Scripts can inherit from C++ or C# classes (eg. custom Actor or Script) to provide more logic and data. Visual Scripting is very light-weight and extensible solution for prototyping games especially boosting the rapid development. -Visual Scripts can access to whole engine API and the game code. Visual Scripts can be created side-by-side with C# and C++ scripts to expose own functions/properties. Also, Visual Scripting doesn't requrie any additional tools nor compiler as it's hot-reloading in Editor without any processing to provide even more robust development. +Visual Scripts can access to whole engine API and the game code. Visual Scripts can be created side-by-side with C# and C++ scripts to expose own functions/properties. Also, Visual Scripting doesn't require any additional tools nor compiler as it's hot-reloading in Editor without any processing to provide even more robust development. To start visual scripting see the related documentation [here](visual/index.md). diff --git a/manual/scripting/new-script.md b/manual/scripting/new-script.md index 6d1abab7..a12f02a5 100644 --- a/manual/scripting/new-script.md +++ b/manual/scripting/new-script.md @@ -1,9 +1,9 @@ # Create and use a script -Scripts in Flax are written in the **C#** language (source files with extension `.cs`). -If you want to create a C++ Script you can find out how [here](cpp/index.md). -To provide better organization in a project workspace script files are located in the `Source/` directory. -In that way scripts are separated from the assets which reduces mess and makes it easier to work with project sources. +Scripts in Flax are primarily written in the **C#** language (source files with extension `.cs`). +If you want to create a C++ Script you can find out how [here](cpp/index.md). +To provide better organization in a project workspace script files are located in the `Source/` directory. +This separates scripts from the assets, which reduces mess and makes it easier to work with project sources. Flax Editor creates a solution file (`.sln`) and C# projects (`.csproj`) for game scripts and editor plugins. @@ -12,23 +12,25 @@ Flax Editor creates a solution file (`.sln`) and C# projects (`.csproj`) for gam > [!Note] > We recommend using Visual Studio for code editing with [Flax Engine Tools for Visual Studio](https://marketplace.visualstudio.com/items?itemName=Flax.FlaxVS) installed. -# Create a script +## Create a script 1. In the *Content* window, Navigate to '<project_name>/Source/<game_module_name>'.
![Step 1](media/new-script.gif) - + 2. Double-click to open the script. Wait for Flax to open your IDE, which will then open the new script. Once opened this is what the script file will look like. [!code-csharp[Example1](code-examples/events.cs)] -# Use a script +## Use a script Scripts are **attached to actors**. Every actor can contain an unlimited amount of individual scripts (including multiple instances of the same script type). This means that the script's lifetime is related to that of the actor's and the scene's lifetime. For instance, if you load a scene, the scripts attached to the objects in that scene also will be loaded. -1. Select an actor to add script to it (note label *Drag scripts here* in **Scripts** group in *Properties* window) +1. Select an actor to add a script to it (note label *Drag scripts here* in **Scripts** group in *Properties* window) 2. Drag and drop the script into the **Drag scripts here** area -3. Script is ready (sample script with 3 public fields) +3. The script is ready + +Sample script with 3 public fields:
![Step 1](media/attach-script.gif) The Flax Editor shows public script properties and fields using a dedicated group (within `Scripts` group). Each script group header shows a script class type name, **settings button on the right** and **script toggle checkbox on the left**. You can disable or enable the script by using this checkbox. @@ -37,6 +39,6 @@ To **remove**, **edit** or **reorder** a script use the **settings button** whic ![Script settings](media/script-settings.png) -You can also easily pick a reference to a script or reorder it. Simply click and drag the **three-bar icon button** as shown on a gif below: +You can also easily select a reference to a script or reorder it. Simply click and drag the **three-bar icon button** as shown on a gif below: ![Reorder Script](media/script-reorder-with-drag.gif) diff --git a/manual/scripting/properties.md b/manual/scripting/properties.md index 0e0d5852..3306e50e 100644 --- a/manual/scripting/properties.md +++ b/manual/scripting/properties.md @@ -2,44 +2,55 @@ Every script can contain various fields and properties. By default Flax shows all **public fields and properties** in the *Properties* window so user may edit them (undo/redo is supported). -# Script +## Script + +### [C#](#tab/code-csharp) -# [C#](#tab/code-csharp) [!code-csharp[Example1](code-examples/properties.cs)] -# [C++](#tab/code-cpp) + +### [C++](#tab/code-cpp) + [!code-cpp[Example2](code-examples/properties.h)] *** ![Script Properties](media/script-ui.png) -# Attributes +## Attributes -If you want to **hide** a public property or a field simply use [HideInEditor](https://docs.flaxengine.com/api/FlaxEngine.HideInEditorAttribute.html) attribute. +If you want to **hide** a public property or a field simply use the [HideInEditor](https://docs.flaxengine.com/api/FlaxEngine.HideInEditorAttribute.html) attribute. + +### [C#](#tab/code-csharp) -# [C#](#tab/code-csharp) ```cs [HideInEditor] public float Field1 = 11; ``` -# [C++](#tab/code-cpp) + +### [C++](#tab/code-cpp) + ```cpp API_FIELD(Attributes="HideInEditor") float Field1 = 11; ``` + *** -If you want to **don't serialize** a public property or a field use [NoSerialize](https://docs.flaxengine.com/api/FlaxEngine.NoSerializeAttribute.html) attribute. +If you want to **not serialize** a public property or a field use the [NoSerialize](https://docs.flaxengine.com/api/FlaxEngine.NoSerializeAttribute.html) attribute. # [C#](#tab/code-csharp) + ```cs [NoSerialize] public float Field1 = 11; ``` + # [C++](#tab/code-cpp) + ```cpp API_FIELD(Attributes="NoSerialize") float Field1 = 11; ``` + *** To learn more about using attributes see this [page](attributes.md). diff --git a/manual/scripting/restrictions.md b/manual/scripting/restrictions.md index 0656a921..d0d7220e 100644 --- a/manual/scripting/restrictions.md +++ b/manual/scripting/restrictions.md @@ -8,17 +8,18 @@ Flax tries to implement all the engine features and scripting APIs across all su ## Not supported APIs -- System.Collections.Immutable.dll -- System.Design.dll -- System.Drawing.Design.dll -- System.Reflection.Metadata.dll -- System.Web.Extensions.Design.dll +* System.Collections.Immutable.dll +* System.Design.dll +* System.Drawing.Design.dll +* System.Reflection.Metadata.dll +* System.Web.Extensions.Design.dll ## Ahead-of-time compile Ahead-of-time (**AOT**) compile is a technique used to precompile all the managed code during game building process instead of using just-in-time (**JIT**) compilation on the target device. That's because some platforms do not allow runtime code generation. In most cases this has no effect on game scripting but in a few specific cases, AOT platforms require additional consideration. Because code generation is disabled in AOT mode (scripting backend throws an exception) the following features are not supported: + * No dynamic loading (eg. `Assembly.LoadFile`). * No runtime code generation (eg. `System.Reflection.Emit`). * Generic virtual methods have restrictions. @@ -28,6 +29,7 @@ Because code generation is disabled in AOT mode (scripting backend throws an exc When compiling with AOT mode enabled C# scripts have a preprocessor defined `USE_AOT`. It can be used to redirect different API usage depending o the target platform build. Platforms that use AOT: + * Xbox One * Xbox Scarlett * PlayStation 4 diff --git a/manual/toc.md b/manual/toc.md index bc854c46..7784013b 100644 --- a/manual/toc.md +++ b/manual/toc.md @@ -1,460 +1,882 @@ # [Get started](get-started/index.md) + ## [Get Flax](get-started/get-flax.md) + ### [Requirements](get-started/requirements.md) + ### [Editor on Linux](get-started/linux.md) + ### [Editor on Mac](get-started/mac.md) + ## [Create a project](get-started/create-a-project.md) + ## [Editor](get-started/editor.md) + ### [Flax for UE4® developers](get-started/flax-for-ue4-devs/index.md) + ### [Flax for Unity® developers](get-started/flax-for-unity-devs/index.md) + ### [Flax for Godot developers](get-started/flax-for-godot-devs/index.md) + ## [Glossary](get-started/glossary.md) + ## [Scenes](get-started/scenes/index.md) + ### [Actors](get-started/scenes/actors.md) + #### [Placing Actors](get-started/scenes/placing-actors.md) + #### [Selecting Actors](get-started/scenes/selecting-actors.md) + #### [Transforming Actors](get-started/scenes/transforming-actors.md) + ### [World Units](get-started/scenes/world-units.md) + ### [Scene Data](get-started/scenes/scene-data.md) + ## [Assets](get-started/assets/index.md) + ### [Creating Assets](get-started/assets/creating-assets.md) + ### [Using Assets](get-started/assets/using-assets.md) + ### [Searching Assets](get-started/assets/searching-assets.md) + ## [Prefabs](get-started/prefabs/index.md) + ### [Prefab Editor](get-started/prefabs/prefab-editor.md) + ### [How to create a prefab](get-started/prefabs/creating-prefabs.md) + ### [How to spawn a prefab](get-started/prefabs/spawning-prefabs.md) + ## [Project structure](get-started/project-structure.md) + ### [Version control](get-started/version-control.md) + ### [Distribute a game](get-started/distribute-a-game.md) # [Samples and Tutorials](samples-tutorials/index.md) + ## [Samples](samples-tutorials/samples/index.md) + ## [Arizona Framework Sample](samples-tutorials/samples/arizona.md) + ## [Tutorials](samples-tutorials/tutorials/index.md) # [Editor](editor/index.md) + ## [Interface](editor/interface.md) + ## [Play in-editor](editor/play-in-editor.md) + ## [Windows](editor/windows/index.md) + ### [Viewport](editor/windows/viewport.md) + ### [Content Window](editor/windows/content-window.md) + ### [Properties Window](editor/windows/properties-window.md) + ### [Scene Window](editor/windows/scene-window.md) + ### [Toolbar](editor/windows/toolbar.md) + ### [Toolbox](editor/windows/toolbox.md) + ### [Output Log](editor/windows/output-log.md) + ### [Debug Log](editor/windows/debug-log.md) + ### [Content Search](editor/windows/content-search.md) + ## [Game Settings](editor/game-settings/index.md) + ### [Time Settings](editor/game-settings/time-settings.md) + ### [Layers And Tags Settings](editor/game-settings/layers-and-tags-settings.md) + ### [Graphics Settings](editor/game-settings/graphics-settings.md) + ### [Build Settings](editor/game-settings/build-settings.md) + ### [Streaming Settings](editor/game-settings/streaming-settings.md) + ### [Custom Settings](editor/game-settings/custom-settings.md) + ## [Game Cooker](editor/game-cooker/index.md) + ### [Game Data Security](editor/game-cooker/security.md) + ## [Flax.Build](editor/flax-build/index.md) + ### [API Tags](editor/flax-build/api-tags.md) + ### [Plugins](editor/flax-build/plugins.md) + ## [Editor Options](editor/options/index.md) + ## [Profiling](editor/profiling/index.md) + ### [Profiler](editor/profiling/profiler.md) + ### [Tracy](editor/profiling/tracy.md) + ### [dotTrace](editor/profiling/dot-trace.md) + ## [Localization](editor/localization/index.md) + ## [Advanced](editor/advanced/index.md) + ### [Extending Flax Editor](editor/advanced/extending-editor.md) + ### [Command Line Access](editor/advanced/command-line-access.md) + ### [Custom Visject Surfaces](editor/advanced/custom-visject-surface.md) + ### [Editor Style](editor/advanced/style.md) + ### [Custom Engine Build](editor/advanced/custom-engine.md) + ### [Game and Engine Flow](editor/advanced/game-engine-flow.md) + ### [Asset References](editor/advanced/asset-references.md) + ## [Large Worlds](editor/large-worlds/index.md) # [Graphics](graphics/index.md) + ## [Rendering overview](graphics/overview/index.md) + ## [Cameras](graphics/cameras/index.md) + ### [How to render a camera to a texture](graphics/cameras/render-camera-to-texture.md) + ## [Materials](graphics/materials/index.md) + ### [Materials Basics](graphics/materials/basics/index.md) + ### [Materials Editor](graphics/materials/material-editor/index.md) + ### [Material Properties](graphics/materials/material-properties/index.md) + ### [Material Inputs](graphics/materials/material-inputs.md) + ### [Blend Modes](graphics/materials/blend-modes/index.md) + ### [Shading Models](graphics/materials/shading-models/index.md) + ### [Layered Materials](graphics/materials/layered-materials/index.md) + ### [Instanced Materials](graphics/materials/instanced-materials/index.md) + ### [Material Functions](graphics/materials/material-functions.md) + ## [Decals](graphics/decals/index.md) + ### [Decal Actor](graphics/decals/decal.md) + ### [How to create a decal](graphics/decals/create-decal.md) + ## [Splines](graphics/splines/index.md) + ### [How to animate object over spline](graphics/splines/animate-object.md) + ### [How to create road from spline](graphics/splines/create-road.md) + ### [How to create dynamic chain from spline](graphics/splines/create-chain.md) + ## [Sprites](graphics/sprites/index.md) + ### [Importing Sprites](graphics/sprites/importing-sprites.md) + ### [Modifying Sprite Atlas](graphics/sprites/modifying-sprite-atlas.md) + ## [Textures](graphics/textures/index.md) + ### [Texture Window](graphics/textures/texture-window.md) + ### [Texture Import Settings](graphics/textures/import-settings.md) + ### [How to generate procedural texture](graphics/textures/generate-texture.md) + ### [Cube Textures](graphics/textures/cube-textures.md) + ### [Texture Groups](graphics/textures/texture-groups.md) + ## [Models](graphics/models/index.md) + ### [Importing Models](graphics/models/import.md) + ### [Static Model](graphics/models/static-model.md) + ### [Model Window](graphics/models/model-window.md) + ### [Vertex Painting](graphics/models/vertex-painting.md) + ### [Signed Distance Fields](graphics/models/sdf.md) + ### [How to generate procedural model](graphics/models/generate-model.md) + ## [Lighting](graphics/lighting/index.md) + ### [Light Types](graphics/lighting/light-types/index.md) + #### [Directional Light](graphics/lighting/light-types/directional-light.md) + #### [Point Light](graphics/lighting/light-types/point-light.md) + #### [Spot Light](graphics/lighting/light-types/spot-light.md) + #### [Sky Light](graphics/lighting/light-types/sky-light.md) + ### [Shadows](graphics/lighting/shadows.md) + ### [IES Light Profiles](graphics/lighting/ies-profiles.md) + ### [Sky and Skybox](graphics/lighting/sky-skybox/index.md) + #### [Sky](graphics/lighting/sky-skybox/sky.md) + #### [Skybox](graphics/lighting/sky-skybox/skybox.md) + ### [Reflections](graphics/lighting/reflections/index.md) + #### [Environment Probe](graphics/lighting/reflections/env-probe.md) + ### [Global Illumination](graphics/lighting/gi/index.md) + #### [Realtime Global Illumination](graphics/lighting/gi/realtime.md) + #### [How to setup Realtime Global Illumination](graphics/lighting/gi/how-to-setup-gi.md) + #### [Lightmap UVs](graphics/lighting/gi/lightmap-uvs.md) + #### [Lightmapping](graphics/lighting/gi/lightmapping.md) + #### [Lightmap Settings](graphics/lighting/gi/settings.md) + ## [Fog effects](graphics/fog-effects/index.md) + ### [Exponential Height Fog](graphics/fog-effects/exponential-height-fog.md) + ### [Volumetric Fog](graphics/fog-effects/volumetric-fog.md) + ## [Post effects](graphics/post-effects/index.md) + ### [Ambient Occlusion](graphics/post-effects/ambient-occlusion.md) + ### [Anti-Aliasing](graphics/post-effects/anti-aliasing.md) + ### [Bloom](graphics/post-effects/bloom.md) + ### [Camera Artifacts](graphics/post-effects/camera-artifacts.md) + ### [Color Grading](graphics/post-effects/color-grading.md) + ### [Depth of Field](graphics/post-effects/depth-of-field.md) + ### [Motion Blur](graphics/post-effects/motion-blur.md) + ### [Eye Adaptation](graphics/post-effects/eye-adaptation.md) + ### [Lens Flares](graphics/post-effects/lens-flares.md) + ### [Screen Space Reflections](graphics/post-effects/screen-space-reflections.md) + ### [Tone Mapping](graphics/post-effects/tone-mapping.md) + ### [PostFx Volumes](graphics/post-effects/post-fx-volumes.md) + ### [Post Process Materials](graphics/post-effects/post-fx-materials.md) + ## [Shaders](graphics/shaders/index.md) + ### [Custom Fullscreen Shader](graphics/shaders/custom-fullscreen-shader.md) + ### [Custom Geometry Drawing](graphics/shaders/custom-geometry-drawing.md) + ### [Custom Compute Shader](graphics/shaders/custom-compute-shader.md) + ### [Graphics API](graphics/shaders/graphics-api.md) + ## [Debugging tools](graphics/debugging-tools/index.md) + ### [Debug View](graphics/debugging-tools/debug-view.md) + ### [View Flags](graphics/debugging-tools/view-flags.md) + ## [Tutorials](graphics/tutorials/index.md) + ### [How to render object outline](graphics/tutorials/render-object-outline.md) + ### [How to render FPS weapon](graphics/tutorials/render-fps-weapon.md) + ### [How to use anisotropic texture sampler](graphics/tutorials/anisotropic-texture-sampler.md) + ### [How to use dynamic texture](graphics/tutorials/use-dynamic-texture.md) + ### [How to setup time of the day simulation](graphics/tutorials/time-of-the-day.md) + ### [How to draw custom set of actors or scenes](graphics/tutorials/custom-actors-scenes-drawing.md) # [Scripting](scripting/index.md) + ## [Create and use a script](scripting/new-script.md) + ## [Script properties and fields](scripting/properties.md) + ## [Script events](scripting/events.md) + ## [Accessing scene objects](scripting/scene-objects.md) + ## [Creating and destroying objects](scripting/objects-lifetime.md) + ## [Attributes](scripting/attributes.md) + ## [Scripts debugging](scripting/debugging/index.md) + ### [Visual Studio](scripting/debugging/visual-studio.md) + ### [Visual Studio Code](scripting/debugging/visual-studio-code.md) + ### [Rider](scripting/debugging/rider.md) + ## [Scripts serialization](scripting/serialization/index.md) + ## [Empty Actor](scripting/empty-actor.md) + ## [Engine API](scripting/engine-api.md) + ## [Custom Editors](scripting/custom-editors/index.md) + ### [Custom script editor](scripting/tutorials/custom-editor.md) + ### [Attributes](scripting/custom-editors/attributes.md) + ## [Preprocessor variables](scripting/preprocessor.md) + ## [Scripting restrictions](scripting/restrictions.md) + ## [C++ Scripting](scripting/cpp/index.md) + ### [Common Types](scripting/cpp/common-types.md) + ### [Collections](scripting/cpp/collections.md) + ### [String Formatting](scripting/cpp/string-formatting.md) + ### [Logging and Assertions](scripting/cpp/logging-assertions.md) + ### [Object References](scripting/cpp/object-references.md) + ### [Serialization](scripting/cpp/serialization.md) + ### [Interfaces](scripting/cpp/interfaces.md) + ### [Tips & Tricks](scripting/cpp/tips-tricks.md) + ## [Visual Scripting](scripting/visual/index.md) + ### [Events](scripting/visual/events.md) + ### [Arrays](scripting/visual/arrays.md) + ### [Dictionaries](scripting/visual/dictionaries.md) + ## [Plugins](scripting/plugins/index.md) + ### [Plugins Window](scripting/plugins/plugins-window.md) + ### [Plugin Project](scripting/plugins/plugin-project.md) + ## [Advanced](scripting/advanced/index.md) + ### [Raw Data Asset](scripting/advanced/raw-data-asset.md) + ### [Custom Editor Options](scripting/advanced/custom-editor-options.md) + ### [Curve](scripting/advanced/curve.md) + ### [Access Game Window](scripting/advanced/access-game-window.md) + ### [Multithreading](scripting/advanced/multithreading.md) + ### [Screenshots](scripting/advanced/screenshots.md) + ### [Gameplay Globals](scripting/advanced/gameplay-globals.md) + ### [Refactoring and Renaming](scripting/advanced/refactoring-renaming.md) + ### [Cert Store](scripting/advanced/cert-store.md) + ### [Noise](scripting/advanced/noise.md) + ### [Tags](scripting/advanced/tags.md) + ### [Run code on module load](scripting/advanced/code-on-load.md) + ### [File Reference](scripting/advanced/file-reference.md) + ## [Artificial Intelligence](scripting/ai/index.md) + ### [Behavior Trees](scripting/ai/behavior-trees/index.md) + #### [Behavior Knowledge](scripting/ai/behavior-trees/knowledge.md) + #### [Behavior](scripting/ai/behavior-trees/behavior.md) + #### [Behavior Tree Nodes](scripting/ai/behavior-trees/nodes.md) + #### [Behavior Tree Decorators](scripting/ai/behavior-trees/decorators.md) + #### [How to create a custom Behavior Tree node](scripting/ai/behavior-trees/custom-node.md) + #### [How to create a custom Behavior Tree decorator](scripting/ai/behavior-trees/custom-decorator.md) + #### [How to create a custom Move To node](scripting/ai/behavior-trees/custom-move-to.md) + ## [Tutorials](scripting/tutorials/index.md) + ### [How to create a custom editor](scripting/tutorials/custom-editor.md) + ### [How to create a custom editor window](scripting/tutorials/custom-window.md) + ### [How to create a custom editor plugin](scripting/tutorials/custom-plugin.md) + ### [How to create a custom asset type](scripting/tutorials/custom-asset.md) + ### [How to create a custom actor](scripting/tutorials/custom-actor.md) + ### [How to use custom settings](scripting/tutorials/custom-settings.md) + ### [How to import asset from code](scripting/tutorials/import-asset-from-code.md) + ### [How to spawn decal on mouse click](scripting/tutorials/decal-on-mouse-click.md) + ### [How to create Spring Arm camera](scripting/tutorials/spring-arm-camera.md) + ### [How to control PostFx from code](scripting/tutorials/control-postfx-from-code.md) + ### [How to use third-party library](scripting/tutorials/use-third-party-library.md) + ### [How to add scripts module](scripting/tutorials/add-scripts-module.md) + ### [How to create loading screen](scripting/tutorials/loading-screen.md) + ### [How to change scene from script](scripting/tutorials/change-scene.md) # [Animation](animation/index.md) + ## [Skinned Model](animation/skinned-model/index.md) + ### [Editor Interface](animation/skinned-model/interface.md) + ## [Animation](animation/animation/index.md) + ### [Animation Events](animation/animation/anim-events.md) + ### [Animation Retargeting](animation/animation/retargeting.md) + ## [Anim Graph](animation/anim-graph/index.md) + ### [Editor Interface](animation/anim-graph/interface.md) + ### [Graph Parameters](animation/anim-graph/parameters.md) + ### [State Machines](animation/anim-graph/state-machine.md) + ### [Inverse Kinematics](animation/anim-graph/inverse-kinematics.md) + ### [Functions](animation/anim-graph/functions.md) + ### [Animation Slots](animation/anim-graph/animation-slots.md) + ### [Instance Data](animation/anim-graph/instance-data.md) + ### [Custom Nodes](animation/anim-graph/custom-nodes.md) + ## [Animated Model](animation/animated-model.md) + ## [Skeleton Mask](animation/skeleton-mask.md) + ## [Bone Socket](animation/bone-socket.md) + ## [Scene Animations](animation/scene-animations/index.md) + ### [Scene Animation](animation/scene-animations/scene-animation.md) + ### [Scene Animation Player](animation/scene-animations/scene-animation-player.md) + ### [Tutorials](animation/scene-animations/tutorials/index.md) + #### [How to animate actor](animation/scene-animations/tutorials/animate-actor.md) + #### [How to make a cut-scene](animation/scene-animations/tutorials/cut-scene.md) + #### [How to animate UI](animation/scene-animations/tutorials/animate-ui.md) + #### [How to use event track](animation/scene-animations/tutorials/event-track.md) + #### [How to create scene animation from code](animation/scene-animations/tutorials/scene-anim-from-code.md) + ## [Advanced](animation/advanced/index.md) + ### [Root motion](animation/advanced/root-motion.md) + ### [Bones debugging](animation/advanced/bones-debugging.md) + ## [Tutorials](animation/tutorials/index.md) + ### [How to setup animated model](animation/tutorials/setup-animated-model.md) + ### [How to create Anim Graph](animation/tutorials/create-anim-graph.md) + ### [How to use Anim Graph](animation/tutorials/use-anim-graph.md) + ### [How to change Anim Graph parameter from code](animation/tutorials/change-anim-graph-param.md) + ### [How to blend two animations](animation/tutorials/blend-anims.md) + ### [How to use Skeleton Mask](animation/tutorials/use-skeleton-mask.md) + ### [How to setup State Machine](animation/tutorials/setup-state-machine.md) + ### [How to play animation from code](animation/tutorials/play-animation-from-code.md) # [Audio](audio/index.md) + ## [Importing audio](audio/importing.md) + ## [Using audio](audio/using.md) + ## [Audio Clip](audio/audio-clip.md) + ## [Audio Source](audio/audio-source.md) + ## [Audio Listener](audio/audio-listener.md) + ## [Audio Settings](audio/audio-settings.md) # [Navigation](navigation/index.md) + ## [Nav Mesh Bounds Volume](navigation/nav-mesh-bounds-volume.md) + ## [Nav Link](navigation/nav-link.md) + ## [Nav Crowd](navigation/nav-crowd.md) + ## [Nav Modifier Volume](navigation/nav-modifier-volume.md) + ## [Navigation Settings](navigation/navigation-settings.md) + ## [Tutorials](navigation/tutorials/index.md) + ### [How to create navmesh](navigation/tutorials/create-navmesh.md) + ### [How to create path following agent](navigation/tutorials/path-following.md) # [UI](ui/index.md) + ## [UI Canvas](ui/canvas/index.md) + ## [UI Control](ui/control/index.md) + ### [Transform](ui/control/transform.md) + ## [Brushes](ui/brushes/index.md) + ## [Controls](ui/controls/index.md) + ### [Button](ui/controls/button.md) + ### [CheckBox](ui/controls/checkbox.md) + ### [Slider](ui/controls/slider.md) + ### [Image](ui/controls/image.md) + ### [Label](ui/controls/label.md) + ### [Dropdown](ui/controls/dropdown.md) + ### [TextBox](ui/controls/textbox.md) + ### [RichTextBox](ui/controls/rich-text-box.md) + ### [Border](ui/controls/border.md) + ### [Panel](ui/controls/panel.md) + ### [Alpha Panel](ui/controls/alpha-panel.md) + ### [Drop Panel](ui/controls/drop-panel.md) + ### [Blur Panel](ui/controls/blur-panel.md) + ### [Progress Bar](ui/controls/progress-bar.md) + ### [Spacer](ui/controls/spacer.md) + ### [Grid Panel](ui/controls/grid-panel.md) + ### [Uniform Grid Panel](ui/controls/uniform-grid-panel.md) + ### [Horizontal Panel](ui/controls/horizontal-panel.md) + ### [Vertical Panel](ui/controls/vertical-panel.md) + ### [Tiles Panel](ui/controls/tiles-panel.md) + ### [Render To Texture Control](ui/controls/render-to-texture-control.md) + ### [Canvas Scaler](ui/controls/canvas-scaler.md) + ## [Fonts](ui/fonts/index.md) + ## [Text Render](ui/text-render/index.md) + ## [Sprite Render](ui/sprite-render/index.md) + ## [High DPI](ui/high-dpi/index.md) + ## [UI Navigation](ui/ui-navigation.md) + ## [Tutorials](ui/tutorials/index.md) + ### [How to create UI](ui/tutorials/create-ui.md) + ### [How to create UI from code](ui/tutorials/create-ui-from-code.md) + ### [How to create a custom font material](ui/tutorials/create-font-material.md) + ### [How to create a custom GUI material](ui/tutorials/create-gui-material.md) + ### [How to blur UI panel background](ui/tutorials/blur-background.md) + ### [How to create a Main Menu](ui/tutorials/create-main-menu.md) + ### [How to create a custom control](ui/tutorials/create-custom-control.md) + ### [How to create UI animation in prefab](ui/tutorials/ui-prefab-animation.md) # [Input](input/index.md) + ## [Virtual Input](input/virtual-input.md) + ## [Input Settings](input/input-settings.md) + ## [Mouse](input/mouse.md) + ## [Keyboard](input/keyboard.md) + ## [Gamepads](input/gamepads.md) # [Terrain](terrain/index.md) + ## [Terrain Materials](terrain/materials.md) + ## [Terrain Editing](terrain/editing.md) + ## [Terrain Painting](terrain/painting.md) + ## [Terrain Brushes](terrain/brushes.md) + ## [Terrain Collision](terrain/collision.md) + ## [Importing Terrain](terrain/importing.md) + ## [Terrain Holes](terrain/holes.md) + ## [Tutorials](terrain/tutorials/index.md) + ### [How to create terrain](terrain/tutorials/create-terrain.md) + ### [How to import terrain](terrain/tutorials/import-terrain.md) + ### [How to create terrain material](terrain/tutorials/terrain-material.md) + ### [How to create terrain from code](terrain/tutorials/terrain-from-code.md) + ### [How to create holes in terrain](terrain/tutorials/terrain-holes.md) -### [How to add tessallation to terrain](terrain/tutorials/tessellation-and-terrain.md) + +### [How to add tessellation to terrain](terrain/tutorials/tessellation-and-terrain.md) # [Foliage](foliage/index.md) + ## [Foliage Types](foliage/types.md) + ## [Foliage Editing](foliage/editing.md) + ## [Foliage Density Scaling](foliage/density-scaling.md) + ## [Tutorials](foliage/tutorials/index.md) + ### [How to create foliage](foliage/tutorials/create-foliage.md) + ### [How to create foliage from code](foliage/tutorials/foliage-from-code.md) # [Physics](physics/index.md) + ## [Colliders](physics/colliders/index.md) + ### [Box Collider](physics/colliders/box-collider.md) + ### [Sphere Collider](physics/colliders/sphere-collider.md) + ### [Capsule Collider](physics/colliders/capsule-collider.md) + ### [Mesh Collider](physics/colliders/mesh-collider.md) + #### [Collision Data](physics/colliders/collision-data.md) + ## [Rigid Bodies](physics/rigid-bodies.md) + ## [Character Controller](physics/character-controller.md) + ## [Triggers](physics/triggers.md) + ## [Joints](physics/joints/index.md) + ### [Fixed Joint](physics/joints/fixed-joint.md) + ### [Distance Joint](physics/joints/distance-joint.md) + ### [Hinge Joint](physics/joints/hinge-joint.md) + ### [Slider Joint](physics/joints/slider-joint.md) + ### [Spherical Joint](physics/joints/spherical-joint.md) + ### [D6 Joint](physics/joints/d6-joint.md) + ## [Raycasting](physics/raycasting.md) + ## [Collisions](physics/collisions.md) + ## [Physical Material](physics/physical-material.md) + ## [Physics Settings](physics/physics-settings.md) + ## [Vehicles](physics/vehicles.md) + ## [Ragdolls](physics/ragdolls.md) + ## [Cloth](physics/cloth.md) + ## [Tutorials](physics/tutorials/index.md) + ### [How to create a bouncing ball](physics/tutorials/bouncing-ball.md) + ### [How to use a trigger](physics/tutorials/use-trigger.md) # [Particles](particles/index.md) + ## [Particle Emitter](particles/particle-emitter.md) + ## [Particle System](particles/particle-system.md) + ## [Particle Effect](particles/particle-effect.md) + ## [Particle Parameters](particles/particle-parameters.md) + ## [Particle Materials](particles/particle-materials.md) + ## [Particle Functions](particles/particle-functions.md) + ## [Particle Optimization](particles/particle-optimization.md) + ## [Tutorials](particles/tutorials/index.md) + ### [How to fade particles near camera](particles/tutorials/fade-near-camera.md) + ### [How to make soft particles](particles/tutorials/soft-particles.md) + ### [How to rotate particle position shape](particles/tutorials/rotate-particles.md) # [Networking](networking/index.md) + ## [Network API](networking/network-api.md) + ## [Network Sample](networking/network-sample.md) + ## [Low-Level Networking](networking/low-level.md) + ## [High-Level Networking](networking/high-level.md) + ## [Online](networking/online/index.md) + ## [Tutorials](networking/tutorials/index.md) + ### [How to create TCP client-server](networking/tutorials/create-tcp-client-server.md) + ### [How to create networking server and client](networking/tutorials/network-client-server.md) # [Platforms](platforms/index.md) + ## [Windows](platforms/windows.md) + ## [Xbox One](platforms/xbox-one.md) + ## [Xbox Scarlett](platforms/xbox-scarlett.md) + ## [PlayStation 4](platforms/ps4.md) + ## [PlayStation 5](platforms/ps5.md) + ## [Linux](platforms/linux.md) + ## [Android](platforms/android.md) + ## [Switch](platforms/switch.md) + ## [macOS](platforms/mac.md) + ## [iOS](platforms/ios.md) # [Contributing](contributing/index.md) + ## [Feature Requests](contributing/feature-requests.md) + ## [Report a bug](contributing/report-a-bug.md) + ## [Release Policy](contributing/release-policy.md) + ## [Public Projects](contributing/public-projects.md) # [Release Notes](release-notes/index.md) + ## [1.7 release notes](release-notes/1_7/index.md) + ## [1.6 release notes](release-notes/1_6/index.md) + ## [1.5 release notes](release-notes/1_5/index.md) + ## [1.4 release notes](release-notes/1_4/index.md) + ## [1.3 release notes](release-notes/1_3/index.md) + ## [1.2 release notes](release-notes/1_2/index.md) + ## [1.1 release notes](release-notes/1_1/index.md) + ## [1.0 release notes](release-notes/1_0/index.md) + ## [Beta](release-notes/index.md#beta) + ### [0.7 release notes](release-notes/0_7/index.md) + ### [0.6 release notes](release-notes/0_6/index.md) + ## [Alpha](release-notes/index.md#alpha) + ### [0.5 release notes](release-notes/0_5/index.md) + ### [0.4 release notes](release-notes/0_4/index.md) + ### [0.3 release notes](release-notes/0_3/index.md) + ### [0.2 release notes](release-notes/0_2/index.md) -### [0.1 release notes](release-notes/0_1/index.md) +### [0.1 release notes](release-notes/0_1/index.md)