miércoles, 7 de julio de 2010

Aventuras con Unity 3D - Terreno y movimientos

Hace ya unos 15 días que comencé a darle a la estudiada de Unity, como les comenté en la entrada pasada, estoy comenzando desde cero, pero creo q ahi la llevo.

Es realmente fácil el lograr cosas y con los tutoriales que existen puedes lograr cosas q se vean bastante bien, por ejemplo, yo siempre había creado un rectángulo muy delgado y del tamaño que quisiera para usarlo como piso, sin embargo por ahi me encontré un tutorial de como crear un ambiente utilizando un objeto llamado Terreno, las ventajas? puedo darle la forma que quiera, puedo ponerle q tan lejos quiero q se vea el mundo, ponerle neblina, decirle si los montes van a generar sombras, cual va a ser el tamaño máximo de las elevaciones y el mínimo, aplicarle texturas y un largo etc.

Creo q lo complicado es ponerte a jugar con todas las opciones que tienes a fin de lograr algo que te guste, ademas que consume mucho tiempo. Por lo pronto l objetivo era crear un terreno decente, nada espectacular, así que el objetivo se cumplió.

Después me puse a ver lo que se puede hacer con la codificación, Unity t permite crear código en varios lenguajes, el q a mi me interesa es el JavaScript, así que estuve codificando en dicho lenguaje.

Unity permite crear varias cosas, todas ellas quedan como activos del proyecto, los cuales se pueden usar en varias partes, y si le haces un cambio al activo este se actualiza en todos los lugares donde lo hallas usado.

Además, si creaste un objeto y sacas copias de ese objeto, la copia contiene todas las propiedades, activos y comportamientos que tenga el original, vamos solo hace falta diseñar muy bien un objeto y si necesitas muchos mas de esos pues solo necesitas instanciarlos.

Dicho esto, pues me puse a crear un código, solo que a fin de que cualquier código se ejecute debe estar ligado a un objeto que exista en la escena, esto ocurre por que Unity solo le da tiempo de procesador a los objetos que existen en la escena, así que si no lo contiene un objeto, pues no lo corre.

En un tutorial que me encontré viene como hacer que gire un cubo, solo hay que crear un cubo, ponerlo encima del terreno, crear un código que modifique las propiedades del cubo, ligar dicho código al cubo para q sea corrido y correr la escena... Listo, ya tienes un cubo volador que esta girando incansablemente :)

En el ejemplo anterior lo unico q se modifica es la orientación del cubo, pero en el proyecto tendremos que mover a los personajes, así que tuve que lograr que el cubo se mueva en alguna dirección, así que usando el comando de Transform cambio la posición del cubo, solo que hay qu tener en cuenta alunas cosas, como por ejemplo:
  • Normalmente Unity trabaja por frames, es decir, Unity tratará de mostrar la escena X veces en un segundo, normalmente en Web un refrescado de 12-15 frames por segundo es bastante aceptable, sin embargo no todas las personas que acceden a la web tienen el mismo poder de procesamiento, por lo que a algunas personas les va a resultar mas dificil el ver los 15 frames por segundo.
  • Entonces si nos basamos al procesamiento en frames, pues puede que tengamos resultados raros por que un frame se refresca mas o menos veces en un segundo.
  • Para evitar esto lo que se puede hacer es tomar en cuenta el tiempo que ha pasado, sin importar el numero de frame en el que se encuentre el tiempo avanza de forma constante, así que si nos basamos en el tiempo es mas fácil calcular como se debería de ver cierto objeto una vez que ha pasado X tiempo.

Teniendo esto en cuenta entonces lo q hacemos es multiplicar el tiempo q ha transcurrido por la velocidad a la que se desplaza cierto objeto y así podemos calcular la posición que debería de tener el objeto, entonces utilizamos el comando Transform y movemos el objeto a dicha posición y listo, nuestro objeto se mueve!!

Si quieren ver un ejemplo de esto pueden ir a esta liga: Primer Logro

Creo que es suficiente por el día de hoy, les seguiré dando actualizaciones de los avances, los nuevos objetivos y los problemas q me encuentre para lograrlos, y cuando lo logre un pequeño ejemplo de como se ve el logro, por lo pronto nos seguimos leyendo...

No hay comentarios: