ATTENTION PLEASE:
If you wanna learn official tutorials, please single click the hyperlink below. This blog is just used to MAKE PDF for learning.
CREATING A BREAKOUT GAME FOR BEGINNERS
In this live training session we look at creating a Breakout style game including basic game mechanics, user interface and a game manager script.
Paddle
using UnityEngine;
using System.Collections;
public class Paddle : MonoBehaviour {
public float paddleSpeed = 1f;
private Vector3 playerPos = new Vector3 (0, -9.5f, 0);
void Update ()
{
float xPos = transform.position.x + (Input.GetAxis("Horizontal") * paddleSpeed);
playerPos = new Vector3 (Mathf.Clamp (xPos, -8f, 8f), -9.5f, 0f);
transform.position = playerPos;
}
}
Ball
using UnityEngine;
using System.Collections;
public class Ball : MonoBehaviour {
public float ballInitialVelocity = 600f;
private Rigidbody rb;
private bool ballInPlay;
void Awake () {
rb = GetComponent<Rigidbody>();
}
void Update () {
if (Input.GetButtonDown("Fire1") && ballInPlay == false)
{
transform.parent = null;
ballInPlay = true;
rb.isKinematic = false;
rb.AddForce(new Vector3(ballInitialVelocity, ballInitialVelocity, 0));
}
}
}
GM
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class GM : MonoBehaviour {
public int lives = 3;
public int bricks = 20;
public float resetDelay = 1f;
public Text livesText;
public GameObject gameOver;
public GameObject youWon;
public GameObject bricksPrefab;
public GameObject paddle;
public GameObject deathParticles;
public static GM instance = null;
private GameObject clonePaddle;
// Use this for initialization
void Awake () {
if (instance == null)
instance = this;
else if (instance != this)
Destroy (gameObject);
Setup();
}
public void Setup(){
clonePaddle = Instantiate(paddle, transform.position, Quaternion.identity) as GameObject;
Instantiate(bricksPrefab, transform.position, Quaternion.identity);
}
void CheckGameOver(){
if (bricks < 1){
youWon.SetActive(true);
Time.timeScale = .25f;
Invoke ("Reset", resetDelay);
}
if (lives < 1){
gameOver.SetActive(true);
Time.timeScale = .25f;
Invoke ("Reset", resetDelay);
}
}
void Reset(){
Time.timeScale = 1f;
Application.LoadLevel(Application.loadedLevel);
}
public void LoseLife(){
lives--;
livesText.text = "Lives: " + lives;
Instantiate(deathParticles, clonePaddle.transform.position, Quaternion.identity);
Destroy(clonePaddle);
Invoke ("SetupPaddle", resetDelay);
CheckGameOver();
}
void SetupPaddle(){
clonePaddle = Instantiate(paddle, transform.position, Quaternion.identity) as GameObject;
}
public void DestroyBrick(){
bricks--;
CheckGameOver();
}
}
Bricks
using UnityEngine;
using System.Collections;
public class Bricks : MonoBehaviour {
public GameObject brickParticle;
void OnCollisionEnter (Collision other) {
Instantiate(brickParticle, transform.position, Quaternion.identity);
GM.instance.DestroyBrick();
Destroy(gameObject);
}
}
DeadZone
using UnityEngine;
using System.Collections;
public class DeadZone : MonoBehaviour {
void OnTriggerEnter (Collider col){
GM.instance.LoseLife();
}
}
TimedDestory
using UnityEngine;
using System.Collections;
public class TimedDestroy : MonoBehaviour {
public float destroyTime = 1f;
// Use this for initialization
void Start () {
Destroy (gameObject, destroyTime);
}
}