Unity 3D Game Engine – JavaScripts – Statics
Solitamente se una stessa variabile si trova all’interno di classi diverse, questa assume valori diversi per ogni classe.
Se una variabile è statica invece ha avrà lo stesso valore anche se appartiene a classi differenti.
Cambiare il valore di una variabile statica all’interno di una classe equivale a cambiarne il valore all’interno di tutte le altre classi.
Vediamo un esempio
Enemy
#pragma strict public class Enemy { //Static variables are shared across all instances //of a class. public static var enemyCount : int = 0; function Enemy() { //Increment the static variable to know how many //objects of this class have been created. enemyCount++; } }
Game
#pragma strict public class Game { function Start () { var enemy1 = new Enemy(); var enemy2 = new Enemy(); var enemy3 = new Enemy(); //You can access a static variable by using the class name //and the dot operator. var x : int = Enemy.enemyCount; } }
Player
#pragma strict public class Player extends MonoBehaviour { //Static variables are shared across all instances //of a class. public static var playerCount : int = 0; function Start() { //Increment the static variable to know how many //objects of this class have been created. playerCount++; } }
PlayerManager
#pragma strict function Start () { //You can access a static variable by using the class name //and the dot operator. var x : int = Player.playerCount; }
Come funziona?
1. Enemy
– definisco una classe pubblica ‘Enemy’ perchè sia accessibile da qualunque script
– definisco una variabile statica ‘enemyCount’
– incremento di +1 ‘enemyCount’
2. Game
– definisco una classe pubblica ‘Game’
– all’inizio del gioco si avvia la funziona Start(), ogni variabile enemy1-2-3 avvia l’incremento del conteggio
– accedo alla variabile statica semplicemente con var x : int = Enemy.enemyCount; -> nomeclasse.nomevariabilestatica
3. Player
Funziona come Enemy definisce la variabile statica playerCount, poi la incrementa playerCount++
4. PlayerManager
– accedo alla variabile statica semplicemente con var x : int = Player.playerCount; -> nomeclasse.nomevariabilestatica
5. Utilities
Altri esempi
Utilities
#pragma strict public static class Utilities { //A static method can be invoked without an object //of a class. Note that static methods cannot access //non-static member variables public static function Add(num1 : int, num2 : int) : int { return num1 + num2; } }
UtilitiesExample
#pragma strict function Start () { //You can access a static method by using the class name //and the dot operator. var x : int = Utilities.Add (5, 6); }
Come funziona?
1. Utilities
– definisce una funzione statica
2. tilitiesExample
– spedisce i valori 5,6 alla classe pubblica statica Utilities.funzionepubblicastatica -> ritorna la somma 5+6 -> X = 11