Setting up the enemy game mechanics.
In this tutorial we’ll create schematics for the enemy game mechanics. We need schematics for the movement, being hit by a rocket and death of an enemy.
Enemy: Schematic
First, we’ll set up the movement schematic. The enemy will just move in one direction (left or right) until an obstacle is in the way (checked through a point shapecast), and continue moving in the other direction (i.e. flipping the sprite).
Open the Makinom editor, navigate to Schematics and create a new schematic. Change the following settings.
Check Shape
Add > Game Object > Raycast > Check Shape
This node will use a shape (e.g. a 3D sphere or a 2D box) to check for colliders in the scene. We’ll use it to check for 2D colliders at a point in world space (in front of the enemy) to determine if we’ve reached an obstacle.
Shape Settings
- Shape
Select Point 2D. - Check All
Enable this setting.
There might be multiple objects at that point, so we need to check them all. - Single Objects
Enable this setting.
We only want each object once – otherwise we’d get objects with multiple colliders multiple times.
The Point defines the 2D point in world space we’ll be checking – using 2D shapes will only check for 2D colliders.
- Vector3 Type
Select Game Object. - Object
Select Machine Object. - Child Object
Set to frontCheck. - Value Origin
Select Position.
The Layer Mask defines the layers we’ll be hitting.
- Float Type
Select Layer Mask and Default.
To only select Default, select Nothing first.
We’ll use Filter Game Objects to only check for objects with the tag Obstacle.
- Use Filter
Enable this setting.
Click on Add Object Check to add a filter check.
- Check Type
Select Tag. - Name
Set to Obstacle. - Check Type
Select Is Equal. - Is Valid
Enable this setting.
Start Tagged Machine
Add > Machine > Start Tagged Machine
We’ll use this node to flip the enemy’s sprite by starting a tagged machine with the tag flip.
This node is connected to the Success slot of the Check Shape node (i.e. we’ve run into an obstacle).
- Share Local Variables
Disable this setting. - Wait
Enable this setting.
Machine Object
- Object
Select Machine Object.
Starting Object
- Object
Select Machine Object.
Tag Settings
Click on Add Tag to add a starting tag.
- Tag
Set to flip.
Change Variables
Add > Value > Variable > Change Variables
We’ll use this node to store the X-axis velocity we’ll use for the enemy. The velocity will be the scale (which determines if the enemy is facing left or right, i.e. -1 or 1) multiplied by the speed (an object variable of the enemy).
This node is connected to the previous node’s Next slot and the Failed slot of the Check Shape node (i.e. we didn’t hit an obstacle, but still need to move).
Click on Add Variable to add a variable change – first we’ll store the X-axis scale of the enemy.
- Change Type
Select Variable. - Variable Key
Set to velocity. - Variable Origin
Select Local. - Type
Select Float. - Operator
Select Set. - Float Type
Select Game Object and X. - Object
Select Machine Object. - Value Origin
Select Scale.
Copy the previous variable change and change the following settings – we’ll now multiply by the speed.
- Operator
Select Multiply. - Float Type
Select Float Variable. - Variable Key
Set to speed. - Variable Origin
Select Object. - Object
Select Machine Object.
Rigidbody Change Velocity
Add > Game Object > Rigidbody > Rigidbody Change Velocity
Finally, we’ll set the enemy’s velocity.
Rigidbody Object
- Object
Select Machine Object.
Velocity
- Vector3 Type
Select Set Axis.
We’ll use the velocity variable for the X-axis.
- Float Type
Select Float Variable. - Variable Key
Set to velocity. - Variable Origin
Select Local.
We’ll use the current Y-axis velocity of the enemy as Y-axis.
- Float Type
Select Game Object and Y. - Object
Select Machine Object. - Value Origin
Select Velocity.
The Z-axis velocity will be set to 0.
- Z-Axis
Set to 0 (Value).
That’s it for the movement schematic – click on Save Schematic and save it as Enemy in Assets/Schematics/.
Enemy Hit: Schematic
Next, we’ll set up the schematic that’ll be started by the rocketHit tag when the enemy was hit by a rocket.
Create a new schematic and change the following settings.
Settings
We’ll change the sprite of the enemy when the health is down to 1, so we’ll need to add a sprite resource to the schematic.
Sprites
Click on Add Sprite Resource to add a sprite resource.
- Name
Set to Damaged.
We’ll set the sprite in the machine’s resource overrides.
Check Variables
Add > Value > Variable > Check Variables
We’ll use this node to check if the enemy still has health left.
Variable Condition 0
- Condition Type
Select Variable. - Variable Key
Set to health. - Variable Origin
Select Object. - Object
Select Machine Object. - Is Valid
Enable this setting. - Exists
Enable this setting. - Type
Select Int. - Check Type
Select Is Greater. - Check Value
Set to 0 (Value).
Change Variables
Add > Value > Variable > Change Variables
We’ll use this step to reduce the enemy’s health by 1 due to the rocket hit.
Click on Add Variable to add a variable change.
- Change Type
Select Variable. - Variable Key
Set to health. - Variable Origin
Select Object. - Object
Select Machine Object. - Type
Select Int. - Operator
Select Sub. - Float Value
Set to 1 (Value).
Variable Fork
Add > Value > Variable > Variable Fork
This node is used to check a single variable for multiple conditions – the first condition that’s valid will continue the schematic. We’ll use it to check the enemy’s health – if it’s down to 1, we want to change the sprite, if it’s 0 or less we want to initiate death.
Variable Settings
- Variable Key
Set to health. - Variable Origin
Select Object. - Object
Select Machine Object.
Click on Add Condition to add a variable condition.
- Is Valid
Enable this setting. - Exists
Enable this setting. - Type
Select Int. - Check Type
Select Is Equal. - Check Value
Set to 1 (Value).
Click on Add Condition to add another variable condition.
- Is Valid
Enable this setting. - Exists
Enable this setting. - Type
Select Int. - Check Type
Select Is Less Equal. - Check Value
Set to 0 (Value).
Change Sprite
Add > Game Object > Renderer > Change Sprite
We’ll use this node to change the sprite of the enemy to the damaged sprite.
This node is connected to slot 0 of the Variable Fork node (i.e. is equal 1).
- Sprite
Select Damaged. - Object
Select Machine Object. - Child Object
Set to body.
The sprite renderer is placed on the body child object of the enemy. - Scope
Select Single.
We only want to change a single renderer on the defined game object.
Start Tagged Machine
Add > Machine > Start Tagged Machine
We’ll use this node to initiate the death of the enemy.
This node is conencted to slot 1 of the Variable Fork node (i.e. is less equal 0).
- Share Local Variables
Disable this setting. - Wait
Enable this setting.
Machine Object
- Object
Select Machine Object.
Starting Object
- Object
Select Machine Object.
Tag Settings
Click on Add Tag to add a starting tag.
- Tag
Set to die.
That’s it for the hit schematic – click on Save Schematic and save it as EnemyHit in Assets/Schematics/.
Move Notification: Schematic
Before handling the enemy’s death, we’ll set up a small schematic that will be used to move a notification/flying text we’ll display when the enemy dies (displaying the points the player earned). Flying texts are displayed using a Show Flying Text node and can be animated using schematics – we’ll fade the text in and out and move it upwards.
Create a new schematic and change the following settings.
Change Color
Add > Game Object > Renderer > Change Color
This node is used to change colors, e.g. fade the color of game objects (changing the color of the renderer) and can also be used to fade flying texts. We’ll use it to fade in the text at the start.
- Color Type
Select Renderer. - Fade
Select Fade. - Wait
Disable this setting. - Time (s)
Set to 0.25 (Value). - Fade Alpha
Enable this setting. - Fade Red/Green/Blue
Disable these settings. - Start Color
Set to R=0, G=0, B=0, A=0. - End Color
Set to R=0, G=0, B=0, A=255.
Game Object
- Object
Select Machine Object.
Move Into Direction
Add > Movement > Movement > Move Into Direction
We’ll use this node to move the flying text upwards.
Moving Object
- Object
Select Machine Object.
Movement Settings
- Time (s)
Set to 3. - Wait
Disable this setting. - Speed
Set to 1.
Direction
- Vector3 Type
Select Direction. - Direction
Select Up. - Local Space
Enable this setting. - Face Direction
Disable this setting.
Wait
Add > Base > Wait
We’ll wait for 2.75 seconds – afterwards, we’ll fade out the text for another 0.25 seconds.
- Time (s)
Set to 2.75 (Value).
Change Color
Add > Game Object > Renderer > Change Color
Finally, we’ll fade out the text.
- Color Type
Select Renderer. - Fade
Select Fade. - Wait
Enable this setting. - Time (s)
Set to 0.25 (Value). - Fade Alpha
Enable this setting. - Fade Red/Green/Blue
Disable these settings. - Start Color
Set to R=0, G=0, B=0, A=255. - End Color
Set to R=0, G=0, B=0, A=0.
Game Object
- Object
Select Machine Object.
That’s it for the schematic – click on Save Schematic and save it as MoveNotification in Assets/Schematics/.
Enemy Death: Schematic
Finally, we’ll set up the schematic handling the enemy’s death. When the enemy dies, we’ll disable all sprite renderers and only enable the main sprite renderer and change it’s sprite. Afterwards, we’ll send the enemy flying down. Additionally, we’ll add points to the player’s score (global variable) and display a score notification (flying text).
Create a new schematic and change the following settings.
Settings
We’ll play a random enemy death sound, a random taunt sound on the player and change the sprite of the dead enemy, so we’ll need some resources.
Audio Clips
Click on Add Audio Clip Resource to add an audio clip resource
- Name
Set to Death. - Use Order
Select Random.
We’ll use 3 different audio clips for the enemy’s death sound, so add the needed amount of clips by clicking on Add Audio Clip.
- Audio Clip
Select enemy-death1, enemy-death2 and enemy-death3.
The audio clips can be found at Assets/Tutorial Resources/Audio/Enemy/.
Click on Add Audio Clip Resource again to add another audio clip resource
- Name
Set to Taunt. - Use Order
Select Random.
We’ll use 8 different audio clips for the enemy’s death sound, so add the needed amount of clips by clicking on Add Audio Clip.
- Audio Clip
Select all audio clips found at Assets/Tutorial Resources/Audio/Player/Taunt/.
Sprites
Click on Add Sprite Resource to add a sprite resource.
- Name
Set to Death.
We’ll set the sprite in the machine’s resource overrides.
Enable Component
Add > Game Object > Component > Enable Component
We’ll use this node to disable the sprite renderers on the enemy.
- Component Name
Set to SpriteRenderer. - Scope
Select All In Children. - Enable/Disable
Disable this setting. - Object
Select Machine Object.
Enable Component
Add > Game Object > Component > Enable Component
We’ll use this node to enable the main sprite renderer on the body (we’ll use it to display the dead sprite).
- Component Name
Set to SpriteRenderer. - Scope
Select Single. - Enable/Disable
Enable this setting. - Object
Select Machine Object. - Child Object
Set to body.
Change Sprite
Add > Game Object > Renderer > Change Sprite
We’ll use this node to change the sprite of the enemy.
- Sprite
Select Dead. - Object
Select Machine Object. - Child Object
Set to body. - Scope
Select Single.
Change Variables
Add > Value > Variable > Change Variables
We’ll use this node to increase the player’s score (global variable) by the points reward of the enemy (object variable).
Click on Add Variable to add a variable change.
- Change Type
Select Variable. - Variable Key
Set to score. - Variable Origin
Select Global. - Type
Select Int. - Operator
Select Add. - Float Type
Select Int Variable. - Variable Key
Set to points. - Variable Origin
Select Object. - Object
Select Machine Object.
Show Flying Text
Add > UI > Dialogue > Show Flying Text
This node is used to display a flying text in the scene. We’ll use it to display the points the player earned – using the schematic we’ve created earlier to animate the text.
- Object
Select Machine Object. - Show Number
Enable this setting. - Float Type
Select Int Variable. - Variable Key
Set to points. - Variable Origin
Select Object. - Object
Select Machine Object. - Text (English)
Set to:
% - Font
Select BradBunR. - Font Size
Set to 40. - Text Alignment
Select Center. - Schematic Asset
Select MoveNotification. - Destroy Time (s)
Set to 3.
Change Fields
Add > Function > Change Fields
This node is used to change fields or properties on components or static classes – you can use it to change options on components that aren’t yet supported by their own nodes.
We’ll use this node to change the fixedAngle property of the enemy’s Rigidbody2D component.
- Object
Select Machine Object. - Class Name
Set to Rigidbody2D.
Click on Add Field to add a field/property that will be changed.
- Field Name
Set to fixedAngle. - Is Property
Enable this setting. - Field Type
Select Bool. - Bool Value
Disable this setting.
Collider Change Trigger
Add > Game Object > Collider > Collider Change Trigger
We’ll use this node to set all colliders on the enemy’s game object to be triggers. That way the enemy will fall through the ground.
- Use 2D
Enable this setting. - Object
Select Machine Object. - Scope
Select All In Children. - Bool Value
Enable this setting.
Rigidbody Add Torque
Add > Game Object > Rigidbody > Rigidbody Add Torque
We’ll use this node to add a random torque to the enemy, this will cause the enemy to rotate.
Rigidbody Object
- Object
Select Machine Object.
Torque Settings
- Use 2D
Enable this setting. - Continue Torque
Disable this setting. - Float Type
Select Random and set the 1st field to -100 and the 2nd field to 100.
Play Sound At Point
Add > Animation + Audio > Audio > Play Sound At Point
We’ll use this node to play the player’s taunting sound at the player’s position.
Position
- Vector3 Type
Select Game Object. - Object
Select Player. - Value Origin
Select Position.
Audio Settings
- Audio Clip
Select Taunt. - Wait
Disable this setting. - Volume
Set to 1 (Value).
Play Sound At Point
Add > Animation + Audio > Audio > Play Sound At Point
We’ll use this node to play the enemy’s death sound at the enemy’s position.
Position
- Vector3 Type
Select Game Object. - Object
Select Machine Object. - Value Origin
Select Position.
Audio Settings
- Audio Clip
Select Death. - Wait
Disable this setting. - Volume
Set to 1 (Value).
And that’s it for this schematic – click on Save Schematic and save it as EnemyDeath in Assets/Schematics/.
The next tutorial will handle adding the enemy machines playing the schematics we created in this tutorial.