7. ESTRUCTURA VECTOR3 (II)










CONSTRUCTOR:

1)static function Vector3 (x : float, y : float, z : float) : Vector3


Como sabemos de nuestros conocimientos de programación orientada a objetos, el constructor es una función especial cuyo cometido es crear de manera adecuada las instancias/objetos de una determinada clase o estructura. La función constructora se caracteriza por tener el mismo nombre que la clase.

Tal como vemos en el prototipo de nuestro constructor, le hemos de pasar al mismo los tres componentes de nuestro punto 3D, referidos al eje horizontal, vertical y de profundidad respectivamente, en formato de punto flotante. Así:

var miPunto = Vector3(2.0, 5.0, 4.8); 


referenciamos un punto que con respecto al origen se desplazará dos unidades a la derecha, cinco hacia arriba y 4,8 hacia el fondo.

Vale, pero ¿cuál es el origen?, se preguntará alguien.

Pues depende, tendremos que responder. Si un objeto no depende de otro, entendemos por origen el punto 0,0,0 de las coordenadas globales (que es donde deberíamos tener nuestro cubo) y desde ese punto origen se calcula el desplazamiento, pero si un objeto depende de otro (recordemos el ejemplo de la rueda y el coche) caben para ese objeto dos orígenes o coordenadas diferentes: las globales (distancia de la rueda respecto del eje 0,0,0 del caso anterior) y las locales (referidas al objeto del que depende)


2)static function Vector3 (x : float, y : float) : Vector3

Como vemos, hay una segunda función constructora que no toma en cuenta el eje Z (la profundidad) asumiendo que ésta es cero. Por tanto, si a la función constructora Vector3 sólo le pasamos dos parámetros, automáticamente será llamada esta segunda versión del constructor.



VARIABLES:


x, y, z:


Estas variables se refieren a los componentes X, Y y Z del vector, respectivamente.


this:

var this[index : int] : float


Esta es otra forma para acceder a los componentes X, Y y Z del vector, siendo los respectivos índices de cada componente 0, 1 y 2.

Así, estas dos declaraciones son equivalentes:

var miVector : Vector3;

miVector.x = 3.0;
miVector[0] = 3.0; //Equivale a la anterior



magnitude:

var magnitude : float

Esta variable devuelve la longitud o tamaño de un vector. Habíamos hablado previamente de que un vector3 contiene el número de unidades que lo separan del origen dado en los ejes X, Y y Z. Obviamente, cuanta mayor es la distancia entre nuestro Vector3 y el punto de origen, mayor la longitud del vector.

La longitud del vector equivale a la raiz cuadrada de (x*x+y*y+z*z).

Soy consciente de que a estas alturas la utilidad de funciones como estas es difícil de apreciar. Con un poco de paciencia, y cuando las combinemos con otras clases, veremos el partido que se le puede sacar a todo esto.


sqrMagnitude:

var sqrMagnitude : float


Si de lo que se trata es de comparar dos vectores, es preferible usar esta función que la precedente, ya que aunque parezca antiintuitivo, Unity calcula con más rapidez los cuadrados de las magnitudes que las magnitudes en sí.


normalized:

var normalized : Vector3


Esta variable devuelve un vector con la misma dirección que el original, pero con magnitud 1. Es importante constatar que el vector original permanece inalterado y lo que se devuelve es meramente una copia que conserva la dirección de dicho original, aunque con la longitud alterada. Si en lugar de normalizar una copia quisiéramos hacer lo propio con el original, entonces tendríamos que usar la función Normalize, que veremos en breve.

Decir también que si el vector es demasiado pequeño para ser normalizado, lo que se devuelve es un vector a cero.


VARIABLES DE CLASE:


zero:

static var zero : Vector3


Es meramente un atajo para poner un vector a cero.

transform.position = Vector3.zero; 
// Es lo mismo que escribir
transform.position = Vector3(0,0,0);




one, forward, up y right:


Son respectivamente atajos para escribir Vector3(1,1,1), Vector3(0,0,1), Vector3(0,1,0) y Vector3(1,0,0).


Vamos a ver algunos de los conceptos de esta lección en un ejemplo. Abrimos nuestro script favorito y escribimos:


var unObjeto : GameObject;
var desplazamiento : Vector3;
var magnitud : int = 0;

desplazamiento = Vector3.right;

for(var contador = 0; contador < 3; contador++)
{
unObjeto.transform.position += desplazamiento;
magnitud += desplazamiento.magnitude;
Debug.Log("Longitud del Vector del cubo: " + magnitud);
}


Salvamos, arrastramos nuestro cubo para que se convierta en la variable unObjeto y le damos al play. Nuestro cubo se mueve tres unidades a la derecha y bajo la ventana Game aparece la magnitud de desplazamiento del vector.

El script funciona de la siguiente forma: Además de la variable que sostendrá a nuestro cubo, creamos una variable de tipo Vecto3 para poder almacenar a modo de impulsos maniobras de desplazamiento de una unidad a la derecha. Ese input a la derecha se lo daremos tres veces mediante un bucle for, y cada magnitud individual (que obviamente vale 1 cada vez) se acumula en una variable de tipo int que hemos creado a tal efecto.

Mañana seguimos con las funciones.

Bye.

POSTED BY UnityScripts
DISCUSSION 1 Comment

One Response to : 7. ESTRUCTURA VECTOR3 (II)

  1. En C# quedaría como:

    using UnityEngine;
    using System.Collections;

    public class EntendiendoVector3 : MonoBehaviour {

    public GameObject UnObjeto;
    Vector3 desplazamiento;
    int magnitud = 0;
    int count = 0;

    void Start () {
    desplazamiento = Vector3.right;
    for (int i=0; i < 3; i++)
    {
    UnObjeto.transform.position += desplazamiento;
    magnitud += (int)desplazamiento.magnitude;
    Debug.Log ("Longitud del Vector del cubo: " + magnitud);
    }
    }

    void Update () {}
    }

Leave a Reply

Con la tecnología de Blogger.