Unity – Spaceship Shooting Game – JS – Scores
You scores will increase when an Asteroid Explode
Create the GUI Text
MAIN TOP MENU> GameObjects> Create Other> GUI Text, rename it ‘Score Text’
NOTICE:
GUI Text> Transform Component
– it does not use ‘Screen Space’ in Pixels 600x900px
– it use the ‘Viewport Space’ =
– lower left corner 0,0
– upper right corner 1,1
– upper left corner 0,1
– middle of the viewport 0.5,0.5
Perfezioniamo la posizione utilizzando un valore in pixel ammesso da:
GUI Text> GUI Text Component
– Pixel Offset 10,-10
Scripts
Hierarchy> Game Controller> GameController.js
#pragma strict
var hazard : GameObject;
var spawnValues : Vector3;
var hazardCount : int;
var spawnWait : float;
var startWait : float;
var waveWait : float;
// Hierarchy DRAG E DROP un GUI Text in Inspector
var scoreText : GUIText;
// contatore di punteggio, private perchè non vogliamo che sia modificabile da Inspector
private var score : int;
function Start () {
// Il punteggio iniziale è zero
score = 0;
// poi viene richiamata ogni frame la funzione UpdateScore()
// che scrive a video il punteggio
UpdateScore ();
StartCoroutine (SpawnWaves ());
}
function SpawnWaves () {
yield WaitForSeconds (startWait);
while (true)
{
for ( var i : int= 0; i < hazardCount; i++)
{
var spawnPosition : Vector3= new Vector3 (Random.Range (-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
var spawnRotation : Quaternion= Quaternion.identity;
Instantiate (hazard, spawnPosition, spawnRotation);
yield WaitForSeconds (spawnWait);
}
yield WaitForSeconds (waveWait);
}
}
function AddScore (newScoreValue : int) {
// aggiorna score aggiungendo il valore newScoreValue
// che gli viene inviato da DestroyByContact.js
// alla riga: - gameController.AddScore (scoreValue); -
score += newScoreValue;
// e scrive a video il punteggio
UpdateScore ();
}
function UpdateScore () {
// a scoreText viene assegnato in Inspector un GUI Text
// ne modifico la proprietà .text scrivendo il punteggio attuale Score: 10
scoreText.text = "Score: " + score;
}
NOTICE: tag the Game Controller object – GameController
Inspector> Game Controller (Script)> Score Text> DRAG ANd DROP ‘Score Text’ (GUI Text)
Prefab> Asteroid> DestroyByContact.js
#pragma strict
var explosion : GameObject;
var playerExplosion : GameObject;
// Assegnato in Inspector è l'incremento di punteggio per ogni esplosione
var scoreValue : int;
// variabile privata, non visibile in Inspector
private var gameController : GameController;
function Start ()
{
// inserisco in una variabile l'oggetto con tag GameController
var gameControllerObject : GameObject = GameObject.FindWithTag ("GameController");
// se l'oggetto con tag GameController esiste lo inserisco in una variabile
if (gameControllerObject != null)
{
gameController = gameControllerObject.GetComponent (GameController);
}
// se l'oggetto con tag GameController non esiste restituisce un messaggio di errore
if (gameController == null)
{
Debug.Log ("Cannot find 'GameController' script");
}
}
function OnTriggerEnter(other : Collider)
{
if (other.tag == "Boundary")
{
return;
}
Instantiate(explosion, transform.position, transform.rotation);
if (other.tag == "Player")
{
Instantiate(playerExplosion, other.transform.position, other.transform.rotation);
}
// se la collisione è presente e viene istanziata l'esplosione
// dello script taggato GameController richiama la funzione AddScore
// e gli invia il parametro scoreValue, cioè l'incremento di punteggio per ogni asteroide esploso
gameController.AddScore (scoreValue);
Destroy(other.gameObject);
Destroy(gameObject);
}
Inspector> Destroy By Contact (Script)> Score Value 10, every asteroid explosion you win 10+ scores
Riassumendo funziona nel seguente modo:
1. Asteroide è un Prefab, ed include lo script DestroyByContact.js
2. DestroyByContact.js
a) istanzia il VFX dell’esplosione
b) distrugge l’asteroide e l’oggetto chge lo ha urtato
c) invia a GameController.js la variabile ‘scoreValue’ alla funzione AddScore()
3. Game Controller è un oggetto vuoto con associato GameController.js
a) riceve il valore ‘scoreValue’ da DestroyByContact.js
b) ‘scoreValue’ viene ricevuto dalla funzione AddScore() e storato nella variabile ‘newScoreValue’
c) viene sommato il valore a quello esistente
d) la funzione UpdateScore() cambia il valore dell’oggetto GUIText assegnato in Inspector nella variabile ‘scoreText’