#3 Método LookAt. [Serie Fundamental de Unity]

Introducción

En este artícu­lo vamos a analizar cómo aplicar en Uni­ty el méto­do LookAt, para hac­er que un GameOb­ject mire en la direc­ción de otro. Esto se tra­duce en la ori­entación de uno de los ejes del GameOb­ject de modo que apunte hacie el ori­gen del GameOb­ject objetivo.

Página principal del proyecto

Antes de empezar te invi­to a ver el sigu­iente video en el que se resuelve este problema: 

Método LookAt
👉

POR FAVOR CONSIDERA SUSCRIBIRTE AL CANAL

Procedimiento

Vamos a tra­ba­jar con la estación Look At, la cual con­siste en una cáp­su­la de con­tención en la que se encuen­tra flotan­do el mod­e­lo de Lucy. El obje­ti­vo es lograr que Lucy nos siga con la mira­da por todo el escenario.

Fig. 1: Cáp­su­la de con­tención anti-mal­dad, de la estación LookAt.

En la jer­ar­quía ten­emos un GameOb­ject lla­ma­do "#3 LookAtObject".

Fig. 2: Jer­ar­quía de la esce­na. La estación LookAt es el GameOb­ject #3.

Este GameOb­ject tiene asig­na­do el Script "LookA­tO­b­ject", que se encar­gará de hac­er que Lucy siga con su mira­da al jugador.

Fig. 3: Script para com­ple­tar en este desafío.

En la figu­ra 4 se obser­va que hay 3 cam­pos para com­ple­tar, el primero es para el obje­to obser­vador, el segun­do para el obje­ti­vo de obser­vación y el ter­cero es para que Lucy mire a una altura fija del esce­nario, de esta for­ma no se sale de la fron­tera de su cáp­su­la de contención.

Fig. 4: Script asig­na­do al GameOb­ject "#3 LookA­tO­b­ject" que se ve en la figu­ra 2.

Vamos a asig­nar a Lucy direc­ta­mente des­de la jer­ar­quía y al per­son­aje lo vamos a encon­trar a través de su tag.

Si querés apren­der dis­tin­tas for­mas de encon­trar las ref­er­en­cias de los GameOb­jects de la jer­ar­quía para usar en los Scripts podés leer el artícu­lo ante­ri­or o mirar este video.

Si abri­mos el Script encon­tramos algu­nas cosas hechas. En el méto­do FixedUp­date, que se eje­cu­ta una vez cada cier­to tiem­po, hace­mos la lla­ma­da al méto­do "lookA­tO­b­ject", que se encar­gará de cumplir la función.

Fig. 5: Script LookA­tO­b­ject sin completar.

En el méto­do start que se ve en la figu­ra 5, ten­emos una instruc­ción que esta­ba comen­ta­da al momen­to de hac­er la cap­tura. Hay que quitar las bar­ras de comen­tar­ios para encon­trar la ref­er­en­cia del jugador y lograr que Lucy lo mire.

Fig. 6: Cam­pos definidos en el Script.

En la figu­ra 6 se obser­van los cam­pos definidos en el Script. Vamos a uti­lizar el Vector3 lla­ma­do "object­ToLook­Po­si­tion" para las coor­de­nadas a la que Lucy debe mirar.

Fig. 7: Con estas dos instruc­ciones logramos que Lucy mire al ori­gen del personaje.

Den­tro del méto­do "lookA­tO­b­ject" escribi­mos estas instrucciones:

object­ToLook­Po­si­tion = objectToLook.transform.position;

objectThatLooks.transform.LookAt(objectToLookPosition);

Con estas dos instruc­ciones logramos que Lucy esté ori­en­ta­da todo el tiem­po hacia el ori­gen del jugador.

Fig. 8: Lucy sigue al per­son­aje con la mirada.

Fig. 9: Al acer­carse a la cáp­su­la, Lucy se incli­na tan­to que se sale de las fron­teras de la cápsula.

El desafío está par­cial­mente resuel­to, aún ten­emos que solu­cionar el prob­le­ma que se ilus­tra en la figu­ra 9.

Fig. 10: Tres GameOb­jects mostran­do sus orí­genes. El ori­gen se rep­re­sen­ta por un giz­mo que mues­tra los ejes locales.

Primero enten­damos qué está pasando.

Todos los GameOb­jects tienen una coor­de­na­da en el espa­cio donde se encuen­tra su origen.

El méto­do lookAt va a mod­i­ficar la ori­entación del obje­to al que se lo aplique (en este caso Lucy). Lo hará de tal for­ma que el eje local for­ward apunte hacia el ori­gen del obje­to a mirar. Como se ilus­tra en la sigu­iente figura.

Fig. 11: Lucy con el méto­do lookAt apli­ca­do, per­son­aje lejos.

Si el per­son­aje está lejos de Lucy su incli­nación es pequeña, pero al acer­carse pasa lo siguiente:

Fig. 11: Lucy con el méto­do lookAt apli­ca­do, per­son­aje cer­ca.

¿Cómo podemos cor­re­gir esto?

Ten­emos que hac­er que Lucy mire hacia una coor­de­na­da que esté a la mis­ma altura que su ori­gen. De esa for­ma su ángu­lo de incli­nación será pequeño. 

Ásí que vamos a sobree­scribir la com­po­nente y del Vector3 por el val­or de la vari­able "yPos" que ajustare­mos des­de el inspector.

Ideal­mente podríamos hac­er que la com­po­nente y del Vector3 val­ga exac­ta­mente la altal­tura del ori­gen de Lucy, esto es algo que me di cuen­ta luego en la post pro­duc­ción del video. Sin embar­go está bueno como ejem­p­lo de que no hay una sola for­ma de resolver los problemas.

Fig. 12: Se añade una instruc­ción entre medio que sobree­scribe el val­or de la com­po­nente y del Vector3.

Se puede pro­bar escribir la vari­able yPos en tiem­po de eje­cu­ción, pero al parar la sim­u­lación todos los val­ores volverán a su val­or inicial.

El val­or 0.75 fun­ciona bien para este caso. Un número menor a este hace que Lucy se incline hacia aba­jo y sal­ga por el frente de la cápsula.

Fig. 13: El val­or ‑0.3 hace que Lucy sal­ga por el frente de la cápsula. 

Fig. 14: Con yPos igual a 0.75 Lucy mira cor­rec­ta­mente al per­son­aje.

Fig. 15: Con yPos igual a 0.75 Lucy mira cor­rec­ta­mente al per­son­aje.

En el sigu­iente artícu­lo estu­di­are­mos cómo crear y destru­ir obje­tos en tiem­po de eje­cu­ción. Suscrí­bete al canal de YouTube para estar al tan­to de los nuevos videos y artículos.

YouTube
Scroll al inicio
Secured By miniOrange