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’