en:toolworks:docs:apparatus:beginner

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:toolworks:docs:apparatus:beginner [2021/04/08 17:36] vladiusen:toolworks:docs:apparatus:beginner [2023/01/14 15:15] (current) – [Conclusion] vladius
Line 5: Line 5:
 Just before going any further, make sure you have a basic understanding of ECS. Check our [[en:toolworks:docs:apparatus:ecs|brief introduction to the ECS concepts]]. Just before going any further, make sure you have a basic understanding of ECS. Check our [[en:toolworks:docs:apparatus:ecs|brief introduction to the ECS concepts]].
  
-==== Plugin Installation (Activation) ====+===== Plugin Installation (Activation) =====
  
-   - Before creating a new project, you have to add the Apparatus plugin to the Engine. In order to do that, please, launch 'Epic Game Launcher' and make sure that 'Unreal Engine' item is currently selected on the left-most menu. Then navigate to the 'Library' tab on the top. Scroll down to the 'Vault' section to find the Apparatus plugin along with a yellow button titled 'Install to Engine'. Press that button to proceed installing.{{ :en:toolworks:docs:apparatus-add-to-engine.png?nolink |}} +   - Before creating a new project, you have to add the Apparatus plugin to the Engine. In order to do that, please, launch the 'Epic Game Launcher' and make sure that the 'Unreal Engine' item is currently active in the left-most menu. Thennavigate to the 'Library' tab on top. Scroll down to the 'Vault' section to find the Apparatus plugin along with a yellow button titled 'Install to Engine'. Press that button to proceed installing.{{ :en:toolworks:docs:apparatus-add-to-engine.png?nolink |}} 
- +   - In the opened section choose the version of Unreal Engine. Note that officially supported versions for now are 4.26.1 or above. After clicking 'Install' wait for a minute while the launcher loads the necessary files to the engine. When the installation has completed, you can verify its success by clicking the 'Installed Plugins' footer under Unreal Engine version you have installed the plugin for.{{ :en:toolworks:docs:apparatus-check-installation.png?nolink |}}
-   - In the opened section choose the version of Unreal Engine. Note that you should use 4.26.1 (or above) as it's the only officially supported for now. After clicking 'Install' wait for a minute while the launcher loads the necessary files to the engine. When the installation has completed, you can verify its success by clicking the 'Installed Plugins' footer under Unreal Engine version you have installed the plugin for.{{ :en:toolworks:docs:apparatus-check-installation.png?nolink |}}+
  
 ==== Project Creation & Initialization ==== ==== Project Creation & Initialization ====
Line 16: Line 15:
    - After the project is created and opened, you can check if the plugin is currently in use: in the uppermost main menu panel choose 'Edit' -> 'Plugins'. Then type 'Apparatus' in the search box (or navigate yourself to a Workflow category) and make sure the plugin is enabled:{{ :en:toolworks:docs:apparatus-if-enabled.png?nolink |}}    - After the project is created and opened, you can check if the plugin is currently in use: in the uppermost main menu panel choose 'Edit' -> 'Plugins'. Then type 'Apparatus' in the search box (or navigate yourself to a Workflow category) and make sure the plugin is enabled:{{ :en:toolworks:docs:apparatus-if-enabled.png?nolink |}}
  
-==== Implementation ====+===== Implementation =====
  
    - Ok, now. First of all we need to create a key binding so we can understand, when we should add the necessary details to the actor. In order to do that, go to 'Edit'->'Project Settings' and type 'bindings'. Focus on the list of 'Action Mappings' and add the following keys:    - Ok, now. First of all we need to create a key binding so we can understand, when we should add the necessary details to the actor. In order to do that, go to 'Edit'->'Project Settings' and type 'bindings'. Focus on the list of 'Action Mappings' and add the following keys:
-      * 'RightMoveInput' – keyboard key <key>D</key>+      * 'RightMoveInput' – keyboard key <key>d</key>
       * 'LeftMoveInput' – keyboard key <key>a</key>       * 'LeftMoveInput' – keyboard key <key>a</key>
-      * 'JumpMoveInput' – keyboard key <key>W</key>+      * 'JumpMoveInput' – keyboard key <key>w</key>
    - The result must be something like that: {{ :en:toolworks:docs:apparatus-bindings.png?nolink |}}    - The result must be something like that: {{ :en:toolworks:docs:apparatus-bindings.png?nolink |}}
-   - We proceed with creating a new Pawn Blueprint. In order to do that click green button 'Add/Import' in the 'Content Browser' and select 'Blueprint Class'->'Pawn' and give it a name 'BP_MainPawn' (for a sane naming convention practices, please, check this [[https://github.com/Allar/ue4-style-guide|style guide]]). While selecting the Blueprint in the 'Content Browser' press <key>Ctrl</key>+<key>s</key> to save the newly created item. Now open it by double-clicking on its thumbnail (if you are really new to Content Browser, we're advising you to read the [[https://docs.unrealengine.com/en-US/Basics/ContentBrowser/index.html|official Manual]]). Navigate to 'Event-graph' and delete all the nodes by <key>Ctrl</key>+<key>a</key> and <key>Del</key>. You should also understand how to use [[https://docs.unrealengine.com/en-US/ProgrammingAndScripting/Blueprints/Editor/index.html|Blueprint Editor]]; hereinafter BP)+   - We proceed with creating a new Pawn Blueprint. In order to do that click green button 'Add/Import' in the 'Content Browser' and select 'Blueprint Class'->'Pawn' and give it a name 'BP_MainPawn' (for a sane naming convention practices, please, check this [[https://github.com/Allar/ue4-style-guide|style guide]]). While selecting the Blueprint in the 'Content Browser' press <key>Ctrl</key>+<key>s</key> to save the newly created item. Now open it by double-clicking on its thumbnail (if you are really new to Content Browser, we're advising you to read the [[ue>Basics/ContentBrowser/index.html|official Manual]]). Navigate to 'Event-graph' and delete all the nodes by <key>Ctrl</key>+<key>a</key> and <key>Del</key>. You should also understand how to use [[ue>ProgrammingAndScripting/Blueprints/Editor/index.html|Blueprint Editor]]; hereinafter BP. 
-   - In BP Editor go to viewport and in the [[https://docs.unrealengine.com/en-US/Basics/Components/index.html|'Components']] section add 'StaticMesh'. In the [[https://docs.unrealengine.com/en-US/ProgrammingAndScripting/Blueprints/Editor/UIComponents/Details/index.html|'Details' panel]] on the right pick the 'Cube' model for the 'Static Mesh' property. For our pawn to look prettier, choose the 'BrushedMetal' material in the 'Element 0' property. Add a 'Subjective Actor' component (provided by the Apparatus plugin) to the Pawn and see the 'Details' panel to become more familiar with the new Actor Component. In this guide we will only use the properties under the 'Details' section:{{ :en:toolworks:docs:apparatus-details-panel.png?nolink |}} As you may notice, we will add our details there. +   - In the BP Editor switch to Viewport and in the [[ue>Basics/Components|'Components']] section add 'StaticMesh'. In the [[ue>ProgrammingAndScripting/Blueprints/Editor/UIComponents/Details|'Details' panel]] on the right pick the 'Cube' model for the 'Static Mesh' property. For our pawn to look even prettier, choose the 'BrushedMetal' material as the 'Element 0' property value. Add a **'Subjective Actor'** component (this is actually provided by the Apparatus plugin) to your Pawn and look into the Details Panel to become more familiar with the new Actor Component. During this guide we will only use the properties under the 'Details' section:{{ :en:toolworks:docs:apparatus-details-panel.png?nolink |}} As you may have already understood, we will add our own details in there. 
-   - <key>Ctrl</key>+<key>Shift</key>+<key>s</key> to save everything, and compile the BP. Once again open the Content Browser, create a new BP but now expand title 'All classes' and in the hierarchy find 'Detail':{{ :en:toolworks:docs:apparatus-new-detail.png?nolink |}} If you need to create a new Detail you can also use the 'Advanced asset' section of content browser (using the right mouse button) {{ :en:toolworks:docs:apparatus:extra-detail-creation.png?nolink |}} +   - <key>Ctrl</key>+<key>Shift</key>+<key>s</key> to save everything, and compile the BP. Once again open the Content Browser and start creating a new BPbut this time you should expand the 'All Classespane and find the 'Detail' class type there:{{ :en:toolworks:docs:apparatus-new-detail.png?nolink |}} You can also use the Create Advanced Asset section of the Content Browser's context menu (accessed using the right-mouse-button){{ :en:toolworks:docs:apparatus:extra-detail-creation.png?nolink |}} 
-   - Generally speaking, you can and shoudl create as many details as you want, but for the tutorial sake we need specifically the following:+   - Generally speaking, you can and should create as many details as you want, but for the tutorial sake we need specifically the following:
       * ''D_Moveable'',       * ''D_Moveable'',
       * ''D_Moving'',       * ''D_Moving'',
       * ''D_OnFloor'',       * ''D_OnFloor'',
       * ''D_Fallable''.       * ''D_Fallable''.
-   - Keep your project organized and move all the Details classes to some folder called 'Details'. Open any detail you want in the BP Editor. As you can see, Apparatus' detail is actually a usual Blueprint class, inside which you can declare variables, macros and functions as you please. There are also two events that you can override ('Activated' & 'Deactivated') which are called when the detail's Boolean state 'Enabled' is set to either true or false. In the corresponding details add next variables: +   - Keep your project organized and move all the Details classes to some folder called 'Details'{{ :en:toolworks:docs:apparatus-details-folder.png?nolink |}}Open any detail you want in the BP Editor. As you can see, Apparatus' detail is actually a usual Blueprint class, inside which you can declare variables, macros and functions as you please. There are also two events that you can override ('Activated' & 'Deactivated') which are called when the detail's Boolean state 'Enabled' is set to either true or false. In the corresponding details add next variables: 
-      * Float 'Speed' to **'D_Moveable' class** with a default value of 100.0 +      * Float 'Speed' to the ''D_Moveable'' class with a default value of ''100.0''. 
-      * Editable enum 'ETouch Swipe Direction' with the name 'Direction' to **'D_Moving' class** +      * Editable enum ''ETouch Swipe Direction'' named ''Direction'' to the ''D_Moving'' class. 
-      * Editable & expose on spawn Box Collision Object Reference with 'Bottom' name to **'D_Fallable'** +      * Editable & exposed on spawn ''Box Collision Object Reference'' named 'Bottom' to the ''D_Fallable'' class.{{ :en:toolworks:docs:apparatus:apparatus-many-ddd.png?nolink |}} 
-   - Go back to the 'BP_MainPawn' and make the cube a little smaller (for example 0.25,0.25.0.25 vector scale). Add 'Spring Arm' component to the 'DefaultSceneRoot' and the Camera to the arm (make sure that transform vectors are set to their default values); then firstly rotate the arm over Z axis by 180° and after that rotate it over Y axis by -30°. +   - Go back to the 'BP_MainPawn' blueprint and make the cube a little smaller (for example, copy the string ''(0.25, 0.250.25)'' with parentheses and paste into the scale vector with right mouse button click; if all's right you'll get corresponding values in the vector). Add 'Spring Arm' component to the 'DefaultSceneRoot' and the Camera to the arm (make sure that transform vectors are set to their default values); then rotate the arm over the Z-axis by 180° and after that rotate it over the Y-axis by -30°. 
-   You should get something like that: {{ :en:toolworks:docs:apparatus-set-camera.png?nolink |}} +   In the result you should get something like that: {{ :en:toolworks:docs:apparatus-set-camera.png?nolink |}} 
-   - Create 'GameMode' class inherited from 'MechanicalGameMode' and name it 'BP_Mechanism'. Like that:{{ :en:toolworks:docs:apparatus-create-mechanism.png?nolink |}} +   - Create 'GameMode' (or a 'GameModeBase', - both variants are possible) class inherited from 'MechanicalGameMode' (or 'MechanicalGameModeBase'and name it something like 'BP_Mechanism'. Like so:{{ :en:toolworks:docs:apparatus-create-mechanism.png?nolink |}} 
-   - Open 'BP_Mechanism' in BP Editor and in Details panel set 'Default pawn class' to 'BP_MainPawn'. Go to the level settings: 'Blueprints'->'Project Settings : GameMode' and select 'BP_Mechanism' as project 'GameMode' class:{{ :en:toolworks:docs:apparatus-select-gamemode.png?nolink |}} +   - Open 'BP_Mechanism' in the Blueprint Editor and in the Details Panel set the 'Default pawn class' value to 'BP_MainPawn'. Go to the level settings: 'Blueprints'->'Project Settings : GameMode' and select 'BP_Mechanism' as the project's main 'GameMode' class:{{ :en:toolworks:docs:apparatus-select-gamemode.png?nolink |}} 
-   - Now if you run the game, you will see that the camera actually working, but the cube don't move with pressing 'A''D' or 'W'. Let's fix itFirstly, jump to 'BP_MainPawn' and in components list select 'SubjectiveActor' to see it'properties in 'Details panel'In 'Details' property add new detail by clicking on the + button and selecting the detail class. Add two details like on the photo below:{{ :en:toolworks:docs:apparatus-details-list.png?nolink |}} +   - Nowif you run the game, you will notice that the camera is actually working, but the cube won't move while pressing the aforementioned <key>a</key><key>d</key>, <key>w</key> keys. Let's fix thisFirst, jump to 'BP_MainPawn' and in the components list select the 'SubjectiveActor' component to see its properties in the Details PanelFor the 'Details' property add new detail by clicking on the ''+'' button and selecting the detail class. Add exactly two details like on the following shot:{{ :en:toolworks:docs:apparatus-details-list.png?nolink |}} 
-   - As you can see, you can easily add or remove details from 'BP_MainPawn' Actor component; no worth how they are ordered. You're also able to see the variables of the details and change their values. Note that if you change the value of the 'Speed' in the list, it won't be changed in the 'BP_Moveable' detail, because here in the list the **real objects** of classes are represented while in the BP Editor of 'BP_Moveable' you can change only the default values of variables, which are the **options of class** itself. In the list of details **change Speed** to 500. +   - As you see, you can easily add or remove details from the 'BP_MainPawn' actor component; it doesn't actually matter how they are exactly ordered. You're also able to see the variables of the details and change their default values. Note that if you change the value of the 'Speed' in the list, for example, it won't be changed in the 'BP_Moveable' class itself, because here in the list the instances of the detail classes are presented while in the Blueprint Editor of the 'BP_Moveable' class you can change the global default values for its properties. Change the speed right here in the list to 500. 
-   - It's better to do so in Controller but for brevity let's do it here. Being in the BP Editor of the 'BP_MainPawn' navigate to 'Event Graph' and add our 3 input events we have declared previously (see step 6). Create the node 'Get SubjectiveActor', drag from it 3 new nodes, which are 'Add detail' and in the Detail Type field choose 'D_Moving'. After that you can see the returning type of each node currently is 'D Moving Object Reference'. I.e. after the detail was added you can 'promote it to variable' and call functions from it or access variables. In our case we will change the Direction variable to corresponding value. **Don't forget to make checkboxes 'Reuse inactive' to true** (about why we should do so, we will talk later). The whole picture now is:{{ :en:toolworks:docs:apparatus-move-input.png?nolink |}} +   - It's better to do so in Controller but for brevity let's do it here. Being in the BP Editor of the 'BP_MainPawn' navigate to 'Event Graph' and add our 3 input events we have declared previously (see **step 2 of Implementation**). Create the node 'Get SubjectiveActor', drag from it 3 new nodes, which are 'Add detail' and in the Detail Type field choose 'D_Moving'. After that you can see the returning type of each node currently is ''D Moving Object Reference''. I.e. after the detail was added you can 'promote it to variable' and call functions from it or access variables. In our case we will change the Direction variable to corresponding value. **Don't forget** to pin all of the Reuse Disabled checkboxes (We will talk later why you should do so).  The whole scheme now should look like so:{{ :en:toolworks:docs:apparatus-move-input.png?nolink |}} 
-   - All we need to do now is to realize the game mechanics in the 'GameMode'. So open BP Editor of 'BP_Mechanism' and in the Graph delete all nodes except of 'Event Tick'. Promote the 'Delta Seconds' to global variable 'GlobalDelta'And now we need to iterate other subjects and for each of them check if it complies with special case or not. So, for that drag the next node 'Sequence' and from 1st itsoutput drag the filament and find 'Mechanic' node.{{ :en:toolworks:docs:apparatus-evaluate.png?nolink |}} +   - All we have to to do now is to implement the game mechanics in our GameMode. So open the BP Editor once again for the 'BP_Mechanism' and in the Graph view, delete all of the nodes except for the 'Event Tick' node. Promote the ''Delta Seconds'' value to global ''GlobalDelta'' variable mainly for convenience purposesNow we need to iterate over all of the subjects and for each of themcheck if it complies with our special case. So, for that drag the next node 'Sequence'and from its first output drag the filament link and find the 'Mechanic' node.{{ :en:toolworks:docs:apparatus-evaluate.png?nolink |}} 
-   - As you can see, 'Mechanic' gets as input the 'Mechanical Interface', which is in fact our 'BP_Mechanism'. This node will iterate over all entities with the specific set of details enabled/disabled. Currently now there is no such an entity, which will comply with the empty requirements. 'Evaluation Body' pin will be executed for each entity, but after all entities with the pointed set were processed, the 'Completed' pin will be executed. RMB click on the node and you see in it the last items with these titles: 'Add Detail pin'Add non-Detail pin'. You can click these items several times and see that each time you do so, a new pin with a dot or exclamation mark to node. By using this technic and choosing detail type in 'select class' you declare the vector of 0es and 1esyou tell the mechanism, which subjects should be processed. {{ :en:toolworks:docs:apparatus-evaluate-full.png?nolink |}}For example, add two dot-pins to the node and delete all the others (by clicking RMB and selecting 'Remove a type/detail pin'). Choose their types as Moveable & Moving. Promote 'Moving' detail to variable 'TempMoving' - or you are to get something like macaroni. From 'Subjective' output pin drag 'Get Actor' pure function. It is also provided by Apparatus and returns the actor what is currently processed. From the function output drag 'AddActorLocalOffset'. From 'D_Moving' pin drag 'Direction' variable and make 'Select' block to easily choose the corresponding vector depending on the direction given in the detail. 'Left 'Right' cases split into components and fill the Y-component of left case with the 'Speed' variable obtained from 'Moveable' detail and multiplicated with 'GlobalDelta' variable. For the right case use the same value but with the opposite sign. Beyond the 'AddActorLocalOffset' place the deactivation of 'TempMoving' detail be setting its' variable 'IsActivate' to false. After all the actions you should reach something like that:{{ :en:toolworks:docs:apparatus-mechanism-moving-logic.png?nolink |}}But what is going here? As you remember, we defined how we determine out keyboard input at the step 18. Here we just move each actor with the pointed details over its' local Y-axis (for the camera view, it's actually moving to the left if Y-axis is > 0 and moving to the right otherwise). So, depending on what the direction we obtained from the 'Moving' detail we move the actor across the scene. After doing so, we disable the Moving detail, so it won't be moving to the side foreverOk, but what will happen when the player will press 'D' or 'A' button the second time? Remember the checkbox we scored. 'Reuse inactive' in fact means that if the 'Subjective' has the disabled detail then the function will activate it and returning as itsoutput. So now you can run the game and check if it works. Use 'A' 'D' keys to move the box around. +   - As you see, 'Mechanic' gets 'Mechanical Interface' as its input 'self', which is in fact our 'BP_Mechanism' is. This node will iterate over all of the entities (subjects) with specific set of details enabled/disabled. As how it is from the startsessentially all of the subjects which will comply with the empty requirements. 'Evaluation Body' pin gets executed for each complying subject. After all of complying subjects were processed, the 'Completed' pin gets executed. RMB-click on the node and in the opened context menu you will see two last items with these titles: 'Add Detail Pinand 'Add Excluded Detail Pin'. You can click these items several times and see that each time you do so, a new pin with a dot or exclamation mark is added to the node. By using this workflow and selecting the detail types in the added inputs you declare an evaluation filterfor the subjects to be processed in the mechanic. {{ :en:toolworks:docs:apparatus-evaluate-full.png?nolink |}} For example, add two including "dot"-pins to the node and delete all of the others (by RMB-clicking on them and selecting the 'Remove Detail Pinoption). Choose their types as ''D_Moveable'' and ''D_Moving''. Promote the ''Moving'' detail to a ''TempMoving'' variable - or you'll get yourself too much "noodles". From the 'Subjective' output pin drag 'Get Actor' pure function. That is also provided by Apparatus and returns the actor that is currently being processed. From this function'output drag 'AddActorLocalOffset' node. From the ''D_Moving'' pin drag the 'Direction' variable and make 'Select' block to easily choose the corresponding vector depending on the direction currently active in the detail. 'Left and 'Right' cases are split into components and fill the Y-component of the left-side case with the 'Speed' variable obtained from the 'Moveable' detail and multiplicated by the 'GlobalDelta' variable. For the right-side case use the same value just with an opposite sign. Below your 'AddActorLocalOffset' node place the deactivation of the 'TempMoving' detail be setting its state 'Enabled' to false. After all the above actions you should have something like that:{{ :en:toolworks:docs:apparatus-mechanism-moving-logic.png?nolink |}}What's actually going on here? As you may remember, we defined how we determine our keyboard input at some previous step (by adding a ''D_Moving'' details). Here we just move each actor with the pointed details (''D_Moving'' & ''D_Moveable'', only the pawn in the scene have this set) over their local Y-axis (for the camera view, it's actually moving to the left if Y-axis is > 0 and moving to the right otherwise). So, depending on the direction we obtained from the 'Moving' detail we move an actor across the scene. After doing so, we disable the ''D_Moving'' detail, so it won't be moving to the side anymoreGood. But what will happen when the player presses a <key>d</key> or a <key>a</key> key a second time? Do you remember the checkbox we pinned? The 'Reuse Disabled' in fact means that if the 'Subjective' has disabled detail then the function will enable it and return as its output instead of creating a new one. So now you can run the game and check if it works. Use <key>a</key> <key>d</key> keys to move the box around. 
-   Make a few changesand you can jump. {{ :en:toolworks:docs:apparatus-jump.png?nolink |}} But the box isn't falling. Because we haven'declared necessary logic in Mechanism. So let's do that! +   Also make a few additional changes and you'll also be able to jump. {{ :en:toolworks:docs:apparatus-jump.png?nolink |}} But the box isn't falling at all, because we haven'implemented the necessary logic in our Mechanism. So let's do that! 
-   Move back to 'BP_MainPawn' and add to 'DefaultSceneRootnew component 'BoxCollision'. Use next transform: +   Go back to 'BP_MainPawn' and a new 'BoxCollision' component to the 'DefaultSceneRoot'. Use the following transform: 
-      * Location (X=0.000000,Y=0.000000,Z=-13.522278+      * Location: ''(X=0.000000,Y=0.000000,Z=-13.5)'' 
-      * Scale (X=0.400000,Y=0.400000,Z=0.025000). After that in the 'Collision section' select 'OverlappAll' collision preset. But in the 'BP_MainPawn' editor the picture should be:{{ :en:toolworks:docs:apparatus-box-collision.png?nolink |}} +      * Scale: ''(X=0.400000,Y=0.400000,Z=0.025000)''. After that in the 'Collision' section select the 'OverlappAll' collision preset. In the 'BP_MainPawn' editor the picture should look like so:{{ :en:toolworks:docs:apparatus-box-collision.png?nolink |}} 
-   - Now navigate to Graph and on 'BeginPlay' from 'SubjectiveActor' drag 'find Detail' function and set the bottom variable to the box of the pawn:{{ :en:toolworks:docs:apparatus-beginplay.png?nolink |}}We are ensured that out Subjective will have that detail but you should understand the cases, when the output value of the function should be checked out. +   - Now navigate to the Graph and on 'BeginPlay' from 'SubjectiveActor' drag 'Find Detail' function and set the bottom variable to the box of the pawn:{{ :en:toolworks:docs:apparatus-beginplay.png?nolink |}} We are now assured that our Subjective will have that detail but you should also understand the cases, when the output value of the function should be checked out. 
-   - Navigate to the level, choose 'Floor' 'StaticMeshActor' and inside its details panel find the property ‘Generate Overlap Events’ and turn it on. +   - Navigate to the level mapselect 'Floor'->'StaticMeshActor' and inside its details panel find the property ‘Generate Overlap Events’ and also turn it on. 
-   - In the BP editor of 'BP_Mechanism' by dragging from sequence create next logic to provide falling on the floor:{{ :en:toolworks:docs:apparatus-falling.png?nolink |}} If the Subjective has enabled detail 'Fallable' & disabled detail 'On Floor' and if its' bottom overlaps with any actor — then we add to it a detail 'OnFloor', else    — move it down (like it's falling). +   - In the BP Editor of 'BP_Mechanism' create the next logic block by dragging from the Sequence node to implement the actual falling on the floor:{{ :en:toolworks:docs:apparatus-falling.png?nolink |}} If the Subjective has 'Fallable' detail enabled AND 'On Floor' disabled and if its' bottom overlaps with any actor — then we add an 'OnFloor' detail to it, else — continue to move it down (like it's falling). 
-   And the last one — to begin the falling process we need disabling the detail 'On Floor' from the Pawn when it jumps. You can do it in that way:{{ :en:toolworks:docs:apparatus-end.png?nolink |}} +   One last thing — to begin the falling process we need to disable the 'On Floor' detail onсe the Pawn jumps. You can do it this way:{{ :en:toolworks:docs:apparatus-end.png?nolink |}} If the 'Direction' is 'Up' then we disable the detail by using the Apparatus function. Now you can both jump and fall. Just like in your real life, unless you're living on the moon or something. 
-If 'Direction'=='Up' then we disable the detail by using Apparatus function. + 
-Now you can jump and fall.+===== Results ===== 
 + 
 +Anyways, that's it for this tutorial and the result should look similar to: {{youtube>oVE1FRIq8A8?medium}} 
 +[[https://github.com/toolworks/ApparatusBeginnerGuide|The project on github, take a look on the ApparatusLearn#1 branch]]
  
-==== Conclusion ====+===== Conclusion =====
  
-Apparatus is a really nifty plugin for our beloved UEproviding us with a bunch of new programming principles and techniques. You can use it in your game development production pipeline and extend its capabilities even furtherby declaring and implementing your own C++ classes, adhering to the necessary Apparatus interfaces.+Apparatus is a really capable plugin, more than just a plugin - it's a full-fledged data-oriented framework. It provides you with a bunch of new programming principles and techniques. Those are usually called data-oriented since we usually thinking Detail-wise. You can use the framework in your own production pipeline and extend its capabilities even further by declaring and implementing your own C++ classes, adhering to the necessary Apparatus interfaces.
  
-The whole functionality of the plugin can't be demonstrated on little tutorial like this, but the main purpose of this article is exactly to introduce the beginners to the ECS approach and some of the main features of Apparatus!+The vast functionality of the framework can't be easily demonstrated in tiny tutorial like this. The main purpose of this article is exactly to introduce the beginners to the ECS approach in general and Apparatus in particular. Check our the following links also and don't hesitate to ask any of your questions online on our [[https://talk.turbanov.ru/c/apparatus|TurboTalk forums]] and/or [[https://discord.gg/qN4aaJJY|Discord server]]. We are eager to help and your are more then welcome to ask all sorts of questions!
  
 ==== Links ==== ==== Links ====
  
-  * [[https://github.com/Prikalel/ApparatusLearn|The resulting project on GitHub]] 
   * [[https://github.com/toolworks/ApparatusPlatformer|A more complex sample on GitHub]]   * [[https://github.com/toolworks/ApparatusPlatformer|A more complex sample on GitHub]]
   * [[https://turbanov.ru/toolworks/apparatus/docs/api/index.html|Online API Reference]]   * [[https://turbanov.ru/toolworks/apparatus/docs/api/index.html|Online API Reference]]
  
  • en/toolworks/docs/apparatus/beginner.1617892587.txt.gz
  • Last modified: 2021/04/08 17:36
  • by vladius