domenica 1 dicembre 2013

Comunicazione tra Script > Unity3d

Esclusivamente per i miei fellow amici italici riporterò di seguito parte della mia tesi che discute in maniera breve ma concisa uno dei concetti fondamentali di Unity3d. Si parlerà di comunicazione tra i vari script presenti nella scena associati ai vari gameObjects. Un qualsiasi script “attaccato” ad un oggetto nella scena, viene trattato come un componente, quando si crea un nuovo script questo diventa immediatamente un nuovo “tipo” identificato dal nome dato allo stesso. Possiamo accedere a funzioni e proprietà pubbliche del component di un determinato oggetto semplicemente richiamando GetComponent. Per evitare di passare dal componente è possibile utilizzare la funzione SendMessage derivabile dal gameobject, questa si occupa di cercare ed eseguire la funzione il cui nome gli viene passato in input (appartenente a qualsiasi script attaccato a quell’oggetto). Nell’esempio vediamo come è possibile trovare da codice un oggetto nella scena e richiamarne a seguito una sua funzione.
function Start()
{
    var controlCenter : GameObject; //dichiaro una variabile di tipo GameObject
    controlCenter = GameObject.Find("ControlCenter"); //restituisce l'oggetto ControlCenter della scena
    controlCenter.GetComponent(MusicCenter).toogle_music = true; //modifico una proprietà dello script
    
    controlCenter.SendMessage("set_music", true); 
    //richiamo la funzione set_music da qualsiasi script del controlCenter
    //set_music prende in input un booleano, lo passo come secondo parametro di SendMessage
}

Tramite le funzioni Find e FindGameObjectsWithTag della classe GameObject è possibile ottenere i riferimenti agli oggetti presenti nella scena. Ogni proprietà a cui accediamo tramite GetComponent deve essere public o internal.