martes, 24 de junio de 2014

Nueva opción de inmersión al 100% con #Unity

Sixense, empresa famosa por desarrollar controladores de movimiento en entornos virtuales busca conseguir que cualquier persona pueda elaborar juegos 100% inmersivos, indiferente del nivel de programación.


Dicha empresa ha creado un kit de desarrollo llamado SixenseVR SDK que se integra con Unity y Unreal Engine, dos de los más populares software para videojuegos. Desde Sixense han desarrollado este software para que sea compatible con STEM, sistema de realidad virtual que facilita hasta cinco puntos de movimiento, cuenta con gafas, sensores en cada extremidad, por lo tanto la inmersión en el juego es total.

SixenseVR es una API multiplataforma que utiliza datos de posición y orientación de los sensores de movimientos conectados a la cabeza (casco) y manos. Utilizando datos del sensor conectado a la cabeza se puede posicionar cada una de las manos con precisión dentro del campo de visión del usuario, garantizando la coordinación mano-ojo casi perfecta.

miércoles, 18 de junio de 2014

#Script activar y desactivar diferentes camaras #Unity

Para poder activar y desactivar cámaras en Unity se puede realizar de forma simple con el siguiente Script en el cual asignamos las diferentes cámaras a usar y por medio de una tecla procedemos a cambiarla.
Este tipo de efecto se visualiza con mayor frecuencia en los juegos de carros en los cuales podemos cambiar a diferentes vistas como frontal, lateral, superior o posterior.



Script JS
--------------------------------------------------------------------------------------
var cam1 : Camera;
var cam2 : Camera;

function Start() {
//activo y desactivo las camaras necesarias
    cam1.enabled = true;
    cam2.enabled = false;
}

function Update() {

    if (Input.GetKeyDown(KeyCode.C)) {
    //al presionar la tecla c se activa la camara desactivada y se desactiva la otra camara
        cam1.enabled = !cam1.enabled;
        cam2.enabled = !cam2.enabled;
    }

}
--------------------------------------------------------------------------------------

También se pueden activar las cámaras de la siguiente forma

--------------------------------------------------------------------------------------
function Update () {
   if (Input.GetKeyDown ("2")){
      camera1.camera.enabled = false;
      camera3.camera.enabled = false;
      camera2.camera.enabled = true;
   }
   if (Input.GetKeyDown ("1")){
      camera1.camera.enabled = true;
      camera2.camera.enabled = false;
      camera3.camera.enabled = false;
   }  
   if (Input.GetKeyDown ("3")){
   camera3.camera.enabled = true;
   camera2.camera.enabled = false;
   camera1.camera.enabled = false;
    }
}
--------------------------------------------------------------------------------------

martes, 17 de junio de 2014

#script Activar animaciones en modo Mecanim #unity3d

Luego de haber revisado mi otra publicación con respecto a "Animación con #Sprite en #Unity o animación con secuencias de imágenes 2D" procederé a indicarte como activar las animaciones realizadas con sprite por medio de un script.



En la publicación anterior llegamos hasta animar cada movimiento.
Luego de haberlos realizado debemos de relacionar cada movimiento con el otro, y para poder realizar eso debemos de seleccionar el movimiento que da paso al otro, o en otras palabras seleccionar la animación previa a la siguiente. En mi caso voy a proceder a relacionar todas las animaciones con animacion_espera o conocido como idle.


Para poder relacionarlas como se indica en la imagen debemos de dar clic derecho sobre la animación_espera y seleccionar la opción "make transition" y arrastrar la fecha con la animación que deseamos relacionar.

Y así proceder a relacionar cada una de las animaciones con las otras, es necesario indicar que la dirección de la flecha indica que animación se ejecuta luego.

Es importante indicar que animación es la principal. Reconocer la animación principal es fácil puesto se pone de color naranja. Si la animación de color naranja no deseamos que sea la principal podemos dar clic derecho en otra animación y seleccionar "set as default" para que sea la principal.
Luego de realizar ese proceso, necesitamos crear variables para validar en qué momento se debe de realizar que animación. Animator acepta variables de los siguientes tipos : Float, int, bool, trigger. En el caso de este ejemplo hemos seleccionado Bool o booleano que sirve para la variable verdadero o falso.


Como se observa en la imagen superior he procedido a crear tres variables camina, golpe, y salto de tipo bool que se encuentran desactivadas, para que cuando se activen se active la siguiente animación.
En cada una de las líneas de transición entre cada animación debemos de asignarle que variable debe de afectar a que animación, para así por ejemplo solo se ejecute la animación_salto cuando la variable salto sea verdadera.
Pero antes se debe de confirmar que en la animación principal o por defecto se encuentre activa la opción Solo en todas las animaciones relacionadas, con esto estamos limitando que solo se ejecute la animación cuando se valide la variable.

Cuando seleccionemos cada línea de transición podemos observar que animación se ejecuta previo y después. Y así mismo en la parte inferior encontramos la sección de "conditions o condiciones" en la cual al desplegar el box podemos encontrar nuestras variables creadas. En cada línea que une a las animaciones activaremos las variables respectivas y en el valor indicaremos "true o verdadero". Por ejemplo si queremos activar la animación del golpe del personaje iremos a la línea que une a idle con animacion_golpe y asignaremos la variable golpe con el valor true.


Y ahora toca crear el script que de valor de positivo a cada variable para que se ejecute la animación, por ejemplo que cuando aplastemos la barra espaciadora nuestro personaje salte. El script a continuación se encuentra en C#. Claro este script debe de poseerlo nuestro player.
El script se encuetra comentado para mejor comprensión.

C# "Activa Animacion"
----------------------------------------------------------------------------------------
using UnityEngine;
using System.Collections;

public class activa_animacion : MonoBehaviour {

Animator ani; //esta variable guardará el animator

void  Start (){

ani = GetComponent<Animator> (); //aquí asignamos el animator a la variable
}


void  Update (){

if (Input.GetButtonDown ("Jump")) {
// si se presiona la barra de espacio se activa la variable salto y se le dá valor positivo
ani.SetBool ("salto", true); // con esta línea se activa la animación
}

if (Input.GetButtonDown ("Horizontal")) {
ani.SetBool ("camina", true);
}


}
}
----------------------------------------------------------------------------------------

lunes, 16 de junio de 2014

Animación con #Sprite en #Unity o animación con secuencias de imágenes 2D

Cuando deseamos elaborar un videojuego tipo 2D un factor importante es conocer el funcionamiento de los sprite en unity.
A continuación indico de forma breve como se procede con el trabajo de importación de sprite en Unity.



Antes que nada es necesario conocer que los sprite son en otras palabras secuencia de movimientos de algún objeto o personaje populares en las consolas de videojuegos como Nintendo en 1978.

Para importar una secuencia de sprite debemos de colocar el archivo PNG dentro del proyecto de unity e indicarle que esta imagen pertenece al tipo de textura de sprite.

Si vas a importar movimiento por movimiento puedes trabajar con el sprite mode single, para que sea una sola imagen pero si vas a trabajar en un solo png con una secuencia de movimientos debes de cambiar del sprite mode single a Multiple y dar clic en el botón Sprite Editor.

En mi caso he seleccionado una imagen de secuencia de movimientos de internet y la imagen posee varios movimientos. Al dar clic en Sprite Editor se habilitará una nueva ventana que te permitirá realizar el corte por slice de cada uno de los movimientos, y así te evitas tener que poner movimiento por movimiento, y unity lo hace complemente rápido por tí.

En este venta posees la opción en Slice de realizar de forma manual dibujando el recuadro en cada elemento, o usar la opción automática de unity y dar clic en slice y automáticamente unity selecciona los elementos, siempre es bueno revisar que los cortes sean los correctos. luego de haber arreglado los cortes de ser necesario procede a dar clic en "apply" y se procederán a generar la secuencia por cada imagen en la vista project.


Ahora el proceso a seguir es realizar la animación incorporando la posición inicial de la animación en la scena, y luego crear la animación en la opción "window/animation". Luego de crar la secuencia fluida de la animación procederemos a crear todas las animación que tiene el personaje.


Para adicionar al mismo personaje más animaciones puedes dar clic en el nombre de la animación en la ventana de animación, y se habilitará la opción "Crear nuevo clip".


Luego de crear todas las animaciones necesarias puedes revisar cada una de estas en la vista Animator y proceder a crear la secuencia y las validaciones respectivas para que se active cada animación en el momento necesario. Eso será materia de otra publicación.


Si deseas revisar esta publicación en video puedes verla en el siguiente link de donde yo tomé como base para realizar esta entrada. https://www.youtube.com/watch?v=Kq4MkZDlTQY

Les dejo la imagen del sprite para que pueden hacer sus pruebas.

miércoles, 11 de junio de 2014

Unity: inconveniente con "the animation clip used by the animation component must be marked as legacy" y script para animación

Para el uso tradicional de animaciones en Unity nos encontramos con el siguiente mensaje de error: "the animation clip used by the animation component must be marked as legacy" esto indica que el método del script está llamando a una animación la cual no es "legacy" sino que se encuentra como "mecanim".




Este inconveniente se da desde las versiones superiores a 4.3 en Unity.

En mi caso he querido hacer que al ingresar a la zona sensible de un cubo, este tenga una ligera animación.

El script usado es el siguiente en JS
------------------------------------------------------------------------
var  objeto: GameObject; //Objeto que se desea animar
var animacion : String; //animación a efectuar

function OnTriggerEnter(){
objeto.animation.Play(animacion);
}
------------------------------------------------------------------------

Este script lo debe de usar la zona sensible a la cual el player ingresará, y las dos variables deben de ser llenadas con el objeto que se desea animar. El objeto que se desea animar debe de tener la propiedad de BoxCollider (o cualquier otro tipo de collider) el mismo que debe de tener activo la opción Is Trigger, y además debe de tener un componente de "Animation" con la animación que se desea ejecutar.


Ahora vamos a revisar el mensaje de error que nos sale al momento de ejecutar y nos indica que la animación no es "Legacy". 


Al visualizar este mensaje debemos de seleccionar la animación, ir al menu de la parte superior del Inspector, dar clic y seleccionar Debug.


Luego cambiar en el tipo de animación de 2 (mecanim) que viene por defecto desde la versión 4.3 en adelante a 1 (legacy).

Y con ese cambio solucionado el inconveniente. Ya no sale el mensaje de error, y se efectúa la animación al entrar a la zona sensible.

Información adicional: El sistema de animación Legacy es un sistema previo al Mecanim, y es compatible con versiones anteriores de unity y por lo tanto todavía está disponible. Este sistema también es conocido como de acciones heredadas.
El sistema Mecanim es más actualizado y dispone de fácil flujo de trabajo y configuración de las animaciones de personas humanoides (en este caso no aplicaba), tiene también la posibilidad de aplicar animaciones de un modelo de personaje a otro, vista previa de las animaciones.

En lo personal he trabajado con Mecanim para animación de personajes, y con Legacy para animación de objetos en el juego como bloques, esferas y cualquier otra cosa que no son personajes.