mercoledì 30 ottobre 2013

Vector3, muovere un oggetto > Unity3D


Fondamentale per ogni buon programmatore di videogiochi è capire come funzionano i vettori. Ogni game object nella scena presenta di default il componente Transform, al suo interno tre diversi oggetti di tipo Vector3 sono accessibili per poterne definire posizione, dimensione e grandezza nello spazio. 
function Start () {
    var pos : Vector3 = Vector3(5,5,5);
    pos.x += 15;
    var dim : Vector3 = Vector3(2,2,2);
    var rot : Vector3 = Vector3(90,0,0);
    //assegno i valori al mio gameobject
    transform.position = pos;
    transform.localScale = dim;
    //Passiamo da angoli di Euler a Quaternion
    transform.rotation = Quaternion.FromToRotation(rot, Vector3.up);
}
Vector3 è l’oggetto utilizzato per instanziare un nuovo vettore, questi può essere utilizzato non solo per definire una posizione, ma anche uno spostamento, contenendo informazioni sulla direzione, verso e intensità del movimento. Lo stesso discorso si può applicare anche alla rotazione e alla dimensione del game object, diciamo che in generale un vettore può essere utilizzato per creare delle semplici trasformazioni su di essi. Nell’esempio vediamo come è possibile spostare un oggetto della scena in una direzione, ricordandoci di utilizzare la variabile deltaTime della classe Time, che permette di rendere uniforme il movimento per ogni diverso tipo di processore.
function Update () {
    muovi(Vector3.up, 0.5);
}
function muovi(dir : Vector3, speed : float)
{
    //sfrutto solo il verso del vettore
    //e lo moltiplico per una mia intensità
    dir = dir.normalized * speed;
    transform.position += dir * Time.deltaTime;
}


Matematicamente è possibile calcolare una direzione dati due punti semplicemente effenduandone la differenza, la direzione di questo vettore è la retta passante per i due punti, il verso è diretto verso il punto sottratto e l’intensità è proporzionale alla distranza tra i due punti.

----------------------------------------------------

Preso direttamente dalla mia tesi, ragionamento molto base, utile per chi si avvicina per la prima volta a Unity3D. Per approfondimenti guardare questo link.
For english readers just look at this page: http://docs.unity3d.com/Documentation/Manual/DirectionDistanceFromOneObjectToAnother.html