Vectores en unity

5
Un vector fijo del plano euclídeo es un segmento orientado, en el que hay que distinguir tres características: 1 2 3 módulo: la longitud del segmento dirección: la orientación de la recta sentido: indica cual es el origen y cual es el extremo final de la recta En inglés, la palabra "direction" indica tanto la dirección como el sentido del vector, con lo que se define el vector con solo dos características: módulo y dirección. 4 Los vectores fijos del plano se denotan con dos letras mayúsculas, por ejemplo , que indican su origen y extremo respectivamente. Características de un vector[editar ] Si representamos el vector gráficamente podemos diferenciar la recta soporte o dirección, sobre la que se traza el vector. El módulo o amplitud con una longitud proporcional al valor del vector. Por lo tanto en un vector podemos diferenciar:

description

Vectores en unity

Transcript of Vectores en unity

Page 1: Vectores en unity

Un vector fijo del plano euclídeo es un segmento orientado, en el que hay que distinguir tres características:1 2 3

módulo: la longitud del segmento

dirección: la orientación de la recta

sentido: indica cual es el origen y cual es el extremo final de la

recta

En inglés, la palabra "direction" indica tanto la dirección como el sentido del vector, con lo que se define el vector con solo dos características: módulo y dirección.4

Los vectores fijos del plano se denotan con dos letras mayúsculas, por ejemplo  , que indican su origen y extremo respectivamente.

Características de un vector[editar]

Si representamos el vector gráficamente podemos diferenciar la recta soporte o dirección, sobre la que se traza el vector.

El módulo o amplitud con una longitud proporcional al valor del vector.

Por lo tanto en un vector podemos diferenciar:

Page 2: Vectores en unity

Representación gráfica de una magnitud vectorial, con indicación de su punto de aplicación y de los versores cartesianos.

Estado 1: Chase

Su acción era rotar y avanzar, aquí es donde más problemas podremos tener. Vamos a empezar:

var Estado : int = 0;var Target: GameObject; //El objetivo

private var RotInic : Quaternion;var RotSpeed : float;private var DistanciaCont : float;var DistEnem : float = 0.5;

function Start (){ RotInic = transform.rotation;}

function Update () { if (Estado == 0) { //Se cambia mediante un disparador externo. }

if (Estado == 1) //Perseguir { //Acción //Girar y avanzar.

transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Target.transform.position - transform.position), RotSpeed * Time.deltaTime);

transform.rotation.x = RotInic.x; transform.rotation.z = RotInic.z; //Cambio de Estado y Activar siguiente animación.

controller.Move(transform.forward * VelMov * Time.deltaTime); //Aplicar gravedad controller.Move(transform.up * -gravity * Time.deltaTime);

//Cambio de Estado y Activar siguiente animación.

DistanciaCont = Vector3.Distance(Target.transform.position, transform.position);

if (DistanciaCont <= DistEnem) { Estado = 2;

Page 3: Vectores en unity

} }

if (Estado == 2) { //Acción //Cambio de Estado y Activar siguiente animación. }

Quaternion.Slerp

Slerp (ValorInicial, ValorFinal, Tiempo)

La función Slerp, que mueve lentamente desde un valor hasta otro en una cantidad de tiempo indicada.

Quaternion.LookRotation

Nos dar una rotación para que el punto de origen mire al punto del destino.

LookRotation (puntoDestino – puntoOrigen) = Vector que va desde el PuntoOrigen (enemigo) hacia el Punto Destino (jugador objetivo).

RotSpeed, es una variable nueva variable (var RotSpeed : float;).

Target: variable expuesa

Esta es importante, y será una variable que apuntará al objetivo, normalmente el jugador. Por eso cuando llamamos Target.transform.position, nos referimos al a posición del jugador. Que es el destino al que quiere ir el enemigo. Este Target lo trabajermos en profundidad en el Paso 3, de momento, si intentamos hacer una práctica, podemos meter el arrastrar el jugador desde la jerarquía a la casilla del Inspector.

transform.rotation.x = RotInic.x;transform.rotation.z = RotInic.z;

Así la variación que ocurra en los ejes x y z se verá corregida, porque rotation.x y rotation.z lo igualamos de nuevo con la rotación que tenía al principio, ya que la habíamos guardado en RotInic, Con esto terminamos el giro.

controller.Move(transform.forward * VelMov * Time.deltaTime); //Aplicar gravedad controller.Move(transform.up * -gravity * Time.deltaTime);

Page 4: Vectores en unity

//Cambio de Estado y Activar siguiente animación. }

Esta última, simplemente es la function Move que se encuentra dentro del Character Controller, Move necesita un vector de dirección y un valor de velocidad. La dirección es (0,0,1) es decir sólo se moverá en su eje Z, mientras que la velocidad, se la marcamos nosotros con la variable VelMov. El Time.deltaTime es para evitar problemas de frames per second en los distintos ordenadores.

Así tenemos la acción del Estado. Cuando el enemigo entre en el Estado 1, perseguirá al jugador en un campo sin obstáculos.

Recordemos que este if está dentro de la función Update, de modo que en cada frame, si el Estado es igual a 1, se ejecutará este trozo de código, en especial esta línea:

DistanciaCont = Vector3.Distance(Target.transform.position, transform.position);

En ella, calcula la distancia entre la posición del enemigo y la del Target, la distancia la guarda en la variable DistanciaCont.

Lo siguiente es un nuevo if.

if (DistanciaCont <= DistEnem)

Si DistanciaCont es menor o igual que DisEnem ... Pasaría al Estado 2.

Vamos a imaginárnoslo con números.

Sí en el frame 50, la distanciaCont enemigo es 1, significa que entre el jugador y el enemigo todavía hay 1 unidad, de modo que seguimos corriendo hacia él. Ahora, si en el frame 60, la distanciaCont es 0.3, esta ya es menor que DistEnem (que valía 0.5), eso significa que el enemigo está muy cerca del jugador, entonces ya dejamos de correr y pasaríamos al siguiente estado, que es el de atacar.