Jorge Vallejo Blog

Blog del creativo, ilustrador y profesor de videojuegos Jorge Vallejo

Unity: Métodos extendidos

Unity nos permite crear nuestro propios métodos extendidos, lo cual puede ser muy util para tareas repetitivas, cálculos comunes etc. La ventaja de un método extendido frente a una función es que no tendremos que hacer referencia a la clase de la función si no que lo añadiremos a la propiedad que se trate.

Como todo esto suena bastante abstracto pongo un ejemplo para entederlo mejor.

Queremos crear un metodo para colocar la posicion de un objeto en (0,0,0)

Para ello creariamos un script tal que

public static class ExtensionMethods
{
//Método extendido
public static void Resetea(this Transform trans){
trans.position = Vector3.zero;
}
}

Esta clase debe ser tipo static asi como sus funciones.

this en este caso funciona como un parámetro implícito, lo que le estamos diciendo es, quiero que llames a este método desde cualquier componente Transform, por lo que si queremos que fuera desde un Vector3 seria this Vector3 vector, un float , this float numero etc

Finalmente sólo hace falta llamar al metodo desde otro script simplemente con

transform.Resetea ();

En cuanto escribimos transform y pulsamos . nos saldrá la lista de métodos y aparecerá el nuestro.

Podemos crear métodos con varios parámetros y que devuelvan parámetros, lo único que hay que tener en cuenta, es que el primer parámetros siempre lleva this y hace referencia al tipo de objeto o tipo de variable.
En la clase de los metodos

public static float Multiplica(this float value, float multiplo)
{
return value * multiplo;
}

En cualquier clase

float numero = 5;
numero=numero.Multiplica (2);

Los ejemplos que he puesto son muy sencillos pero la extension de metodos se puede hacer todo lo compleja que queramos.
Como la clase que hemos creado no hereda de MonoBehaviour , algunas funciones no nos aparecen, por ejemplo Destroy, para poder llamarlas tendremos que utilizar la llamada MonoBehaviour quedando
public static void DestruyeSleep2D(this Rigidbody2D rb, GameObject game){

if (rb.IsSleeping()) {
MonoBehaviour.Destroy (game);
}
}

Unity: ¿Cómo se usan los LayerMask?

Cuando estamos usando Raycast ya sean 3D o 2D enseguida nos surge un problema común y es que ,para detectar un elemento con Raycast este tiene que tener Collider ¿como puedo hacer para que me detecte unos si y otros no?, sin tener que quitar dicho Collider, la solución son los LayerMask.
El problema es que el concepto es algo complicado por lo que he decidido crear este post tratando de explicarlo de mejor forma posible.
Primero hay que echarle un vistazo a los Layers, cualquier elemento en Unity puede estar colocado en un Layer y como vemos Unity se reserva para el 8 y nos deja los demás para nosotros, pero hay algo curioso, hay 32 layers posibles, ¿Por que exactamente 32? pues por que Unity untiliza un int 32 para controlar los layers, , es decir un numero con la forma 0000 0000 0000 0000 0000 0000 0000 0000 , donde cada bit representa si detecta o no, así el primero a la derecha corresponde al layer Default y el último seria nuestro layer 32.
¿Como creo un LayerMask para que detecte sólo un layer?
Primero creamos un LayerMask que es un int y asociamos 1 al bit que corresponde a ese Layer seria 1<< (Operador de desplazamiento a la izquierda) int del Layer
int mascara=1<<0;
O podemos recoger el indice del layer con LayerMask.NameToLayer(“Nombre del Layer”)

int mascara=1<<0;

Ahora la mascara será 0000 0000 0000 0000 0000 0000 0000 0001

Podemos visualizar el int con
print(System.Convert.ToString(mascara,2));
Segundo asociamos la mascara al Raycast, en este ejemplo usaremos un Raycasthit2D pero funciona igual para 3D

Ray2D rayo=new Ray2D(transform.position,Vector2.right); 
int mascara=1<<LayerMask.NameToLayer ("Default") ; 

El resultado: el Raycast sólo detecta los Collider que tengan Default

Muchas veces nos vamos a encontrar exactamente con el problema inverso, es decir, queremos que nuestro Raycast detecte todos los layers excepto uno, por ejemplo el del Player.
El camino a seguir seria muy parecido, creo la mascara , le digo que detecte solo a Player

int mascara=1<<LayerMask.NameToLayer ("Player")  ;

Y despues la invierto con ~ (Ascii 126) Información sobre el operador aqui

mascara=~mascara;

Ahora la mascara seria 1111 1111 1111 1111 1111 1110 1111 1111
Y el resto del código seria igual quedando

Ray2D rayo=new Ray2D(transform.position,Vector2.right); 
int mascara=1<<LayerMask.NameToLayer ("Player ")  ;
mascara=~mascara;
RaycastHit2D hit =Physics2D.Raycast (rayo.origin, rayo.direction,200,mascara); 

Al principio los LayerMask pueden resultar algo confusos por lo que aconsejo hacer pruebas tirando un Raycast con dos elementos con Layers diferentes para comprobar su funcionamiento.

Unity: Crear Atlas

Desde la versión Unity 2017, el sistema de empaquetado de Sprites (Sprite Packer) se sustituye por Atlas (Sprite Atlas), la filosofía sigue siendo la misma crear una única textura con los componentes que necesitemosAtlas_preview , es decir un Sprite de Sprites, para mejorar la optimización y el número de Batches o llamadas de dibujo (call draws) que consumen rendimiento, la idea es que los elementos que vienen de un mismo Atlas sólo necesitan un batch para ser representados, si tenemos 20 elementos metidos en Atlas en vez de 20 batch tenemos sólo uno.

Sin embargo el Atlas, va más allá de crear una textura con los elementos, ya que creará internamente un Array con los sprites insertados, por lo cual hará falta código y ejecutar el sistema en tiempo de juego para poder visualizarlos.

Para crear un Sprite Atlas

  1. En el proyecto , botón derecho Create -> Sprite Atlas
  2. Podemos crear un Atlas desde, Una carpeta, un Sprite Sheet o desde un Sprite o grupo de sprites
  3. Es útil reunir todos los sprites de una carpeta y crear el atlas utilizando esa carpta
  4. Con el Atlas seleccionado arrastramos la carpeta a Objects for Packing
  5. La cantidad de elementos que puede almacenar el Atlas depende de su tamaño,si cambiamos Max Texture Size podremos tener Atlas más grandes.
  6. Pulsamos en Pack Preview y Unity generara el Atlas, reducirá al máximo los espacios vacíos.

Para usar un Sprite Atlas

  1. Debemos tener un Sprite Atlas creado
  2. Crearemos un script llamado Gestiona_Atlas
  3. Creamos un Objeto vacío llamado GestionAtlas y le añadiomos el script
  4. Como hijo del elemento metemos un Sprite , Boton derecho 2D -> Sprite
  5. A GestionAtlas le añadimos el siguiente script, debemos tener presente que para usar el Atlas necesitamos importar  UnityEngine.U2D y si queremos utilizar las funciones del List necesitamos  System.Linq;

public class Gestiona_Atlas : MonoBehaviour {
//Necesita la libreria using UnityEngine.U2D;
public SpriteAtlas m_atlas;

public SpriteRenderer m_redener;
public int id_sprite;
List<Sprite> sprite_list;
// Use this for initialization
void Start () {
//Vuelca los sprites del atlas a un list de sprites
Sprite[] sprite_array=new Sprite[m_atlas.spriteCount];
m_atlas.GetSprites (sprite_array);
//Vuelca un array en un List necesita la libreria using System.Linq;
sprite_list = sprite_array.ToList();
//Para usar el Atlas puedo utilizar el array volcado
m_redener.sprite = sprite_array [id_sprite];
//GetSprite devuelve el Sprite con ese nombre
m_redener.sprite = m_atlas.GetSprite(“Tumnas_10″);

}

// Update is called once per frame
void Update () {
//Podemos utilizar la lista para seleccionar un elemento
//m_redener.sprite = sprite_list [id_sprite];
//Recoger el último
//m_redener.sprite = sprite_list.Last ();
//Recoger el primero
//m_redener.sprite = sprite_list.First();
//………..
}
}

GDD (Game Desing Document)

El GDD (Game Desing Document) o Documento de Diseño de videojuego es lo que en producción audiovisual llamamos biblia del proyecto, y es que contrariamente a lo que pueda parecer los videojuegos se pueden vender sin tener que desarrollarlos, es decir, podemos buscar financiación en una fase inicial del proyecto para ello debemos ser capaces de sintetizar al máximo la idea de nuestro videojuego y poder crear un documento llamado GDD que nos sirva como carta de presentación del mismo.
Este documento permitirá hacerse una idea de las claves principales del videojuego como por ejemplo definir el público objetivo , el genero y la plataforma, ya que estas elecciones marcan las lineas de desarrollo del proyecto.

Como base para crear nuestro GDD podemos usar la siguiente guia

CONCEPTO

  • Título: El título del juego, debe ser un nombre que capte la atención del jugador y del lector del documento. A grandes rasgos, debe de incluir el concepto del juego.
  • Estudio/Diseñadores:  El nombre del estudio y/o del diseñador o diseñadores del documento.
  • Plataforma: Qué hardware se requiere para jugarlo. PC, Android ,IOS, Xbox 360, PS3, etc.
  • Idea general: Una sola frase que resume el videojuego
  • Sinopsis de Jugabilidad y Contenido: En uno o dos párrafos, describir la esencia de jugar el juego. Incluir un poco del contenido que tendrá, historia, personajes, objetivo, etc.
  • Género: En que genero se ubica el videojuego y cual son las características que lo definen.
  • Licencia: Describir si se poseen todos los derechos sobre el videojuego.
  • Mecánicas: Describir la jugabilidad y el control del juego. ¿Qué hace el jugador? ¿Qué usa para lograr sus objetivos?
  • Dinámicas: Que decisiones y estrategias puede crear el jugador en base a las mecánicas
  • Reglas: Que reglas gobernaran todo el videojuego, ¿Habrá excepciones?
  • Fases: División y estructura del videojuego
  • Referencias: ¿A que se parece tu videojuego?
  • Componente diferencial: Que le hace diferente.
  • Público objetivo: ¿A quién va dirigido el juego? Edad, sexo, tipología de jugador.

 

MECÁNICA DEL JUEGO: Esta sección esencialmente describe lo que el jugador puede hacer y cómo puede hacerlo. Describir las acciones del jugador.

  • Cámara: Describir el tipo de cámara que se utilizará. Es decir, qué perspectiva tiene el jugador ante lo que está viendo en el juego, si es 3D o 2D, vista isométrica, en primera persona, etc. Periféricos: ¿Qué periféricos utilizará el jugador para lograr los objetivos mencionados? Incluir todos los que apliquen: teclado, mouse, gamepad, micrófono, etc.
  • Controles: Describir los botones y teclas que invoquen las acciones mencionadas en la sección de Mecánica del Juego.
  • Guardar/Cargar: Describir cómo el jugador guarda su progreso de los objetivos logrados en el juego y cómo puede continuar los objetivos pendientes. De igual manera, describir los dispositivos de almacenamiento que se usarán o si el juego tiene un sistema de contraseñas.

INTERFACES:

Todos los menús y submenús que aparecen en el juego

  • Nombre de la Pantalla: El nombre de la pantalla, si es el Menú Principal o el H.U.D. (Heads-up Display).
  • Descripción de la Pantalla: ¿Para qué sirve esta interface?
  • Navegación: Como pasa de una pantalla a otra.
  • Imágenes de referencia de las interfaces

NIVELES: Los juegos comúnmente se dividen en niveles o en mapas secuenciales dentro de los cuales se debe cumplir con ciertos objetivos para progresar en el juego.

  • Título del Nivel: El nombre del nivel.
  • Tipología de nivel: Describir si es el primer nivel, un tutorial o un bonus, en otras palabras, ¿Cuándo el jugador  llega a este nivel? Descripción Una descripción detallada del nivel.
  • Objetivos: ¿Qué debe de hacer el jugador para terminar el nivel?
  • Enemigos: Listas de enemigos y principales caracteristicas
  • Items: Enumerar los objetos que el jugador o los enemigos pueden usar y que aparecen en este nivel.
  • PNJ (Personajes no jugadores): Los personajes que aparecen en el nivel.
  • Música y Efectos de Sonido: Describir la música de este nivel al igual que los efectos de sonido que contiene.

 

PROGRESO DEL JUEGO: Enumerar de manera secuencial o por medio de un diagrama de flujo los eventos o niveles que el jugador debe de pasar para progresar en el juego. Existen juegos que tienen distintos modos de juego, en ese caso se requieren varias listas y/o diagramas.

PERSONAJES:  Los personajes principales y secundarios que aparecerán en el juego. Esta sección se puede omitir si el juego no tiene personajes.

  • Nombre del Personaje: El nombre del personaje.
  • Descripción: Describir detalladamente el personaje, si es humano o extraterrestre, su vestimenta, etc. Fotografía o dibujo conceptual del personaje.
  • Concepto: Describir la conducta y comportamiento, al igual que los motivos del personaje. Mencionar también si es el enemigo principal o el protagonista. El concepto también puede relatarse como una historia del personaje, detallando en las relaciones con otros personajes del juego.
  • Encuentro: ¿Cuándo aparece este personaje en el juego?
  • Armas: Armas del personaje.
  • Items: Los objetos del personaje.
  • Personaje No-Jugable: Si el personaje no es controlable por el jugador, describir su propósito para el juego y/o para el jugador.

ENEMIGOS: Los enemigos obstaculizan el progreso del jugador, pueden ser máquinas, otros personajes, monstruos, etc.

  • Nombre: El nombre del enemigo.
  • Descripción: Describir detalladamente el físico del enemigo así como también su comportamiento.
  • Encuentro: ¿Cuándo aparece este enemigo en el juego?
  • Imagen: Fotografía o dibujo conceptual del enemigo.
  • Habilidades: Listar las habilidades del enemigo.
  • Armas: Listar las armas del enemigo.
  • Items: Listar los objetos del enemigo.

IMÁGENES DE CONCEPTO: Todas las imágenes que muestren algún posible nivel, personaje, objeto, etc., deben ser incluidas en esta sección y deben estar enumeradas y con título.

MIEMBROS DEL EQUIPO: Información de las personas que trabajarán en el proyecto, breve curriculum.

DETALLES DE PRODUCCIÓN:

  • Fecha de Inicio: ¿Cuándo empieza la etapa de Producción del proyecto?
  • Fecha de Terminación: ¿Cuándo termina la etapa de Producción del proyecto?
  • Presupuesto: Una estimación aproximada del presupuesto del juego.

 

 

Generar Sprite Sheet a partir de un vídeo

El proceso para crear un Sprite Sheet desde un vídeo utilizando photoshop es el siguiente:

Primero deberiamos tener nuestro vídeo con un canal alfa para que sea transparente, tambien tenemos que tener presente que la duración del vídeo sea muy corta uno o dos segundos, sino tendremos un sprite sheet excesivamente grande.
En photoshop iriamos a Archivo -> Importar Cuadros de vídeo a capas , nos convertirá cada fotograma en una capa.
Podemos recortar la imagen siempre que nos sobre contenido, con la herramienta Recortar.
Después haremos como en mini tutorial http://www.jorgevallejo.es/2017/10/crear-un-sprite-sheet-desde-photoshop.html y exportaremos las capas a un archivo sprite sheet.
Seguramente nos quede un archivo demasiado grande, por lo que es preferible tener un número de filas y columnas suficiente como para no hacer el archivo demasiado largo, y podremos cambiar todo el tamaño del archivo desde Imagen -> Tamaño de la imagen.

Unity Anima2D protocolo creación de personaje

Los pasos a seguir para crear un personaje utilizando el plugin de Anima2D son:

  1. Descargarse Anim2D desde el assets store de Unity
  2. Importar el sprite sheet de nuestro personaje en Unity
  3. Dividir los sriptes en partes utilizando el sprite Editor
  4. Comprobar el Canal Alfa para verificar que no hay ruido
  5. Comprobar que los cortes no interfieren unos en partes de otros
  6. Nombrar cada parte, de forma que se identifique claramente las partes y el personaje por ejemplo “X_cabeza” ,”X_pie_i” etc
  7. En el inspector del proyecto seleccionar el Sprite padre , boton derecho Create -> Anima2D-> Sprite Mesh
  8. Creara todos los sprites recortados pero que seran Skined Mesh para ser asociados a los huesos
  9. Creamos un objeto vacio, que será el padre de todos los elementos
  10. Añadimos los Sprites creados por Anima2D al padre
  11. Importamos la figura patrón y colocamos los elementos según la figura patrón
  12. Creamos un nuevo Sorting Layer como nuestro personaje , ya que nos permitirá usar el Order in Layer para ese personaje
  13. Seleccionamos todos los sprites y seleccionamos nuestro Sorting Layer
  14. Colocamos los Order in Layer, debemos hacer pruebas para ver si los brazos, piernas etc pasan por delante.
  15. Dentro de GameObject principal creamos un objeto vacío Huesos
  16. Importante, antes de empezar a crear los huesos deberíamos comprobar como funcionaran los puntos de pivote, ya que una vez colocados no podremos moverlos y tendremos que borrarlos y hacerlos nuevos.
  17. Creamos los huesos como hijos de ese GameObject con Botón Derecho -> 2D Object -> Bone
  18. Lo renombramos a Cintura y colocamos en su posición con la herramienta mover
  19. Importante No modificar la escala de los huesos,se modifica la longitud con la propiedad Length
  20. Seleccionando Cintura , creamos un nuevo Bone que será hijo de la misma y re nombraremos a Tronco
  21. Continuamos creando la jerarquia de huesos podemos usar  Alt + Shift + B​ como atajo de teclado
  22. Salvamos
  23. Comprobamos que los huesos estan bien colocados
  24. Unión Hueso -> Sprite Mesh
  25. Selecionamos en la Jerarquia el Sprite Mesh, en Bones damos a + para añadir el hueso al que va unido
  26. Arrastramos el hueso al componente , podemos borrar los huesos que no le afecten si es necesario.
  27. Si tiene más de un hueso asociado lo arrastramos directamente a Set Bones
  28. Enlazamos todos los Sprite Mesh con sus diferentes huesos
  29. Salvamos
  30. Creación de área de influencia del hueso
  31. Selecionamos el Sprite Mesh y vamos a Window -> Anima2D -> Sprite Mesh Editor
  32. Deberemos Dar a Bind para que cree el area de influencia, aparecerá una ventana para controlar los “pesos” de los diferentes huesos, si marcamos Overlay veremos su area de influencia.
  33. Damos a Apply
  34. Dejaremos la ventana Sprite Mesh Editor abierta para repetir el proceso
  35. Si nos equivocamos al añadir un hueso, tenemos que seleccionar el Sprite Mesh de la jerarquía ir de nuevo a Sprite Mesh Editor y dar a Unbind
  36. Si un Sprite tiene varios huesos, necesitaremos mejorar su malla , para ello podemos ir a Sprite Mesh Editor-> Slice y aumentar el Tessellation para cree más puntos en la malla
  37. Comprobamos que tenemos todos los Sprites Mesh enlazados, sino lo tuviéramos veríamos un Warrning
  38. Controles
  39. Creamos un objeto vacío llamado Controles
  40. Con él seleccionado Boton derecho 2d Object -> Ik Limb , es para controlar 2 huesos que nos servira para brazos y piernas controlando el pie y la mano mediante giros.
  41. Importante Colocar el Gizmo en su posición correcta antes de enlazarlo con los huesos
  42. Lo colocaremos normalmente sobre el punto de pivote del tobillo o la muñeca.
  43. Le pasaremos el segundo hueso, pierna2d o anted
  44. El Gizmo cambiará de color a Azul, podemos aumentar o disminuir su tamaño, desde el panel Escena -> Gizmos ->3D icons
  45. Si queremos controlar un elemento con más de huesos, creamos un control Ik CCD
  46. Seleccionamos control Boton Derecho -> Object 2D-> IK CCD le pasamos el  último hueso
  47. Tendremos que aumentar el Num Bones según lo huesos que tengamos.
  48. Salvamos
  49. Animación
  50. Importaremos imagenes de referencia, unas líneas guia, suelo etc e imagenes del ciclo que queramos animar.
  51. Podemos crear poses de las animaciones que luego se pueden reuilizar
  52. Para ello , con el personaje principal selecionado , añadiremos el componente Pose Manger
  53. Damos a create new pose y guardamos la pose como base.assets en nuestra carpeta del personaje
  54. Creamos las poses que consideremos necesarias siguiendo este procedimiento
  55. Para animar , con el personaje principal seleccionado , vamos Window -> Animation
  56. Le damos a crear una primera animación que será parado o Idle
  57. Nos creará un Animator que gobernará las diferentes animaciones
  58. Si queremos que la animación coincida en con el principio -> buscamos la animación es decir, .anim y en el Inspector marcamos Loop Pose
  59. Cuando queramos crear una nueva animación, con el personaje seleccionado vamos a Window -> Animation y Pinchamos en el nombre de la última animación creada para sacar el botón Create new clip y crear una nueva animación.
  60. Para animar “al vuelo”, es decir, que los cambios que se realicen en los controles o los huesos generen un nuevo fotograma simplemente debemos marcar el botón rojo rec.

Unity moviemiento con script: Path

En animación es muy interesante tener un path ,es decir, una linea que marca por donde va nuestro personaje, un ejemplo clásico es un pajaro volando, el ciclo del aleteo se repite mientras el pajaro se desplaza a lo largo de una línea.

path1

Me resulta curioso que una herramienta tan útil como la creación de este path no venga de forma nativa en Unity, pero afortunadamente el Editor nos permite crear nuestras propias herramientas e Internet esta lleno de personas con gran conocimiento que comparten sus herramientas.

En esta pagina podéis encontrar un unitypackage con varios scripts muy interesantes Beizer Spline que nos permite crear puntos y curvas . nuestro path por el que utilizando Spline Walker podremos recorrerlo y con Spline Decorator colocar objetos según el Path

 

Recursos: Daga y mano

Este año en el máster en Diseño y programación de videojuegos estamos usando Anima2D para crear las animaciones de los personajes como podemos ver en este pequeño vídeo

Seguiremos avanzado en la animación mezclando con elementos creados con programación
daga mano

Darkest Dungeon reinvención del Dungeon

Darkest Dungeon es un buen ejemplo de lo que un videojuego indie puede llegar a conseguir, salio en Kickstarter y consiguió triplicar su objetivo de financiación y consolidarse como un buen rpg por turnos.

El videojuego tiene una estética marcada próxima al comic, ello habría dificultado realizar animaciones complejas por lo que el equipo de Red Hook Studios decidió hacer unas animaciones sencillas y complementar con movimientos de cámara y partículas, utilizando un sistema de combate por turnos , la principal baza del juego es la estrategia, la exploración, el desarrollo de los personajes y la historia, que avanza hacia la oscuridad y la locura Lovercrafianas.

Darkest Dungeon es un buen ejemplo de que los videojuegos en 2D pueden tener mucho que decir dentro de la industria.

 

Referencias para videojuego tipo beat’em up

Fighter sprite sheetPor mucho que avance la tecnología siempre vamos a necesitar referencias para crear animaciones, ya sean estas vídeos , secuencias de imágenes o hojas de personaje.

La animación para videojuegos 2D suele ser bastante más sencilla que las animaciones para televisión o cine, y se basa en principios como la reutilización, la optimización y un uso bajo de memoria.

Dungeons & Dragons: Chronicles of Mystara alcanzó la gloria de los llamados  beat’em up , tanto por su excelente diseño de juego que utilizaba reglas del juego de rol D&D simplificadas como sobre todo por un cuidado diseño de personajes y animaciones que enriquecía enormemente la experiencia.

Por eso recomiendo los sprite sheet de este juego con solera que llego a tener un “remake” para Playstation con un videojuego claramente inspirado en el mismo Dragon’s crown 

Sprites Sheet en Sprite DataBase

 

Crear un sprite sheet desde photoshop

Existen muchas herramientas especificas para crear sprites, casi todos los programas de animación permiten exportar la secuencia de imágenes como un sprite sheet , es decir , una imagen con todos los sprites.

Sin embargo puede que queramos trabajar con photoshop directamente para crear nuestros sprites, afortunadamente el proceso para crear el sprite sheet es sencillo, aunque requiere de ayuda externa.
El workflow de exportación de animación en photoshop a sprite sheet seria el siguiente:

  1. En  photoshop CS6, crearemos un archivo nuevo, tendremos en cuenta que el tamaño que le demos sera la base para crear el sprite sheet
  2. En photoshop CS6 , abrimos la Ventana -> linea de tiempo y creamos una linea de tiempo basada en capas
  3. Cada fotograma se crea añadiendo un nuevo cuadro, los cuadros son visualizadores de capas las capas que estén visibles se verán en el cuadro y el resto no, por lo que es común trabajar con una sola capa por cuadro, para animaciones sencillas.
  4. Podemos comprobar como queda nuestra animación pulsando play.
  5. Guardaremos nuestro psd y haremos una copia para no destruir el trabajo.
  6. Trabajaremos sobre la copia , ahora si, cada capa debera corresponder a un único fotograma.
  7. Nos descargamos Sprite Sheet Generator que es un archivo de comandos de photoshop que nos permitirá automatizar la tarea.
  8. En photoshop CS6 vamos a Archivo-> Secuencia de comandos-> Explorar cargamos el Sprite Sheet Generator jsx , nos saldra una ventanita donde elegir columnas, filas y fotogramas a exportar.
  9. Pulsamos en Generate Document, para comprobar que nos genera lo que queremos.
  10. Guardamos como PNG.

20 Webs para buscar Sprites

Lo reconozco me encantan los Sprites, esas imágenes que contienen los elementos de un videojuego 2D y que para mi alcanzaron su época dorada con las recreativas de finales de los 80 y comienzos de los 90.
Y es que los videojuegos 2D nunca pasaran de moda, gracias precisamente al arte que hay en esas animaciones, estilos y diseños.

Os dejo webs 20 webs donde podréis encontrar recursos de sprites sheets y gifs animados de videojuegos de todas las plataformas.

  1. Sprite Database
  2. The Shyguy Kingdom
  3. The Spriters Resource
  4. Sprite Land
  5. HasGrafics
  6. Vgmuseum
  7. OpenGameArt
  8. Game Art Guppy
  9. HellSoft
  10. Videgame Sprites
  11. Blogleech
  12. Retro Game Zone
  13. CG Textures
  14. Fightersgeneration.com
  15. Spiral Graphics
  16. RMXP Resources
  17. RPG Palace
  18. Lost Garden
  19. Videogame Sprites
  20. Pygame

Ayudas en el Inspector de Unity: Añadiendo atributos

En Unity podemos añadir ayudas al inspector cuando estamos utilizando un script para que nos recuerde que hace determinada variable, poner un rango para un número, hacer una caja de texto más grande etc.

Estas ayudas se llaman Atributos, la información que proporciona Unity sobre este tema puede encontrase aquí, aun que algunos no están muy bien explicados.

ATRIBUTOS:
[HelpURL ("http://www.jorgevallejo.es/2017/10/unity-atributos.html")]

¿Donde va?:
Antes de la declaración de la clase

¿Qué hace?
Permite generar un enlace desde el inspector a una URL, útil para generar ayudas internas.
Debermos pulsar sobre el botón interrogación del inspector

Ejemplo:
[HelpURL ("http://www.jorgevallejo.es/2017/10/unity-atributos.html")]
public class Menu_Inicio : MonoBehaviour {
}

[RequireComponent (typeof(Rigidbody))]
¿Donde va?:
Antes de la declaración de la clase

¿Qué hace?
Determina que el componente necesita otro y lo añade automáticamente cuando colocamos el script, de esta forma no olvidaremos un componente necesario.
Debemos hacer las referencias correspondientes para poder utilizarlo, es simplemente como si ubieramos añadido el componente manualmente.

Ejemplo:
[RequireComponent (typeof(Rigidbody))]
public class Menu_Inicio : MonoBehaviour {
Rigidbody rb;

void Start()
{
rb = GetComponent();
}
}

[Space(20)]
¿Donde va?:
Después de la declaración de la clase. Donde queremos que en el inspector haya un espacio.

¿Qué hace?
Permite crear un espacio entre bloques de variables.
Crea un espacio del tamaño indicado.

Ejemplo:
public class Menu_Inicio : MonoBehaviour {
[Space(120)]
public int fuerza;
}

[Header("Boton de cierre")]

¿Donde va?:
Después de la declaración de la clase. Donde queremos que en el inspector aparezca un texto.

¿Qué hace?
En el inspector nos aparecerá un label con el string que le pasemos al Header
Simplemente es informativo.

Ejemplo:
public class Menu_Inicio : MonoBehaviour {

....
[Header("Boton de cierre")]
}

[TextArea]
¿Donde va?:
Después de la declaración de la clase. Justo encima de la variable publica texto que queramos modificar.

¿Qué hace?
El texto aparecerá como un TextArea en un lugar de como InputField de una sola línea.
Útil para escribir textos desde el inspector.

Ejemplo:
public class Menu_Inicio : MonoBehaviour {
[TextArea]
public string texto="Aqui va un texto largo";
}

[Tooltip("¿Tiene botón de cerrar?")]
¿Donde va?:
Después de la declaración de la clase. Justo encima de la variable publica en la que se quiera que aparezca el tooltip o texto explicativo.

¿Qué hace?
Cuando mantengamos el cursor sobre la variable asignada, en el inspector nos aparecerá un tooltip explicativo.
Útil para variables complejas o cuando hay muchas parecidas.

Ejemplo:
public class Menu_Inicio : MonoBehaviour {
[Tooltip("¿Tiene botón de cerrar?")]
public bool tiene_cierra;
}

[Range(0.0F, 10.0F)]
¿Donde va?:
Después de la declaración de la clase. Justo encima de la variable publica.

¿Qué hace?
Aparezca un rango en forma de slider en lugar de un cajetin.
Valido para números enteros o decimales.

Ejemplo:
[Range(0.0F, 10.0F)]
public int fuerza;

[ExecuteInEditMode]
¿Donde va?:
Antes de la declaración de la clase.

¿Qué hace?
Permite ejecutar el script en modo edición, lo que puede ser extremadamente útil cuando el juego empiece a pesar y tarde en arrancar, muy útil también para hacer pruebas sin arrancar el juego.

Ejemplo:
[ExecuteInEditMode]
public class Menu_Inicio : MonoBehaviour {}

También podremos crear menus contextuales, es decir que aparezcan cuando pulsemos el botón derecho del ratón sobre una variable.
¿Qué necesita para funcionar?
Necesitaremos:
Declarar un [ContextMenuItem("Reset", "Borra")]
Declarar un [ContextMenu ("Borra texto")]
Tener una función asociada en este caso Borra

¿Donde va?:
Después de la declaración de la clase. En la variable que queramos que tenga el menu contextual.

¿Qué hace?
Aparecerá un menú contextual al pulsar el botón derecho del ratón, que contendrá minibotones asociados a funciones.
Útil para tareas repetitivas dentro del inspector como poner una variable a 0 , borrar un texto, etc

Ejemplo:
[ContextMenuItem("Reset", "Borra")]
[Multiline(8)]
public string texto_largo = "";
[ContextMenu ("Borra texto")]
void Borra() {
texto_largo = "";
}

Ponencia en las III Jornadas Educativas

III Jornadas Educativas

III Jornadas Educativas

El sábado 30 a las 14:05 estaré dando una ponencia sobre “Enseñanza Creativa” en las III JORNADAS EDUCATIVAS
Edificio Multiusos de La Vega. Avenida de Colón 80. Arroyo de la Encomienda.

La educación y la creatividad deberían ir de la mano sobre todo teniendo en cuenta el futuro que espera a las nuevas generaciones donde las tareas repetitivas cada vez serán mas susceptibles de ser automatizadas, y donde existen grandes retos que afrontar ,¿Qué hacer con  nuevas tecnologías como la visión artificial o la conducción autónoma? Donde ya no buscamos una solución , sino nuevos modelos de negocio , aplicaciones, por lo que es mas necesario que nunca tener desarrollada la creatividad.

La creatividad será necesaria para enfrentarse a los retos del nuevo modelo productivo

Hablare de tres aspectos fundamentales para poder desarrollar la creatividad:

1) El pensamiento critico , la capacidad de analizar la información y buscar diferentes soluciones , desarrollando en los alumnos un filtro que les permita generar su propio criterio.

2) El punto de visita, ampliar el punto de vista, ver las cosas con perspectiva y sobre todo ser capaces de empatizar con el otro, nos abre la mente y nos permite tener ideas que de otra forma seria imposible.

3) Tolerancia al fracaso, el fracaso es un tema que se suele esquivar, sin embargo cuando uno esta creando algo nuevo y diferente, ¿Cómo sabe si va a funcionar? Debemos aprender que la cultura del fracaso forma parte del proceso creativo y que el verdadero fracaso es no intentarlo.

Todo ello se explicara de una forma diferente, tratando de que esta ponencia resulte divertida, amena y casi mágica.

Las jornadas son gratuitas , se interesa la creatividad o los temas relacionados con la educación tanto en el ámbito docente como en la educación que ejercen los padres, puedes apuntarte en info@fluircentro.es

Nuevo Taller de creatividad “Enciende tu creatividad”

Taller creatividad

Es un taller muy practicodinámico y divertido, esta concebido para todo aquel que busque fomentar su creatividad con especial foco en la creación de  nuevas ideas de productos y servicios que tengan valor.

Objetivo : Crear nuevas ideas de producto o servicios, que sean originales y tengan valor.

Para ello aprenderemos a convertirnos en buscadores de ideas, como buscadores de perlas salvajes aprenderemos a sumergirnos en el “modo creativo” una forma diferente de pensamiento.

Practicaremos 10 metodologías creativas que son como caladeros de pesca, donde es más probable que encontremos muchas ostras – ideas.

Finalmente evaluaremos si las ostras que hemos buscado contienen perla o no, mediante una serie de técnicas de evaluación de ideas.

DÍA 22:

     APRENDIENDO EL “MODO CREATIVO” . LAS 6 CLAVES DEL PENSAMIENTO CREATIVO

  1. BUSCANDO IDEAS: IMPORTA MÁS LA CALIDAD QUE LA CANTIDAD
  2. NO JUZGAR LAS IDEAS: APLAZAR EL JUICIO
  3. SALIRSE DEL MODELO: ROMPIENDO LA CAJA
  4. IMAGINAR: CERRAR HUECOS Y CREAR DETALLES
  5. CAMBIAR EL PUNTO DE VISTA: EMPATÍA
  6. EQUIPO: POTENCIAR LAS IDEAS

DÍA 23:

      METODOLOGÍAS CREATIVAS I

  1. NIÑO PREGUNTÓN
  2. ANÁLISIS COMBINATORIO
  3. MATRIZ DESCUBRIMIENTO
  4. ANALOGÍA
  5. SCAMPER
  6. PALABRAS ALEATORIAS

DÍA 24: 

      METODOLOGÍAS CREATIVAS II

  1. BRAINSTORMING
  2. BRAINGWRITING
  3. 6 SOMBREROS DE PENSAR Y DE SER
  4. TÉCNICA DEL CALCETÍN 

      EVALUACIÓN DE IDEAS.

  1. DAFO
  2. EVALUACIÓN PNI
  3. APLICACIÓN Y PONTENCIALIDAD
  4. LOS OCHO FACTORES
  5. SUBASTA DE IDEAS 

Es el momento de volver a sentir la magia del proceso creativo, de sacar todas las ideas que hay en tu cabeza, de trabajar en equipo para crear algo único y original.

APÚNTATE En:

TALLER DE CREATIVIDAD

Workflow Unity e IOs : Expotación y subida al App Store

Cuando hablamos del proceso de subida al App Store de un videojuego o aplicación creada con Unity debemos realizar una serie de pasos, lo que denominamos workflow o flujo de trabajo que nos permitirán llegar a buen puerto, es decir, conseguir que nuestro videojuego este publicado en el App Store. El proceso es bastante complejo por lo que he tratado de mostrar cada paso, algunos se pueden hacer antes o después, pero otros deben hacerse secuencialmente, así q es preferible que sigáis el orden a rajatabla para minimizar errores.

Una de las características fundamentales de Unity es la multiplataforma, es decir, la capacidad de poder exportar a diferentes plataformas haciendo un único desarrollo, a pesar de las singularidades de cada una, ello nos permite crear el videojuego por completo en Unity y sólo depender del Xcode para su subida al App Store.

Requerimientos:

Podemos exportar el videojuego desde un Pc, sin embargo el proceso de subida al App Store requiere de Xcode y licencia de desarrollador Apple Developer, Xcode sólo se puede instalar en Mac, ademas de que algunas partes del proceso requieren tener el sistema de llavero de Mac, que viene con los Mac.
La opción mas barata es un Mac mini, que podréis encontrar por unos 600$.
Para crear el videojuego:
Pc o Mac para la creación del videojuego.
Unity
SDK de IOs (Se descarga en el punto 3)

Para la subida al App Store:
Un ordenador Mac
Xcode instalado
Una cuenta activa en Apple , tendremos longeanos varias veces así que tener el password a mano
Estar dado de alta como desarrollador IOs https://developer.apple.com/ , al corriente de pago, actualmente son 99$ al año.
Recomendable:
Tener dos dispositivos para hacer pruebas un iphone y un ipad con IOs 8 instalado y sus cables de conexión.
Nota: Podemos desarrollar el videojuego sin ellos, son para testeo.

Workflow Unity App Store
En Unity
BLOQUE I
1) Desarrollar el videojuego en Unity.
2) Abrir el Panel Build Settings, añadir todas las escenas de nuestro videojuego, estas se pueden arrastrar directamente a la ventana de Build Settings.
3) Seleccionar la plataforma de IOs, Seleccionando IOs y pulsando Switch Platform
Unity colocara las librerías necesarias para la posterior exportación, si no las tenemos instaladas nos aparecerá un botón para descargarlas.
3.1) Pulsar el boton de descarga, una vez descargado, cerramos Unity.
3.2) Instalar el SDK de IOs
3.3) Abrir Unity de nuevo, comprobar que está instalado en Edit-> Preferences -> External Tools (Hacer la ventana más grande si no se ve) Aparecerá Xcode Default Settings
4) Este paso es muy importante dada la política de actualizaciones de IOs, ya que actualmente las apps que se suban deben incluir desarrollo de 64-bits e IOS 8 o superior.
Por lo que debemos ir al Build Settings de nuevo -> Player Settings y en Configuration cambiar Scriping Backend, de Monox2 que viene por defecto a IL2CPP, cuando hayamos seleccionado este sistema de scriping podremos elegir Architecture -> Universal La cual contiene los dos sistemas Armv7 y Arm64.

5) En Player Settings -> Other settings Cambiar el Identificator Bundle , personalmente utilizo la nomenglatura com.nombre_desarrollador.nombre_proyecto la cual me sirve tanto para Ios como para Android.
6) Cambiar el Nombre de la Compañia y del producto, en Player Settings arriba del todo.
7) Añadir iconos y pantallas de presentación, todo ello en el Player Settings.
Nota: Para no trabajar dos veces, y dado que Apple es riguroso con el tema de los tamaños , es interensate acudir a http://help.apple.com/itunes-connect/developer/#/devd274dd925 para ver los tamaños de las imagenes.
8) Repasar cada uno de los puntos anteriores.
9) Crear una carpeta vacía llamada Exportación
10) Crear una segunda carpeta vacia dentro de Exportación llamada Nombre_videojuego_IOs
11) En Build Settings, marcamos Build in Xcode Release y en Development Build marcada .
12) Dar al boton de Build y selecciona nuestra carpeta, la creamos vacía por que eliminara cualquier contenido que tenga.
Llegados aqui tendriamos nuestro videojuego preparado para ser abierto en Xcode.

BLOQUE II
Preparación para subida a App Store , Certificados
1) Nos longeamos en https://developer.apple.com/account
2) Vamos a Certificates
3) Comprobamos que tenemos un certificado de Desarrollador y un certificado de distribución
4) Si no los tenemos, Xcode nos podra generar uno en nuestro primer proyecto, veremos este punto cuando hablemos del proceso en Xcode.
5) Crear un App ID de nuestra aplicación, que será el Bundle Identificator
6) Para poder testear la aplicación, añadir Devices
7) Para la subida al App Store será necesario un Provisioning Profiles -> Distribution
8) Tendreis que bajaros ese Provisioning Profile para luego meterlo en el Xcode.

BLOQUE III
Preparación para subida a App Store en itunesconnect
1) Longearnos en itunesconnect.apple.com
2) Ir a Apps y dar al boton +
3) Rellenar los formularios, tener presente que hay que tener una política de privacidad por cada aplicación o videojuego, que como mínimo vas a necesitar 1 imagen de 1024×1024 del icono del videojuego, una imagen de captura para iphone y otra imagen para iPad que cumpla las especificaciones http://help.apple.com/itunes-connect/developer/#/devd274dd925
4) Calificar el contenido siguiendo el formulario.
5) Poner un precio a la aplicación así como la distribución por países.
6) Rellenar los campos que falten, tener poner un contacto de desarrollador.
7) Podemos ir guardando e ir comprobando si nos falta algo, dando a Enviar para revisión, ya que aun nos falta subir la app, nos apareceran en rojo los campos a completar.

BLOQUE IV
En Xcode:
1) Cargamos el proyecto de Unity, simplemente con abrir nuestra carpeta videojuego_ios
2) Realizamos una primera compilación para ver si no hay errores Con Xcode -> Build
3) Realizamos los testeos necesarios , conectando nuestro iphone o ipad que previamente hemos añadido como Devices en BLOQUE II el punto 6.
4) Cambiamos el Team en General por nuestro Desarrollador
5) En Build Settings cambiamos Code Signing por nuestro Provisioning Profiles creado en el Bloque II punto 7.
5) Compilamos en Product-> Archive
6) Si todo ha ido bien, podremos subir nuestro proyecto al App Store, por lo que es necesario haber realizado previamente la configuración del mismo los pasos del Bloque III.
7) Window-> Organicer es el gestor de subidas al App Store, debera aprecernos nuestra compilación, podemos hacer una segunda comprobación dandole a Validate.
8) Pulsamos en Submit to App Store, atención es muy importante haber realizado los pasos del Bloque II, ya que hay que relacionar la aplicación a subir con su compilación.
9) Iniciamos la subida al Apple Store.

Bloque V
Subida a App Store en itunesconnect
1) Longearnos en itunesconnect.apple.com
2) Sólo nos queda seleccionar nuestra compilación, donde ponga Subida por Xcode o AppLaucher, hay un botón de más para seleccionar la que acabamos de subir.
3) Pulsamos en Enviar para revisión y rellenamos los formularios que nos faltan.

Ahora dependemos de que Apple nos valide la aplicación lo cual puede tardar entre dos días a una semana.
Para mi es un proceso excesivamente complejo, cuantos más pasos hay más posibilidades de que comentamos un error, pero no queda mas remedio que resignarse, tomárselo con calma y hacerlo, ya que con suerte solo tendremos que hacerlo una vez.

Espero que os haya servido, si tenéis cualquier duda, escribirme un comentario.