Visualizzazione post con etichetta scripting unity 3D. Mostra tutti i post
Visualizzazione post con etichetta scripting unity 3D. Mostra tutti i post

martedì 28 giugno 2011

Manipolare il Transform di un GameObject

Transform contiene tutte le informazioni su posizione, rotazione e scala di un oggetto tridimensionale (o GameObject): di seguito riporto le istruzioni utili per manipolarle. Ovviamente a queste tre corrispondenti variabili è necessario assegnare un oggetto vettore (Vector3) o, se si tratta di una rotazione, di un Quaternion:

transform.position = Vector3(0, 0, 0);
transform.rotation = Quaternion.identity; //means no rotation
transform.localScale += Vector3(0.1,0,0);


Introdurre il tempo nel codice

Come nella programmazione concorrente esiste la funzione yield - scritta senza () - che serve ad impostare un' attesa, nell'esecuzione del codice, di tot frame:

function Update(){
...
yield; //attende un frame
yield WaitForSeconds (2); //attende 2 secondi
...
}

Variabili globali (o statiche)

La variabile qualcosa è impostata come statica nello Script1.js:
 
static var qualcosa = 5;

Questo significa che esternamente a Script1.js potrò accedervi con la seguente notazione:
variable name.print(Script1.qualcosa);
Script1.qualcosa++;

Distanza tra due GameObject

Credo che il seguente esempio sia piuttosto esplicativo di come si possano utilizza la funzione di distanza tra due vettori dello spazio tridimensionale (anche se qui, di fatto, calcola la distanza tra due "punti": il nostro giocatore ed un oggetto nemico):

var enemy : Transform;

function Update() {
if ( Vector3.Distance( enemy.position, transform.position ) < 10 )
print("I sense the enemy is near!");
}

Identificare GameObject per tag o per nome

Possiamo riferire un certo GameObject nella scena corrente in uno di questi modi:

var someGuy = GameObject.Find("SomeGuy");
var player = GameObject.FindWithTag("Player");

La differenza sta nel fatto che "SomeGuy" si assume essere un nome univoco, e "Player" un tag che identifica un gruppo di oggetti. Facendo un parallelo con il CSS, si puo' pensare ai nomi Unity3D come a ID ed i tag come a classi.

lunedì 27 giugno 2011

Muovere i GameObject (Operazioni di base)

Dopo aver associato lo script all'oggetto possiamo fare le seguenti operazioni tipiche.

Ruotare un oggetto:

function Update() {
transform.Rotate(0, 5, 0);
}


Muovere in avanti un oggetto:

function Update() {
transform.Translate(0, 0, 2);
}

Awake(), Update(), Start() FixedUpdate() (funzioni di base)

Si tratta delle tre funzioni basilari che vengono utilizzate per decidere il comportamento (o behaviour) dei GameObject: la prima, cioè Update() effettua periodicamente la sequenza di comandi inclusa tra le sue parentesi graffe, analogamente a ciò che fa FixedUpdate(), che invece utilizza un tempo fisico. Ricordiamo che tutto quello presente in queste funzioni viene verificato o eseguito periodicamente.

Awake() invece, per chi fosse familiare con la programmazione ad oggetti è una sorta di costruttore, ovvero viene richiamato una singola volta all'inizio, quando si decide quanto debba valere all'istante 0 una certa variabile di tipo generico.

Di seguito Awake() viene utilizzato per inizializzare il target, operazione tipica che viene fatta allo scopo di identificare la posizione del player.

private var target : GameObject;

function Awake () {
target = GameObject.FindWithTag ("Player");
}

Start() è simile, con la differenza che viene richiamato prima di fare la prima volta Update().

sabato 25 giugno 2011

Errori di compilazione in Unity 3D

Un errore di compilazione viene notificato non appena si prova a premere il tasto "Play" per provare la scena del gioco appena creato; a differenza degli errori a run-time, che si possono verificare soltanto durante lo svolgimento dello stesso, quelli di compilazione vengono notificati immediatamente.

La loro natura, dunque, è facile da correggere visto che nella console in basso normalmente viene segnalata la riga in cui si verifica l'errore, che sarà tipicamente di sintassi (parole scritte male, punti e virgola mancanti ecc. Dopo aver corretto tornerà tutto normale e sarà possibile proseguire il lavoro.