Unity – Spaceship Shooting Game – JS – Laser Bolt
1. Create the Prefab ‘Bolt’
2. The prefabs needs inside Inspector:
– Transform
– Rigid Body
– Capsule Collider: check ‘Is Trigger’
– Mover.js
#pragma strict
var speed : float; // Assign this inside Inspector
function Start () : void {
// forward is the Z Axis
rigidbody.velocity = transform.forward * speed;
}
Inspector> Mover (Script)
– Speed: 20
3. Create a Prefab ‘Player’ (it is the spaceship)
4. Create an Empty Object ‘Shot Spawn’ (produttore di spari)
5. DRAG AND DROP ‘Shot Spawn’ over Hierarchy> ‘Player’, now ‘Shot Spawn’ is child of ‘Player’
6. DRAG AND DROP ‘Bolt Prefab’ over Hierarchy> ‘Shot Spawn’, now ‘Bolt Prefab’ is child of ‘Shot Spawn’
At the end the Hierarchy will be:
Player
– Shot Spawn
– Bolt Prefab
Assign to ‘Player’ PlayerController.js:
#pragma strict
class Boundary
{
// Theese variables are public to make the code easy-reusable
// You can setup theese variables from Inspector
var xMin : float;
var xMax : float;
var zMin : float;
var zMax : float;
}
var speed : float;
var tilt : float;
var boundary : Boundary;
var shot : GameObject; // Inspector -> assign Bolt Prefab
var shotSpawn : Transform; // Inspector -> assign Shot Spawn Empty Object
var fireRate : float; // Inspector -> 0.25 (seconds) = 4 shot per second
private var nextFire : float;
function Update () {
// Get Input Fire button
if (Input.GetButton("Fire1") && Time.time > nextFire)
{
nextFire = Time.time + fireRate;
// Return the clone of the GameObject, position, rotation if user click Fire button
Instantiate(shot, shotSpawn.position, shotSpawn.rotation);
// Assign an audio file inside Inspector
audio.Play ();
}
}
function FixedUpdate () {
// Get User Input START
var moveHorizontal : float= Input.GetAxis ("Horizontal");
var moveVertical : float= Input.GetAxis ("Vertical");
// Get User Input END
// Move the GameObject
var movement : Vector3= new Vector3 (moveHorizontal, 0.0f, moveVertical);
rigidbody.velocity = movement * speed;
// Limitate movement inside the screen START
rigidbody.position = new Vector3
(
Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax),
0.0f,
Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax)
);
// Limitate movement inside the screen END
// Tilt movement START
rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt);
// Tilt movement END
}
Hierarchy> Player> Shot Spawn> Bolt CANC to delete
Se non si cancella questo oggetto, all’inizio del gioco la nostra astronave sparerà subito un colpo, invece noi vogliamo che non vengano emessi colpi fino a che il tasto fire resta inutilizzato.
7. MAIN tOP MENU> GameObject> Cube and name it ‘Boundary’
8. Hierarchy> select ‘Cube’> Inspector>
– Transform> small gear icon> Reset
– Mesh Render> uncheck
– Box Collider> check ‘Is Trigger’
9. Scale the box to surround all your game area
10. Create and assign to ‘Boundary’ DestroyByBoundary.js
#pragma strict
// Destroy Game Objects START
function OnTriggerExit(other : Collider)
{
// Destroy all GameObjects WITH COLLIDER that run away THIS Collider
// The GameObject WITHOUT COLLIDER will not be detroyed!!!
Destroy(other.gameObject);
}
// Destroy Game Objects END
11. Hierarchy> ‘Boundary’> Inspector> Remove ‘Mesh Filter”Mesh Renderer’