Project
Space Shooter
Game Setup, Player and Camera
Tutorial
Beginner
1 Hour40 Mins
Unity Technologies
Summary
First tutorial in the Space Shooter project. Covers setting up the project in Unity, creating the player Game Object, setting up the camera and scene lighting, adding a background, scripting player motion, and implementing projectiles.
Language
English
Recommended Unity Versions
5.1
1.
Setting up the project
Creating a new project, importing assets, setting the build target and other project related details.
Please note that this project was developed for Unity version 4. It currently works, and has been checked, with Unity version 5.1. Please turn annotations on while watching the video, as we can add annotations to the videos when there are discrepancies between the recorded content and the current version of Unity.

2.
The player GameObject
Setting up the Player GameObject using mesh models, colliders and other built-in components.

3.
Camera and lighting
Setting up the main camera and lighting for the scene.

4.
Adding a background
Add a background image behind the game area.

5.
Moving the player
Writing simple C# code to capture player input and move the player ship.

PlayerController

using UnityEngine; using System.Collections; [System.Serializable] public class Boundary { public float xMin, xMax, zMin, zMax; } public class PlayerController : MonoBehaviour { public float speed; public float tilt; public Boundary boundary; void FixedUpdate () { float moveHorizontal = Input.GetAxis ("Horizontal"); float moveVertical = Input.GetAxis ("Vertical"); Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical); rigidbody.velocity = movement * speed; rigidbody.position = new Vector3 ( Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax), 0.0f, Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax) ); rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt); } }

js

class Boundary { var xMin : float; var xMax : float; var zMin : float; var zMax : float; } var speed : float; var tilt : float; var boundary : Boundary; function FixedUpdate () { var moveHorizontal : float= Input.GetAxis ("Horizontal"); var moveVertical : float= Input.GetAxis ("Vertical"); var movement : Vector3= new Vector3 (moveHorizontal, 0.0f, moveVertical); rigidbody.velocity = movement * speed; rigidbody.position = new Vector3 ( Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax), 0.0f, Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax) ); rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt); }

boo

import UnityEngine import System.Collections [System.Serializable] public class Boundary: public xMin as single public xMax as single public zMin as single public zMax as single public class PlayerController(MonoBehaviour): public speed as single public tilt as single public boundary as Boundary private def FixedUpdate(): moveHorizontal as single = Input.GetAxis('Horizontal') moveVertical as single = Input.GetAxis('Vertical') movement = Vector3(moveHorizontal, 0.0F, moveVertical) rigidbody.velocity = (movement * speed) rigidbody.position = Vector3(Mathf.Clamp(rigidbody.position.x, boundary.xMin, boundary.xMax), 0.0F, Mathf.Clamp(rigidbody.position.z, boundary.zMin, boundary.zMax)) rigidbody.rotation = Quaternion.Euler(0.0F, 0.0F, (rigidbody.velocity.x * (-tilt)))

6.
Creating shots
Creating shots by assembling artwork, physics components and custom C# code.

Mover

using UnityEngine; using System.Collections; public class Mover : MonoBehaviour { public float speed; void Start () { rigidbody.velocity = transform.forward * speed; } }

js

var speed : float; function Start () : void { rigidbody.velocity = transform.forward * speed; }

boo

import UnityEngine import System.Collections public class Mover(MonoBehaviour): public speed as single private def Start(): rigidbody.velocity = (transform.forward * speed)

7.
Shooting shots
Writing the code and setting up the scene to shoot shots.

PlayerController

using UnityEngine; using System.Collections; [System.Serializable] public class Boundary { public float xMin, xMax, zMin, zMax; } public class PlayerController : MonoBehaviour { public float speed; public float tilt; public Boundary boundary; public GameObject shot; public Transform shotSpawn; public float fireRate; private float nextFire; void Update () { if (Input.GetButton("Fire1") && Time.time > nextFire) { nextFire = Time.time + fireRate; Instantiate(shot, shotSpawn.position, shotSpawn.rotation); } } void FixedUpdate () { float moveHorizontal = Input.GetAxis ("Horizontal"); float moveVertical = Input.GetAxis ("Vertical"); Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical); rigidbody.velocity = movement * speed; rigidbody.position = new Vector3 ( Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax), 0.0f, Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax) ); rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt); } }

js

class Boundary { var xMin : float; var xMax : float; var zMin : float; var zMax : float; } var speed : float; var tilt : float; var boundary : Boundary; var shot : GameObject; var shotSpawn : Transform; var fireRate : float; private var nextFire : float; function Update () { if (Input.GetButton("Fire1") && Time.time > nextFire) { nextFire = Time.time + fireRate; Instantiate(shot, shotSpawn.position, shotSpawn.rotation); } } function FixedUpdate () { var moveHorizontal : float= Input.GetAxis ("Horizontal"); var moveVertical : float= Input.GetAxis ("Vertical"); var movement : Vector3= new Vector3 (moveHorizontal, 0.0f, moveVertical); rigidbody.velocity = movement * speed; rigidbody.position = new Vector3 ( Mathf.Clamp (rigidbody.position.x, boundary.xMin, boundary.xMax), 0.0f, Mathf.Clamp (rigidbody.position.z, boundary.zMin, boundary.zMax) ); rigidbody.rotation = Quaternion.Euler (0.0f, 0.0f, rigidbody.velocity.x * -tilt); }

boo

import UnityEngine import System.Collections [System.Serializable] public class Boundary: public xMin as single public xMax as single public zMin as single public zMax as single public class PlayerController(MonoBehaviour): public speed as single public tilt as single public boundary as Boundary public shot as GameObject public shotSpawn as Transform public fireRate as single private nextFire as single private def Update(): if Input.GetButton('Fire1') and (Time.time > nextFire): nextFire = (Time.time + fireRate) Instantiate(shot, shotSpawn.position, shotSpawn.rotation) private def FixedUpdate(): moveHorizontal as single = Input.GetAxis('Horizontal') moveVertical as single = Input.GetAxis('Vertical') movement = Vector3(moveHorizontal, 0.0F, moveVertical) rigidbody.velocity = (movement * speed) rigidbody.position = Vector3(Mathf.Clamp(rigidbody.position.x, boundary.xMin, boundary.xMax), 0.0F, Mathf.Clamp(rigidbody.position.z, boundary.zMin, boundary.zMax)) rigidbody.rotation = Quaternion.Euler(0.0F, 0.0F, (rigidbody.velocity.x * (-tilt)))

Woohoo! You nailed this tutorial.
Continue rocking your Space Shooter project.
Next Step:
Boundaries, Hazards and Enemies
Tutorial
Beginner
50 Mins
Unity Technologies