Setting up the enemy ship’s game mechanics.

It’s time to create the schematics that handle the enemy ship’s game mechanics. We’ll create 2 new schematics, one for moving the ship and one for randomly flying evasive maneuvers along the X-axis (i.e. left and right).

Enemy Maneuver: Schematic

First we’ll create the schematic for flying evasive maneuvers. The schematic will set the object float variable targetManeuver that will be used by another schematic (moving the enemy ship) as X-axis velocity. The maneuver will be played by a repeating auto machine component.

The maneuvers and actual moving is handled in 2 different schematics, because the maneuver will use wait times between starting and stopping a maneuver, while the mover needs to be started every fixed framerate frame (moving the rigidbody).

Open the Makinom editor, navigate to Schematics and create a new schematic. Change the following settings.

space_shooter_09_enemy_ship1

Settings

We’ll set up a local variable as Machine Start Variable for easy setup in the machine component at a later time. When using the schematic in a machine component, the defined start variables will be added automatically, using their default values.

Machine Start Variables

Click on Add Start Variable to add a local start variable that will be exposed to the machine component’s inspector.

  • Variable Key
    Set to dodge.
  • Type
    Select Float.
  • Default Value
    Set to 5.

Wait

Add > Base > Wait

We’ll randomly wait for 0.5 to 1 seconds before starting a maneuver.

  • Random
    Enable this setting.
  • Time (s)
    Set to 0.5 (Value).
  • Time 2 (s)
    Set to 1 (Value).

Float Random

Add > Value > Float > Float Random

This node will store a random number between 2 defind numbers into a float variable. We’ll use it to set the maneuver’s target velocity into an object variable. The random number will be created using the local start variable dodge.

We’re using an object variable to make it available to the mover schematic for moving the ship.

Variable Settings

  • Variable Key
    Set to targetManeuver.
  • Variable Origin
    Select Object.
  • Object
    Select Machine Object.
  • Operator
    Select Set.

Minimum Value

  • Minimum Value
    Select Float Variable.
  • Variable Key
    Set to dodge.
  • Variable Origin
    Select Local.
  • Math Function
    Select Negate.
    This will use -dodge.

Maximum Value

  • Maximum Value
    Select Float Variable.
  • Variable Key
    Set to dodge.
  • Variable Origin
    Select Local.

Wait

Add > Base > Wait

We’ll randomly wait for 1 to 2 seconds before ending a maneuver.

  • Random
    Enable this setting.
  • Time (s)
    Set to 1 (Value).
  • Time 2 (s)
    Set to 2 (Value).

Change Variables

Add > Value > Variable > Change Variables

The maneuver ended, so we’ll reset targetManeuver to 0.

Click on Add Variable to add a variable change.

  • Change Type
    Select Variable.
  • Variable Key
    Select targetManeuver.
  • Variable Origin
    Select Object.
  • Object
    Select Machine Object.
  • Type
    Select Float.
  • Operator
    Select Set.
  • Float Value
    Set to 0 (Value).

Wait

Add > Base > Wait

We’ll randomly wait for 0 to 1 seconds before ending the schematic, which will restart the machine.

  • Random
    Enable this setting.
  • Time (s)
    Set to 0.5 (Value).
  • Time 2 (s)
    Set to 1 (Value).

And that’s it for the schematic – click on Save Schematic and save it as EnemyManeuver in Assets/Schematics/.

Enemy Mover: Schematic

Next we’ll create the schematic moving the enemy ship. The schematic is similar to the player mover and will use object float variable targetManeuver that was set by the maneuver schematic.

Create a new schematic by clicking on New Schematic and change the following settings.

space_shooter_09_enemy_ship2

Settings

We’ll set up local variables as Machine Start Variables for easy setup in the machine component at a later time. When using the schematic in a machine component, the defined start variables will be added automatically, using their default values.

Machine Start Variables

Click on Add Start Variable to add a local start variable that will be exposed to the machine component’s inspector.

  • Variable Key
    Set to speed.
  • Type
    Select Float.
  • Default Value
    Set to -5.

Copy the previous start variable and change the following settings.

  • Variable Key
    Set to tilt.
  • Default Value
    Set to –5.

Again, copy the previous start variable and change the following settings.

  • Variable Key
    Set to xMin.
  • Default Value
    Set to -6.

Again, copy the previous start variable and change the following settings.

  • Variable Key
    Set to xMax.
  • Default Value
    Set to 6.

Again, copy the previous start variable and change the following settings.

  • Variable Key
    Set to zMin.
  • Default Value
    Set to -20.

Again, copy the previous start variable and change the following settings.

  • Variable Key
    Set to zMax.
  • Default Value
    Set to 20.

Rigidbody Store Velocity

Add > Game Object > Rigidbody > Rigidbody Store Velocity

This node will store the current velocity of a game object into a Vector3 variable. We’ll use it to store the enemy ship’s velocity, because we’ll use the velocity along the X-axis to fade toward the evasive maneuver later.

Variable Settings

  • Variable Key
    Set to velocity.
  • Variable Origin
    Select Local.
  • Operator
    Select Set.

Rigidbody Object

  • Object
    Select Machine Object.

Float Move Towards

Add > Value > Float > Float Move Towards

This node will fade a float value between two values over time and stores it into a float variable. We’ll use it to fade the current X-axis velocity toward the evasive maneuver target.

Variable Settings

  • Variable Key
    Set to newManeuver.
  • Variable Origin
    Select Local.
  • Operator
    Select Set.

Current Value

  • Current Value
    Select Vector3 Variable and X.
  • Variable Key
    Set to velocity.
  • Variable Origin
    Select Local.

Target Value

  • Target Value
    Select Float Variable.
  • Variable Key
    Set to targetManeuver.
  • Variable Origin
    Select Object.
  • Object
    Select Machine Object.

Maximum Delta

  • Maximum Delta
    Set to 0.5 (Value).
    The maximum velocity change per frame is 0.5.

Change Variables

Add > Value > Variable > Change Variables

We’ll now set the velocity variable to the target maneuver and the speed (local start variable of the machine) of the enemy ship.

Click on Add Variable to add a variable change.

  • Change Type
    Select Variable.
  • Variable Key
    Select velocity.
  • Variable Origin
    Select Local.
  • Type
    Select Vector3.
  • Operator
    Select Set.
  • Vector3 Value
    Select Set Axis.
  • X-Axis
    Select Float Variable
  • Variable Key
    Set to newManeuver.
  • Variable Origin
    Select Local.
  • Y-Axis
    Set to 0 (Value).
  • Z-Axis
    Select Float Variable.
  • Variable Key
    Set to speed.
  • Variable Origin
    Select Local.

Rigidbody Change Velocity

Add > Game Object > Rigidbody > Rigidbody Change Velocity

We’ll set the enemy ship’s velocity to the Vector3 value we’ve just stored into the local Vector3 variable velocity.

Rigidbody Object

  • Object
    Select Machine Object.

Velocity

  • Vector3 Type
    Select Vector3 Variable.
  • Variable Key
    Set to velocity.
  • Variable Origin
    Select Local.

Clamp Transform

Add > Movement > Movement > Clamp Transform

This node will make sure the enemy ship’s position stays within a defined area. We’ll use local start variables of the machine component for that.

Clamp Object

  • Object
    Select Machine Object.
  • Value Origin
    Select Position.

Clamp X-Axis

  • Clamp X-Axis
    Enable this setting.
  • X-Axis Minimum
    Select Float Variable.
  • Variable Key (X-Axis Minimum)
    Set to xMin.
  • Variable Origin (X-Axis Minimum)
    Select Local.
  • X-Axis Maximum
    Select Float Variable.
  • Variable Key (X-Axis Maximum)
    Set to xMax.
  • Variable Origin (X-Axis Maximum)
    Select Local.

Clamp Z-Axis

  • Clamp Z-Axis
    Enable this setting.
  • Z-Axis Minimum
    Select Float Variable.
  • Variable Key (Z-Axis Minimum)
    Set to zMin.
  • Variable Origin (Z-Axis Minimum)
    Select Local.
  • Z-Axis Maximum
    Select Float Variable.
  • Variable Key (Z-Axis Maximum)
    Set to zMax.
  • Variable Origin (Z-Axis Maximum)
    Select Local.

Change Variables

Add > Value > Variable > Change Variables

We’ll multiply the X-axis of the velocity by the local start variable variable tilt to slightly rotate the enemy ship when it’s flying left or right.

Click on Add Variable to add a variable change.

  • Change Type
    Select Variable.
  • Variable Key
    Select velocity.
  • Variable Origin
    Select Local.
  • Type
    Select Axis Vector3.
  • Axis
    Select X.
  • Operator
    Select Multiply.
  • Float Value
    Select Float Variable.
  • Variable Key
    Set to tilt.
  • Variable Origin
    Select Local.

Rigidbody Move Rotation

Add > Game Object > Rigidbody > Rigidbody Move Rotation

We’ll only rotate it on the Z-axis, using the X-axis of the velocity variable.

Rigidbody Object

  • Object
    Select Machine Object.

Rotation

  • Vector3 Type
    Select Set Axis.
  • X-Axis
    Set to 0 (Value).
  • Y-Axis
    Set to 0 (Value).
  • Z-Axis
    Select Vector3 Variable and X.
  • Variable Key
    Set to velocity.
  • Variable Origin
    Select Local.

And that’s it for the schematic – click on Save Schematic and save it as EnemyMover in Assets/Schematics/.

The next tutorial will handle setting up the enemy ship.