space shooter tutorial, ending the game

Hello all

This is my first time posting here, so sorry if my question is dumb, or obvious.

I am currently running through the space shooter tutorial on the unity website. It’s a great tutorial and I have really enjoyed making the game, I am now on the penultimate part, titled “Ending The Game”, as far as I can tell I my code is right and everything else is too. Although obviously something is wrong.

I am trying to set up an end to the loop and to make the game restart on the press of the ‘R’ button.

Here is my GameController script

using UnityEngine;
using System.Collections;

public class GameController : MonoBehaviour
{

public GameObject hazard;
public Vector3 spawnValues;
public int hazardCount;
public float spawnWait;
public float startWait;
public float waveWait;

public GUIText scoreText;
public GUIText restartText;
public GUIText gameOverText;

private bool gameOver;
private bool restart;
private int score;


void Start ()
{
	gameOver = false;
	restart = false;
	restartText.text = "";
	gameOverText.text = "";
	score = 0;
	UpdateScore ();
	StartCoroutine (SpawnWaves ());
}

void Update ()
{
	if (restart) 
	{
		if (Input.GetKeyDown(KeyCode.R))
		{
			Application.LoadLevel(Application.loadedLevel);
		}
		
	}
}

IEnumerator SpawnWaves ()
{   
	yield return new WaitForSeconds (startWait);
	while (true)
	{
		for (int i = 0; i < hazardCount; i++) 
		{
			Vector3 spawnPosition = new Vector3 (Random.Range (-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
			Quaternion spawnRotation = Quaternion.identity;
			Instantiate (hazard, spawnPosition, spawnRotation);
			yield return new WaitForSeconds (spawnWait);
		}
		yield return new WaitForSeconds (waveWait);
		
		if (gameOver)
		{
			restartText.text = "Press 'R' for Restart";
			restart = true;
			break;
		}
	}
}

public void AddScore (int newScoreValue)
{
	score += newScoreValue;
	UpdateScore ();
	
}

void UpdateScore ()
{
	scoreText.text = "Score: " + score;
	
}
public void GameOver ()
{
	gameOverText.text = "Game Over!";
	gameOver = true;
}

}

and here is my DestroyByContact script:

using UnityEngine;
using System.Collections;

public class DestroyByContact : MonoBehaviour 
{   
	public GameObject explosion;
	public GameObject playerExplosion;
	public int scoreValue;
	private GameController gameController;
	
	void Start ()
	{
		GameObject gameControllerObject = GameObject.FindWithTag("GameController");
		if (gameControllerObject != null)
		{
			gameController = gameControllerObject.GetComponent <GameController>();	
		}
		if (gameController == null) 
		{
			Debug.Log("Cannot find 'GameController' script");
			
		}
	}
	
	void OnTriggerEnter(Collider other) {   
		if(other.tag == "Boundary") 
		{
			return;
		}
		Instantiate (explosion, transform.position, transform.rotation);
		if (other.tag == "player") 
		{
			Instantiate(playerExplosion, other.transform.position, other.transform.rotation); 
			gameController.GameOver ();
		}
		gameController.AddScore (scoreValue);
		Destroy(other.gameObject);
		Destroy(gameObject);
	}
	
}

Any help would be very much appreciated.

All the best

Harry

The object that has DestroyByContact needs to have a “player” tag. This is case sensitive.

In the collision trigger, you check “if (other.tag == “player”)”. This tag is usually “Player” with a capital P.

Also make sure your collider has “isTrigger” checked in the inspector. Otherwise the function called is OnCollisionEnter instead of OnTriggerEnter.

For reference here is where you set tags:
20771-tag.png