Setting up the player’s weapon controls.
In this tutorial we’ll create a schematic to control the player’s weapon.
Player Shooting: Schematic
First, we’ll create the schematic to fire the player’s weapon. The schematic will play an audio clip, particle effect and show a line renderer. The player input firing the weapon is handled by an Interaction Machine component we’ll use to play the schematic.
Open the Makinom editor, navigate to Schematics and create a new schematic. Change the following settings.
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 damage. - Type
Select Int. - Default Value
Set to 20.
Play Sound
Add > Animation + Audio > Audio > Play Sound
This node is used to play audio clips. We’ll use it to play the gun shot sound.
Play On
- Object
Select Machine Object.
Audio Settings
- Audio Clip
Select Select Audio Clip and Player GunShot.
The audio clip can be found at Assets/Tutorial Resources/Audio/Effects/. - Play One Shot
Enable this setting. - Volume
Set to 1.
Enable Component
Add > Game Object > Component > Enable Component
This node is used to enable/disable components. We’ll use it to enable a light component.
- Component Name
Set to Light. - Enable/Disable
Enable this setting. - Object
Select Machine Object.
Emit Particles
Add > Game Object > Component > Emit Particles
This node is used to start/stop emitting particles. We’ll use it to start a gun fire particle effect.
- Emit
Enable this setting. - Stop Before Start
Enable this setting.
The particle effect will be stopped first, this results in the effect playing from the start. - Object
Select Machine Object.
Enable Component
Add > Game Object > Component > Enable Component
We’ll use this node to enable a line renderer component.
- Component Name
Set to LineRenderer. - Enable/Disable
Enable this setting. - Object
Select Machine Object.
Call Function
Add > Function > Call Function
This node is used to call functions on components or static classes. We’ll use it to set the line renderer’s start position, calling the SetPosition function on the LineRenderer component.
The SetPosition function needs 2 parameters, an int and a Vector3.
Function Settings
- Class Name
Set to LineRenderer. - Function Name
Set to SetPosition.
Click on Add Parameter to add a parameter.
- Parameter Type
Select Int. - Int/Float Value
Set to 0 (Value).
Click on Add Parameter again.
- Parameter Type
Select Vector3. - Vector3 Type
Select Game Object. - Object
Select Machine Object. - Value Origin
Select Position.
Target Object
- Object
Select Machine Object.
Raycast
Add > Game Object > Raycast > Raycast
This node is used to send a raycast into the scene. We’ll use it to see what we’ve hit with our gunfire.
We will store the game object and position we’ve hit with the raycast.
Raycast Settings
- Raycast Origin
Select Game Object. - Distance
Set to 100. - Layer Mask
Select Shootable.
To only select the Shootable layer, select Nothing first. - Object
Select Machine Object. - Vector3 Type (Direction)
Select Direction. - Direction
Select Forward.
Hit Game Object
We want the game object that was hit to be used as Selected Data. Selected data is used to store things for later use, e.g. game objects that are found during a running schematic (in our case through raycasting). We’ll use the stored game object in the following nodes.
- Use Hit Object
Select Selected Data. - Data Key
Set to hitObject. - Data Origin
Select Local. - Change Type
Select Set.
Store Into Variables
- Variable Origin
Select Local. - Store Hit Point
Enable this setting. - Hit Point Key
Set to hit. - Operator
Select Set.
Start Tagged Machine
Add > Machine > Start Tagged Machine
This node is used to start a tagged machine. We’ll use it to start a tagged machine with the tag damage, which will handle reducing the target’s health. The actual damage is stored in the local float variable damage (local start variable of the machine).
This node is connected to the Success slot of the Raycast node.
- Share Local Variables
Enable this setting. - Wait
Disable this setting.
Machine Object
- Object
Select Selected Data. - Data Key
Set to hitObject. - Data Origin
Select Local.
Starting Object
- Object
Select Machine Object.
Tag Settings
Click on Add Tag to add a starting tag.
- Tag
Set to damage.
Emit Particles
Add > Game Object > Component > Emit Particles
We’ll use it to start a hit particle effect on the target.
- Emit
Enable this setting. - Stop Before Start
Enable this setting. - Object
Select Selected Data. - Data Key
Set to hitObject. - Data Origin
Select Local. - Child Object
Set to HitParticles.
Call Function
Add > Function > Call Function
We’ll use it to set the line renderer’s end position to the point we hit with the raycast.
This node is connected to the previous node and the Failed slot of the Raycast node.
Function Settings
- Class Name
Set to LineRenderer. - Function Name
Set to SetPosition.
Click on Add Parameter to add a parameter.
- Parameter Type
Select Int. - Int/Float Value
Set to 1 (Value).
Click on Add Parameter again.
- Parameter Type
Select Vector3. - Vector3 Type
Select Vector3 Variable. - Variable Key
Set to hit. - Variable Origin
Select Local.
Target Object
- Object
Select Machine Object.
Start Tagged Machine
Add > Machine > Start Tagged Machine
We’ll use it to start a tagged machine that disables the light and line renderer of the gun after a short time. This is separated from this schematic to prevent extending the fire rate.
- Wait
Disable 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 disableEffects.
Wait
Add > Base > Wait
This node is used to wait for some time. We’ll use it to wait for the player’s fire timeout (object variable).
- Time (s)
Select Float Variable. - Variable Key
Set to fireTimeout. - Variable Origin
Select Object. - Object
Select Player.
And that’s it for the schematic – click on Save Schematic and save it as PlayerShooting in Assets/Schematics/.
Player Shooting: Interaction Machine
The PlayerShooting schematic will be added to the player’s gun. Select the GunBarrelEnd game object, a child object of the player’s game object.
Add an Interaction Machine component to the game object (e.g. using the component menu: Makinom > Machines > Interaction Machine). Change the following settings.
Start Settings
- Key Press
Enable this setting. - Input Key
Select Fire.
Machine Execution Settings
- Asset Type
Select Schematic. - Schematic Asset
Select PlayerShooting. - Execution Type
Select Single. - Update Type
Select Update.
Condition Settings
We’ll only want the controls to work while the player is alive, i.e. we need to check the health of the player.
- Check Variables
Enable this setting.
Click on Add Variable to add a variable condition.
- Condition Type
Select Variable. - Variable Key
Set to health.
Use the Value string type. - Variable Origin
Select Object. - Game Object
Select Player. - Is Valid
Enable this setting. - Exists
Enable this setting. - Type
Select Int. - Check Type
Select Is Greater. - Check Value
Set to 0 (Value).
Local Start Variables
The Machine Start Variable we’ve set up in the schematic is automatically added here with its default values. Make sure the variable is enabled.
- damage
We can keep the default value of 20.
Disable Gun Effects: Schematic
Now it’s time to create the schematic to end the gun effects (i.e. disable light and line renderer components).
Open the Makinom editor, navigate to Schematics and create a new schematic. Change the following settings.
Enable Component
Add > Game Object > Component > Enable Component
We’ll use this node to disable the light component.
- Component Name
Set to Light. - Enable/Disable
Disable this setting. - Object
Select Machine Object.
Enable Component
Add > Game Object > Component > Enable Component
We’ll use this node to disable the line renderer component.
- Component Name
Set to LineRenderer. - Enable/Disable
Disable this setting. - Object
Select Machine Object.
And that’s it for the schematic – click on Save Schematic and save it as DisableGunEffects in Assets/Schematics/.
Disable Gun Effects: Tagged Machine
Finally, we’ll add the DisableGunEffects schematic to the gun using a tagged machine. Again, select the GunBarrelEnd child game object of the player and add a tagged machine component (e.g. using the component menu: Makinom > Machines > Tagged Machine).
Change the following settings.
Start Settings
Click on Add Starting Tag to add a tag that can start this machine.
- Starting Tag
Set to disableEffects.
Machine Execution Settings
- Asset Type
Select Schematics. - Schematics Asset
Select DisableGunEffects. - Execution Type
Select Single. - Update Type
Select Update. - Start Delay Time (s)
Set to 0.02.
The machine’s start will be delayed for a short amount of time, allowing the effects to display for a flash.
And that’s it for now – apply the changes to the prefab by clicking on Apply (top of the inspector).
Don’t forget to save the scene.
Testing
Click on Play to test the game. You’ll be able to shoot the gun by clicking the left mouse button (Fire input key).
The next tutorial will handle enemy game mechanics.