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’