50. CLASE CAMERA (I)





Bienvenid@s a otra de las clases importantes de Unity. La clase cámera le permite al jugador interactuar con tu juego. La cámara en Unity es un dispositivo a través del cual el jugador ve el mundo.

Hemos de diferenciar desde el primer momento, y ahí residen no pocas confusiones de los recién llegados a Unity, entre pantalla y cámara. Ambas son cosas diferentes y tienen una unidad de medida distinta:

La unidad de medida de la pantalla está definida en píxeles. La esquina izquierda-inferior de la pantalla es (0,0), la derecha-superior está contenida en las variables (pixelWidth,pixelHeight), que representan la anchura y altura de la pantalla respectivamente. La posición Z estaría en unidades globales contadas desde la cámara.

Si la unidad de medida es relativa a la cámara, la esquina izquierda-inferior de la cámara es (0,0) y la derecha-superior (1,1). La posición Z estaría en unidades globales desde la cámara.

Con esto en mente, empecemos:


VARIABLES:

fieldOfView:

var fieldOfView : float


Variable que contiene el campo de visión de la cámara en grados. Se referiría al campo de visión vertical, ya que el horizontal varía dependiendo del viewport’s aspect ratio. El campo de visión es ignorado cuando la cámara está en modo ortográfico.

Antes de empezar con los ejemplos, vamos a retocar un par de cosillas en la interfaz de Unity. En primer lugar, en Proyecto le damos al botón derecho del ratón sobre la carpeta Gizmos=>Delete, para deshacernos de la bombilla. Nos aseguramos de que el cubo está en posición -2,0,0. Eliminamos el script vinculado al cubo. Nos aseguramos de que la cámara no esté en modo ortográfico, sino en perspectiva. Doble click en MiPrimer Script:


Camera.main.fieldOfView = 20;


Arrastramos el script a PortaScripts en la Jerarquía. Notemos antes que nada que en el script nos estamos refiriendo a la cámara principal. Si quisiéramos que el script afectara a otra cámara distinta, por un lado deberíamos quitarle el "main" del script y por otro lo tendríamos que arrastrar a la cámara que queremos afectar por éste. Vamos a probarlo, para que no haya dudas, pero antes dadle al play y comprobar cómo el campo de visión, que por defecto es 60, pasa a ser 20 y -aunque parezca al principio poco intuitivo- al tener un ángulo menor de visión, dicho campo reducido es ampliado para que ocupe toda la pantalla. Esto a muchos les recordará las fotos en las bodas: cuanta más gente queremos abarcar (más campo de visión) más lejos tenemos que tirar la foto.

Pero habíamos prometido que aplicaríamos el ejemplo a una cámara no principal, así que ahí vamos. Gameobject=>Create other=>Camera. Llamamos a la Camera "Camara 2". Ahora la ubicaremos en la siguiente posición/rotación:
Posicion:-0.6,15,1
Rotacion:85,0,0

Con la cámara 2 seleccionada, le damos al play y observamos nuestro pequeño mundo desde otra perspectiva. Nos daremos cuenta de que Unity nos lanza un mensaje, avisándonos de que tenemos dos receptores (listeners) de audio en la escena. Esto es porque por defecto cada cámara tiene un Audio Listener para recoger el sonido además de la imagen. Para evitar problemas, eliminamos el AudioListener de la cámara 2 en el inspector.

Vale, y ahora montemos otro miniscript para la segunda cámara. Hacemos doble click en MiSegundoScript (ya que el primero lo tenemos ocupado) y tecleamos:


camera.fieldOfView = 20;


Arrastramos este script a la Camara 2 (si lo arrastráramos al PortaScripts no funcionaría, ya que no sabría a qué cámara ha de afectar, salvo que creáramos una variable "expuesta" de tipo Camera a la que arrastrar esta y etc, etc, aunque para lo que queremos hacer es más cómodo el método primero)

Le damos al play y observaremos que funciona.

Aprovecho para comentaros una cosilla que seguro que la mayoría ya sabe. Cada cámara al ser creada tiene una variable (depth, que luego veremos) que establece la prioridad de cada una. Cuanto más alto el valor de depth, más prioridad tiene la cámara. Si os fijáis en el inspector, la cámara principal debería tener la variable depth en -1, y camara 2 en 0. Es por ello que cuando le damos al play, la vista que nos aparece es la que recoge la cámara 2. Si quisiéramos retomar a vista grabada por la cámara principal, no tendríamos más que darle un valor a depth superior al del resto de cámaras.

POSTED BY UnityScripts
POSTED IN
DISCUSSION 0 Comments

Leave a Reply

Con la tecnología de Blogger.