Unity 3D Game Engine – JavaScript – Properties

Una pratica comune consiste nel poter accedere ad una variabile definita in una classe pubblica esterna.
Per fare questo si può creare una variabile pubblica – public – ed accedervi direttamente, ma c’è un sistema migliore, usare le – Properties –
Incapsulare i dati tramite le Properties fornisce un maggiore controllo sulla struttura del codice.

Vediamo il codice:

Player.js, applicato al Player


#pragma strict

public class Player
{
    //Member variables can be referred to as
    //fields.
    //definisco la variabile
    var experience : int;
    
    //Experience is a basic property
    //Experience è la proprietà di base
    // Chiamo la proprietà con il nome della variabile, con la lettera maiuscola
    public function get Experience() : int
    {
	// altro codice aggiuntivo per fare altre operazioni
        return experience;
    }
    
    public function set Experience(value : int)
    {
	// altro codice aggiuntivo per fare altre operazioni
        experience = value;
    }
    
    //Level is a property that converts experience
    //points into the leve of a player automatically
    public function get Level() : int
    {
        return experience / 1000; // il livello è uguale experience/1000
    }
    
    public function set Level(value : int)
    {
        experience = value * 1000;
    }
    
    //Auto-implemented properties are not a feature of the
    //Javascript language.
}

Game.js, applicato ad un Empty Object


#pragma strict

function Start () 
{
    var myPlayer = new Player();
    
    //Properties can be used just like variables
    myPlayer.Experience = 5;
    var x : int = myPlayer.Experience;
    
    print(x);
}

Come funziona?

Game.js:

1. Al caricamento del gioco si avvia la funziona Start() prima du qualunque altra funzione

2. Uso la classe pubblica Player() come una variabile e la dichiaro – var myPlayer = new Player(); –

3. La Proprietà della classe pubblica Player().Experience ha un valore iniziale di 5, poi varierà il suo valore in base alle operazioni eseguite all’interno di essa

4. Visualizzo – print – in valore della Proprietà .Experience

Player.js

1. Definisco una classe pubblica Player(), pubblica significa che posso accedere ai valori delle sue proprietà da qualsiasi script all’interno del gioco!

Definisco la variabile integer experience, che cambia in base ai bonus raccolti, le ore di gioco etc…, con operazioni che ora non adiamo a definire, ci basti sapere che varia durante il gioco.

2. All’interno della classe Player() c’è la proprietà Experiance() (Notare che per convenzione si utilizza il nome della variabile scritta in minuscolo, e quello della Proprietà con lo stesso nome ma con l’iniziale in Maiuscolo) che restituisce in uscita – return – il valore della variabile experiance:


public function get Experience() : int
    {
        return experience;
    }

3. La proprietà Experiance() setta il valore – value – integer della Proprietà uguale al valore della variabile experience

in:


  public function set Experience(value : int)
    {
        experience = value;
    }

experience = value; -> il valore in uscita della proprietà Experiance (value : int) è uguale alla variabile experiance.
value è una keyword!!!

4. Altre considerazioni:
all’interno delle 2 funzioni che compongono una Proprietà (set + get -> return) si possono applicare delle operazioni matematiche come ad esempio:


 public function get Level() : int
    {
        return experience / 1000;
    }
    
    public function set Level(value : int)
    {
        experience = value * 1000;
    }

se volessi richiamare questi valori da Game.js scriverei:


#pragma strict

function Start () 
{
    var myPlayer = new Player();
    
    //Properties can be used just like variables
    myPlayer.Level = 1;
    var y : int = myPlayer.Level;
    
    print(y);
}