8. ESTRUCTURA VECTOR3(III)










Scale:

function Scale (scale : Vector3) : void


Multiplica el Vector3 que llama la función por el Vector3 que le pasamos a dicha función como parámetro.

Lo veremos mejor con un ejemplo. Vamos a darle un meneo de nuevo a nuestro script. Tecleamos:


var unObjeto : GameObject;
var miVector : Vector3;

miVector = unObjeto.transform.position = Vector3(2.0, 1.0, 3.0);
Debug.Log("Magnitud inicial del cubo " +miVector.magnitude);

miVector.Scale(Vector3(3.0, 1.5, 2.0));
unObjeto.transform.position = miVector;

Debug.Log("Magnitud final del cubo " +miVector.magnitude);


Antes que nada vamos a explicar lo que pretendemos hacer: dejamos expuesta la variable unObjeto para arrastrar con posterioridad nuestro cubo desde el inspector. Asimismo declaramos una variable para sostener el valor original y modificado para un vector3.

Aunque aún no lo hemos estudiado, a nadie sorprenderá que los diferentes gameobjects que ocupan la escena han de ir ineludiblemente vinculados a un objeto transform, el cual a su vez es el que sirve para fijar en qué punto del espacio 3D se halla el gameobject. Así, para obtener o indicar la posición de un gameobject en el espacio usaríamos la sintaxis gameobject.transform.position. Se da la circunstancia que la variable position de la clase transform es de tipo Vector3, por lo que nos sirve para nuestro ejemplo.

Hacemos una iniciación doble, de tal manera que damos unos valores a nuestro Vector3 miVector, que a su vez tendrá el mismo valor que le damos a la posición actual del cubo. Obtenemos la magnitud de dicho vector y la imprimimos.

Luego usamos la función Scale, y la magnitud del vector modificado es impreso de nuevo, y a la par el cubo se desplaza por segunda vez.

Obtendremos al darle al play un resultado como este



Si nos fijamos en la parte inferior de la ventana Game, sólo aparece impresa la magnitud final del vector de nuestro cubo. Para ver también el valor inicial, hemos de hacer un click sobre dicho texto impreso, de tal suerte que nos aparecerá una ventana emergente con ambos valores, tal como mostramos:



La función Scale tiene un segundo prototipo, que es el que sigue

static function Scale (a : Vector3, b : Vector3) : Vector3


El fin último es, al igual que en la función homónima, multiplicar dos vectores. La diferencia es que aquí pasamos expresamente los dos vectores que queremos multiplicar entre sí. También difieren ambas funciones en que la primera no devuelve ningún valor (el cambio resultante de la multiplicación es directamente asignado al objeto que la llama) y esta en cambio sí devuelve un Vector3 con el resultado, que podemos por lo tanto asignar a una variable.


Normalize:

function Normalize () : void


Esta función hace que el Vector3 que la llama pase a tener una magnitude de 1, conservando, eso sí, la misma dirección. Como decimos, esta función cambia el vector que la llama; si lo que pretendemos es conservar sin cambios el vector corriente y crear un nuevo vector normalizado, hemos de usar -como ya aprendimos en el capítulo anterior- la variable normalized.


ToString:

function ToString () : String


Devuelve nuestro vector convertido en un string y formateado.

Para ver como funciona, añadamos al final del script que usamos en el ejemplo anterior la siguiente línea:


ebug.Log("Mi vector como string formateado: " + miVector.ToString());


Veremos que nos aparece el vector resultado de la multiplicación del anterior ejemplo convertido en un string que podemos imprimir.

Dejamos para el próximo capítulo las dos funciones de clase que nos restan para acabar la explicación de la estructura Vector3.

POSTED BY UnityScripts
DISCUSSION 2 Comments

2 Responses to : 8. ESTRUCTURA VECTOR3(III)

  1. ancestro says:

    Error de sintaxis en último código: Cambiar "ebug" por "Debug".

  2. En C# quedaría de la siguiente manera:

    using UnityEngine;
    using System.Collections;

    public class EntendiendoVector3 : MonoBehaviour {

    public GameObject UnObjeto;
    Vector3 miVector;

    void Start () {
    UnObjeto.transform.position = new Vector3 (2.0f, 1.0f, 3.0f);
    miVector = UnObjeto.transform.position;
    Debug.Log ("Magnitud inicial del cubo " + miVector.magnitude);
    miVector.Scale (new Vector3 (3.0f, 1.5f, 2.0f));
    UnObjeto.transform.position = miVector;
    Debug.Log ("Magnitud final del cubo: " + miVector.magnitude);
    Debug.Log ("Mi vector como string formateado: " + miVector.ToString());
    }

    void Update () {}
    }

Leave a Reply

Con la tecnología de Blogger.