Setting up the player controls.

In this tutorial we’ll do the basic player setup and create 2 schematics for the player’s controls – one for moving the player left and right, one for shooting the ball at the start.

Basic Player Setup

We’ll add a simple schematic to set the player – select the Paddle game object in the scene (it’s an already added instance of the Paddle prefab found at Assets/Tutorial Resources/Prefabs/).

Setting Player Schematic

We’ll use a schematic to set the player when the level starts or the player is spawned, and add it using an Auto Machine component.

Follow the steps in this schematic tutorial – it explains how to create the schematic and add an auto machine to the game object.

Paddle: Schematic

Next, we’ll create a schematic to handle the player’s movement control. The control will simply move the player left and right within defined bounds.

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

breakout_02_player_controls1

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 25.

Copy the previous start variable.

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

Again, copy the previous start variable.

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

Move

Add > Movement > Movement > Move

We’ll use this node to move the paddle left and right based on the Horizontal input key. The movement speed of the paddle will be stored in a local start variable of the Tick Machine that will play the schematic.

Moving Object

  • Object
    Select Machine Object.
  • Move Component
    Select Transform.

Move Change

  • Vector3 Type
    Select Set Axis.

The X-axis will be changed by using the Horizontal input key.

  • Float Type
    Select Input Key Axis.
  • Input Key
    Select Horizontal.

The Y and Z-axis will not be changed.

  • Y-Axis
    Set to 0 (Value).
  • Z-Axis
    Set to 0 (Value).

Speed Settings

  • Float Type
    Select Float Variable.
  • Variable Key
    Set to speed.
  • Variable Origin
    Select Local.

The movement will be based on the delta time, i.e. the time until the last frame.

  • Use Delta Time
    Enable this setting.

Clamp Transform

Add > Movement > Movement > Clamp Transform

We’ll use this node to clamp the paddle’s position along the X-axis to stay within the level. The minimum and maximum values are stored in local start variables of the Tick Machine that plays the schematic.

Clamp Object

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

Clamp X-Axis

  • Clamp X-Axis
    Enable this setting.
  • Is Rotation Clamp
    Disable this setting.

The X-Axis Minimum is stored in a local start variable named xMin.

  • Float Type
    Select Float Variable.
  • Variable Key
    Set to xMin.
  • Variable Origin
    Select Local.

The X-Axis Maximum is stored in a local start variable named xMax.

  • Float Type
    Select Float Variable.
  • Variable Key
    Set to xMax.
  • Variable Origin
    Select Local.

We don’t need to clamp on the Y and Z axis.

That’s it for this schematic – click on Save Schematic and save it as Paddle in Assets/Schematics/.

Ball: Schematic

Next, we’ll create the schematic to shoot the ball to start the game. The ball is mounted to the paddle first, in order to move it with the paddle before firing it. In this schematic, we’ll unmount the ball from the paddle, set a bool variable to not perform the machine again and send the ball flying through rigidbody force.

Create a new schematic and change the following settings.

breakout_02_player_controls2

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 initialVelocity.
  • Type
    Select Float.
  • Default Value
    Set to 600.

Mount Object

Add > Game Object > Game Object > Mount Object

We’ll use this node to unmount the ball from the paddle.

  • Mount
    Disable this setting.

Object

  • Object
    Select Machine Object.

Change Variables

Add > Value > Variable > Change Variables

We’ll now set a global bool variable that’s used by the machine as condition – otherwise we’d be able to fire the ball again and again.

Click on Add Variable to add a variable change.

  • Change Type
    Select Variable.
  • Variable Key
    Set to ballInPlay.
  • Variable Origin
    Select Global.
  • Type
    Select Bool.
  • Bool Type
    Select Value.
  • Bool Value
    Enable this setting.

Rigidbody Kinematic

Add > Game Object > Rigidbody > Rigidbody Kinematic

At first, the ball’s kinematic option is enabled, we’ll need to disable it in order to have it bounce off walls.

Rigidbody Object

  • Object
    Select Machine Object.

Enable/Disable Kinematic

  • Bool Type
    Select Value.
  • Bool Value
    Disable this setting.

Rigidbody Add Force

Add > Game Object > Rigidbody > Rigidbody Add Force

We’ll use this node to add a force to the ball – the force value is stored in a local start variable of the Interaction Machine that plays the schematic.

Rigidbody Object

  • Object
    Select Machine Object.

Force

  • Vector3 Type
    Select Set Axis.

The X-axis of the force comes from the local start variable initialVelocity.

  • Float Type
    Select Float Variable.
  • Variable Key
    Set to initialVelocity.
  • Variable Origin
    Select Local.

The Y-axis of the force comes from the local start variable initialVelocity.

  • Float Type
    Select Float Variable.
  • Variable Key
    Set to initialVelocity.
  • Variable Origin
    Select Local.

The Z-axis should be 0.

  • Z-Axis
    Set to 0 (Value).

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

Paddle: Tick Machine

Next, we’ll add the Paddle schematic (moving the paddle) to the Paddle game object in the scene using a Tick Machine.

We’ll stop the player control when the Game Running game state is Inactive – it’ll be set inactive when the player won or lost all lives (game over).

Add a tick machine component to the Paddle game object (e.g. using the component menu: Makinom > Machines > Tick Machine) and change the following settings.

Start Settings

  • Update
    Enable this setting.
  • Check Game States
    Enable this setting.

Click on Add Game State to add a game state condition.

  • Condition Type
    Select Game State.
  • Game State
    Select Game Running.
  • Check State
    Select Active.

Machine Execution Settings

  • Asset Type
    Select Schematics.
  • Schematics Asset
    Select Paddle.
  • Execution Type
    Select Single.
  • Update Type
    Select Update.

Local Start Variables

The Machine Start Variables we’ve set up in the schematic are automatically added here with their default values – since the default values are already what we need, we don’t have more to do here. Make sure all variables are enabled.

Ball: Interaction Machine

Finally, we’ll add the Ball schematic (moving the paddle) to the Ball game object (child object of the Paddle) using an Interaction Machine.

Like the previous machine, we’ll stop this machine when the Game Running game state is Inactive. Additionally, we’ll use the ballInPlay global bool variable that marks if the ball has been fired already in a variable condition to prevent the machine from starting again.

Add an interaction machine component to the Ball game object (e.g. using the component menu: Makinom > Machines > Interaction Machine) and change the following settings.

Start Settings

  • Key Press
    Enable this setting.
  • Input Key
    Select Fire.
  • Check Game States
    Enable this setting.

Click on Add Game State to add a game state condition.

  • Condition Type
    Select Game State.
  • Game State
    Select Game Running.
  • Check State
    Select Active.

Machine Execution Settings

  • Asset Type
    Select Schematics.
  • Schematics Asset
    Select Ball.
  • Execution Type
    Select Single.
  • Update Type
    Select Update.

Variable Conditions

We’ll check if ballInPlay is false, otherwise the machine shouldn’t start.

  • Check Variables
    Enable this setting.

Click on Add Variable to add a variable condition.

  • Condition Type
    Select Variable.
  • Variable Key
    Set to ballInPlay.
    Use the Value string type.
  • Variable Origin
    Select Global.
  • Is Valid
    Disable this setting.
  • Exists
    Disable this setting.
  • Type
    Select Bool.

Local Start Variables

The Machine Start Variable we’ve set up in the schematic is automatically added here with its default value. Make sure the variable is enabled.

And that’s it for now – apply the changes to the Paddle prefab by clicking on Apply (top of the inspector).

Testing

Hit Play to test the game. You can now move the paddle left and right (until the walls) and shoot the ball once by pressing the Fire key (space). Not much happening yet …

The next tutorial will handle the bricks.