martes, 16 de diciembre de 2014

Aprender C# orientado a Unity3D

Ya tenía ganas de volver a sacar algo relacionado con Unity3D y no estaba seguro de que y el usuario de Twitter @Esteve_Segura me ha dado una buena idea para una entrada a la vez que por supuesto, dar una contestación mas larga que los 140 caracteres de Twitter.


Tenemos que partir de una base que al menos a mi, se me hace un poco extraña, tenemos un lenguaje orientado a objetos que dentro de Unity3D, entonces ¿Que hacemos? ¿Nos basamos en crear clases muy grandes con herencia y que una grande controle el juego? ¿O hacemos scripts pequeños con las líneas precisas para una pequeña función del software?
En mi experiencia personal, tras estar trasteando con Unity3D, trabajando y conocer a otras personas que se dedican a ello e intercambiar ideas, opiniones y sobretodo experiencia, he llegado a la conclusión de que hay que usar ambas cosas pero cada una estará enfocada a una parte del desarrollo.

En primer lugar si, vamos a crear clases que llamaremos "Clases script" las cuales, a través de la herencia con "Monobehaviour" podemos usar ciertos métodos definidos por Unity3D que nos permitirán de manera muy sencilla digamos que llevar el control del juego y con pocas líneas de código, estos scripts serán solo para las cosas que interfieran directamente con la escena, es decir, un objeto que necesite de otros objetos para interactuar en la escena como por ejemplo una nave que dispara balas, esto será una "Clase script" la gestión de los disparos.

Y ahora bien, ¿Entonces para qué queremos las clases orientadas a objetos normales? pues siguiendo el mismo ejemplo, podríamos tener una clase que nos gestionase las balas o en general, que nos gestionase la creación de objetos, en caso de no tener bastantes balas para disparar, que nos crease mas, y si hay bastantes que buscase una desactivada para poder usarla de nuevo.

Otro ejemplo que quizás deje mas claro la diferencia sería por ejemplo una clase para leer y escribir en un JSON o XML para guardar datos de las partidas, tan sencillo como para poder guardar datos mas complejos que los que nos permite el playerprefs de Unity3D, y después llamar a esta clase o crear un objeto de esta clase para interaccionar con nuestras partidas guardadas, para cargarlas o salvarlas.

Digamos que el código mas complejo y sobretodo el mas reutilizable como herramienta fuera de los métodos de Monobehaviour serían los que usaríamos como lenguaje orientado a objetos, y en caso de los scripts serían especialmente los que usan esta clase Monobehaviour que nos dá por defecto Unity3D al crear una nueva clase de c#.

Si nos acostumbramos a trabajar con la programación por scripts de Unity3D debemos intentar volver a usar las clases como lo que son, y hay muchísima documentación para ello, de lo cual recomiendo el MSDN de microsoft el cual está en español e inglés además de traer numerosos ejemplos.

Aquí dejaré algunos enlaces para aprender a programar con C# de manera general que por supuesto, si aprendemos a hacerlo como para lo que realmente está preparado C#, como lenguaje orientado a objetos para crear software genérico, usarlo dentro de Unity3D no nos supondrá ningún problema, pero por supuesto, ver que hay ciertas clases que podemos crear como pequeños recursos para la escena como si fuesen scripts nos agilizará nuestro proceso de creación además de tener ciertas cosas de manera mas descentralizadas para poder usarlas cada vez que te pueda ser necesario con tan solo arrastrar y soltar a los objetos de la escena.

Finalmente dejaré aquí un par de enlaces que considero de alto interés para aprender C# en español:

http://msdn.microsoft.com/es-es/library/z1zx9t92.aspx

http://dis.um.es/~bmoros/privado/bibliografia/LibroCsharp.pdf

Quizás un buen debate sería el por qué elegir C# en vez de javascript o boo, que son otros lenguajes que trae Unity3D y sus buenos motivos tienen.

Edit: aprovecho para añadir un par de enlaces de interés dentro de esta misma web para saber, que métodos usar y para que sirven de la clase monobehaviour y buenas prácticas dentro de Unity3D.

http://www.hagamosvideojuegos.com/2014/02/unity3d-scripting-monobehaviour.html

http://www.hagamosvideojuegos.com/2014/02/unity3d-scripting-optimizacion-de.html

PD: Por último decir que salió hace un par de días la tercera entrega de mis tutoriales de Unity3D y hago un peqfspoiler de que en la siguiente nos pondremos a trastear código donde espero poder dejar algo más claro estos conceptos. 

miércoles, 26 de noviembre de 2014

M68K Assembly: Empezando por lo básico

Después de empezar a leer teoría, asimilar conceptos y ganas de empezar a tocar la parte práctica, he comenzado a trastear con la parte mas básica de todas, mover registros dentro del microprocesador, que es lo que me trae aquí hoy, un pequeño tutorial de como mover registros en ensamblador y para qué se mueven.

Un primer paso para hacer un videojuego para mi consola por excelencia

Es muy importante saber que, al fín y al cabo, la programación a alto nivel, enmascara u oculta esta tarea que en un proceso pequeño puede ser relativamente "sencillo" pero a la hora de hacer un videojuego o en definitiva, un software con algo de complejidad, puede ser todo un infierno trabajar con el, pero lo importante es que realmente, trabajamos con esto, y hoy voy a dar aquí el primer paso de teoría básica para entenderlo.

martes, 11 de noviembre de 2014

Game seeds, agiliza tu mente para cread ideas

Esta tarde he estado en un taller de Pixels & Coffee que, para quien no les conozca, son un grupo de personas que organizan encuentros de desarrolladores de videojuegos, ya sea por profesión, hobby o simple curiosidad, creo que en principio estas actividades las hacen exclusivamente en sevilla pero para no dar información falsa, simplemente aconsejo entrar en su web, de la cual tendréis el link al final de esta entrada.

El taller en cuestión ha tratado sobre un juego de cartas el cual, a través de este juego para dos o mas personas (recomienda un máximo de 12 personas, pero pueden ser mas), deberás de crear tu propio videojuego en base a ciertas características que se te mostrarán en estas cartas, además de la mecanica del juego, te ayudará a crear a un protagonista y a un coprotagonista o sencillamente un compañero auxiliar.

Game Seeds, Character to game design
Por supuesto, aunque este juego te obligue a hacer un protagonista y un compañero, no tienes por qué estar obligado a, si finalmente desarrollas el videojuego planteado tras una partida de game seeds, crearlo con ese protagonista y su compañero, ¿Y si quiero crear un juego como el tetris que no tiene personaje principal? ¿Y si quiero crear un videojuego con solo un jugador? no pasa nada, este juego de cartas no es realmente una herramienta para crear videojuegos en si, si no para que, a medida que juegas a este juego, agilices tu creatividad, tu improvisación y por supuesto, si durante una partida se te ocurre tu gran idea millonaria, ¡Enhorabuena!

Ha sido un taller práctico en el cual hemos creado dos videojuegos, este juego se juega en dos equipos de manera que cada uno hace un videojuego, y además de una gran dosis de humor entre los asistentes con los videojuegos que estabamos fabricando a través de ideas bastante graciosas y absurdas, al final del todo, al menos en el caso de mi equipo en particular, hicimos una mecánica de juego que a mi al menos me ha resultado bastante atrayente y quizás algún día la ponga en práctica en algún videojuego.

Este juego actualmente no se puede comprar muy a mi pesar ya que gastaron la primera remesa y deben imprimir mas, pero en cuanto lo hagan volverán a ponerlas a la venta y al menos por mi parte compraré una de estas barajas por una sencilla razón, la idea lo merece y creo que es un juego al que jugar es muy divertido a la par que puede ayudarte a crear la mecánica que realmente estabas buscando para tu videojuego.

Por ultimo agradecer el taller a los chicos de Pixels & Coffee, ya que ha sido una tarde entretenida, productiva y por supuesto con ganas de volver a asistir a otro evento de este tipo.

Game Seeds: http://www.gameseeds.net/
Pixels & Coffee: http://pixelsandcoffee.es/

jueves, 6 de noviembre de 2014

Comenzando un nuevo proyecto

Esta noche antes de acostarme quería comentar un nuevo proyecto que tengo entre manos, varias personas ya lo saben, tampoco ha sido super secreto, pero sí que no quise hacerlo público del todo hasta poder dedicarle algo de tiempo, este proyecto sé que me viene grande, pero no es imposible.
Quien conozca este microprocesador se llevará una grata sorpresa
El proyecto en cuestión es hacer un videojuego desde cero casi en el sentido literal de la palabra, Esta vez no será con Unity3D, quiero experimentar con otra tecnología, para empezar, partiremos de la base de que esta tecnología es directamente el hardware, ya que para desarrollar no proporciona ningún tipo de software extra mas que un compilador, así que no, no hay IDE, ni hay herramientras que hagan todo mas sencillo, ¿Lenguaje? Ensamblador, Sí, ensamblador, y por si fuese poco para una consola de antaño, mi preferida de lejos la cual, como ya dije en varias entradas, cualquier persona que haya leido mi blog lo sabe con toda seguridad, la SEGA Megadrive/Genesis, este proyecto podría quedar al margen del blog, pero realmente, al igual que con Unity3D, las cosas que aprenda, las explicaré aquí y por supuesto, cuando consiga hacer algo medianamente decente lo iré publicando aquí.

Explicaré paso a paso, junto a los tutoriales de Unity3D que seguiré haciendo, como programar en ensamblador para el Motorola 68000 que además, no solo sería válido para esta consola si no para muchas otras que usan este mismo microprocesador.

Otro motivo por el que hacer esto es entender de verdad como funciona una máquina por dentro, en las mas profundas entrañas, ya que detrás de ensamblador solo queda ya el lenguaje de la máquina, los ceros y los unos, el binario.
La videoconsola en cuestión
Espero que estos tutoriales puedan servir a alguien con la misma sed de conocimiento o ganas de hacer un videojuego retro que tengo yo, en caso contrario no pasa nada, no será lo único que haga en este blog al igual que no solo hago tutoriales de Unity3D.

Por último decir que, a pesar de que la mayoría de personas con las que hablé del tema me dijeron que, o bien no llevaría a nada y que sería una pérdida de tiempo o también el que era una locura trabajar a tan bajo nivel, por la cantidad de esfuerzo necesario para hacer poquísimo, también hay algunas personas que no solo me han apoyado si no que además incluso se han ofrecido a colaborar, personas que quizás puedan aportar también algún minitutorial al respecto, quien sabe.

De paso comentar que, si hay alguna tecnología en especial que pudiese ser interesante de aprender y mostrar aquí mi aprendizaje, a través de los comentarios, formulario de contacto o incluso las redes sociales me lo comentes, podría ser interesante.

miércoles, 22 de octubre de 2014

FamiliarGameJam Vol.3

Este último fin de semana ha sido la tercera edición de la Familiar Game Jam a la cual no pensaba faltar y que seguiré asistiendo mientras el tiempo me lo permita, después de todo este fin de semana he estado un poco enfermo y entre trabajo, sueño acumulado y demás he tenido que posponer mis conclusiones sobre esta gamejam.
Aquí el banner de nuestro juego

jueves, 9 de octubre de 2014

CodinGame: Juega a aprender a programar

Hace tiempo ya hablé de un juego en formato web que se jugaba programando, y hoy traigo mas de lo mismo que aquella vez, ¿Por qué? porque este me parece mucho mejor y mas acertado tanto para aprender a programar como para ver quien es mejor programador si quieres retar a otra persona.
El logo de la web
Quizás el punto mas importante es que sirve para aprender a desarrollar en varios lenguajes de programación, quizás debas tener un poco de paciencia para comprender como funciona, yo al menos al principio no pillaba muy bien cual era la forma de saber como acceder a los datos y como procesarlos pero es bastante sencillo y parte del aprendizaje de lo cual no diré mucho, si queréis aprender lo mejor es echarle un vistazo y a base de intentos seguro que conseguís algo.

Los lenguajes de programación disponibles a aprender son:
  • Bash
  • C
  • C#
  • C++
  • Clojure
  • Dart
  • Go
  • Groovy
  • Haskell
  • Java
  • Javascript
  • ObjectiveC
  • Pascal
  • Perl
  • PHP
  • Python
  • Python3
  • Ruby
  • Scala
  • VB.NET
Así que si está entre los afortunados el lenguaje que te gustaría aprender es tu oportunidad, no solo tienes que resolver planteamientos algorítmicos de videojuegos si no que además tiene modo multijugador, logros, puntos y esas cosas gamificadas que hacen que guste tanto a la gente de a pie.

Mi recomendación total y absoluta porque además cada ejercicio suele ser un escenario nuevo, con una nueva mecánica a resolver.

De paso decir que de vez en cuando me pondré a resolver en orden todos los ejercicios que pueda cuando tenga ratos en los que no pueda escribir o no tenga nada especial que escribir aquí y por supuesto acepto retos de cualquier persona que lea esto, no importa el resultado, lo interesante es aprender el uno del otro para ver como y por qué ha hecho cada uno su algoritmo y poder comparar cual ha sido mas óptimo y por qué.

Link: http://www.codingame.com

viernes, 3 de octubre de 2014

¿Que software uso para desarrollar mi primer videojuego?

Un lector del blog me contactó para preguntarme sobre mi opinión al respecto sobre el framework de Monogame para empezar a desarrollar videojuegos, que si bien no es XNA, es cierto que portar del ya fallecido XNA a el es muy sencillo y además es opensource lo cual hace que este proyecto me haga verlo como un paso mas adelante, pero en definitiva, quiero llevar su pregunta a un nivel mas allá...
¿Que software o framework uso para mi primer videojuego?
Bien, empecemos por lo básico, ¿Debería usar un IDE? ¿Un framework? ¿Trabajar desde cero con un lenguaje de programación y crearme mis propias herramientas? ¿Trabajo en ensamblador y muero en el intento?

miércoles, 1 de octubre de 2014

Taller en DeusExMachina: empezando con Unity3D

Hace mucho que no cuelgo un tutorial de Unity3D, llevaba tiempo queriendo colgar alguno pero no me decidía y aunque no directamente en el blog, en una web amiga voy a colgar semanalmente unos tutoriales que quizás, deberían haber sido los primeros tutoriales de este blog, o al menos, los primeros antes de empezar a revisar los tutoriales que he ido añadiendo por aquí que son mas bien para alguien que tenga ya al menos un pequeño conocimiento de la herramienta.

martes, 30 de septiembre de 2014

Animalada: Festival de animación

Animalada es un festival sevillano que se realizará en la misma semana de la GameJam de la que hablé anoche, si bien es un festival de animación, cosa que, no está del todo relacionada con los videojuegos o no al menos a la animación en la que mayoritariamente se centra en este festival, (Cine, cortometrajes...) es cierto que van a enseñar un par de cosas que si no fuese por que estaré trabajando, estaría encantado de asistir.


Si bien como acabo de decir este evento se centrará más en animaciones para cortometrajes, van a tener conferencias en las que se expondrán experiencias de otras personas lo cual a mi al menos me ha demostrado que puede aportar muchísimo al punto de vista de un profesional y lo mas importante para mi, un par de cursos a los que me encantaría asistir pero muy a mi pesar no va a poder ser a causa de la incompatibilidad con mi horario de trabajo.

lunes, 29 de septiembre de 2014

FamiliarGameJam vol. 3

Después de mi primera GameJam a la que asistí en febrero, que fue la anterior edición de esta misma, una vez mas vuelvo a las andadas y espero poder no solo volver a terminar un videojuego si no que por supuesto quede mucho mejor que el anterior.

¡Al fin otra Game Jam!
Voy a asistir presencialmente, con las mismas ganas o mas que la anterior, con mucho mas aprendido y por aprender y con ganas de conocer a mas personas del mundillos, además esta tercera entrega tengo la impresión de que será especial.

miércoles, 24 de septiembre de 2014

Música en los videojuegos, aprendiendo, comprendiendo y valorando

Aunque ya hace meses de esto, realmente esta conferencia para mi, también me ha hecho valorar algo que, desde un punto de vista bastante inocente, en la mayoría de los casos (no todos), he pensado que, la música que ha sonado de fondo en un nivel de un videojuego, era lo que sentía el autor de esta al ver el nivel del videojuego, que al fin y al cabo, era una forma de expresar algo mas dentro del videojuego, pero ni de lejos, hasta esta conferencia supe valorar lo que ahora he llegado a valorar dentro de esta parte tan importante de los videojuegos.
Mi compositor favorito, Yuzo Koshiro
La conferencia de la que hablo es la que le da nombre al título de esta entrada, expuesta por David Serrano en la segunda edición del Gamepolis, una conferencia que también ha cambiado mi forma de ver las cosas, es decir, no solo que la música sea buena y que exprese lo que sientes viendo ese videojuego, hay mas factores a tener en cuenta y aquí los mas importantes a tener en cuenta.

jueves, 11 de septiembre de 2014

Javascript Scripting: Swipe para menú lateral en PhoneGap

Hoy traigo una tecnología que si bien no toqué mucho, me parece mas interesante para hacer aplicaciones que para hacer videojuegos, no obstante hay videojuegos muy sencillos que con este framework pues no te andas con rodeos ya que javascript es muy, muy sencillo de aprender y maquetar con html no es algo complejo de aprender tampoco y sinceramente, da bastantes buenos resultados.

En este caso pondré un ejemplo de swipe para un menú lateral muy sencillo y si bien podría mejorar la funcionalidad, para lo que lo usé en su momento, realmente funcionaba lo suficientemente bien.

Por supuesto es bastante aplicable a cualquier tipo de swipe, solo se tendría que adaptar un poco a la condición que se desee, en este caso tengo el caso de un swipe horizontal y otro vertical.

Pasemos al código:

//Mínimo de píxeles de distancia a recorrer para activar el swipe
var swipeMinDistanceX = 100;
var swipeMinDistanceY = 100;

//Variables globales necesarias para funcionamiento interno
var swipeStartX;
var swipeStartY;

//Eventos touch
function initSwipe()
{
    document.addEventListener("touchstart", swipeStartHandler, true);
    //document.addEventListener("touchmove", swipeMoveHandler, true);
    //document.addEventListener("touchenter", endHandler, true);
    //document.addEventListener("touchleave", endHandler, true);
    document.addEventListener("touchend", swipeEndHandler, true);
    //document.addEventListener("touchcancel", cancelHandler, true);   
}

//Cancelar eventos
function cancelSwipe()
{
    document.removeEventListener("touchstart", swipeStartHandler, true);
    //document.removeEventListener("touchmove", swipeMoveHandler, true);
    //document.removeEventListener("touchenter", endHandler, true);
    //document.removeEventListener("touchleave", endHandler, true);
    document.removeEventListener("touchend", swipeEndHandler, true);
    //document.removeEventListener("touchcancel", cancelHandler, true);   
    
}

//Al empezar a tocar
function swipeStartHandler(startEvent)
{
    var touchStart = startEvent.changedTouches[0];
    swipeStartX = touchStart.clientX;
    swipeStartY = touchStart.clientY;
}

//Al hacer drag
function swipeEndHandler(moveEvent) 
{
    var touchMove = moveEvent.changedTouches[0];
    var moveX = touchMove.clientX;
    var moveY = touchMove.clientY;
    
    if(Math.abs(moveX - swipeStartX) > Math.abs(moveY - swipeStartY)) //Drag Horizontal
    {
        if ((moveX - swipeStartX) > swipeMinDistanceX) //Drag Derecha
        {
            Capa.className= "Mostrar"; //Muestra la capa
        }

        if ((moveX - swipeStartX) < -swipeMinDistanceX) //Drag Izquierda
        {
            Capa.className= "Ocultar"; //Oculta la capa
        }
    } else { //Drag Vertical
        if ((moveY - swipeStartY) > swipeMinDistanceY) //Drag Abajo
        {
            
        }
        
        if ((moveY - swipeStartY) < -swipeMinDistanceY) //Drag Arriba
        {
            
        }
    }
};
Empecemos a desglosar este pequeño script:

//Mínimo de píxeles de distancia a recorrer para activar el swipe
var swipeMinDistanceX = 100;
var swipeMinDistanceY = 100;

//Variables globales necesarias para funcionamiento interno
var swipeStartX;
var swipeStartY;
Aquí decimos el mínimo de píxeles a recorrer para activar el swipe como puse en el comentario, y después dos variables internas que simplemente guardarán mas adelante el valor de la posición en la que empezaremos a hacer el swipe.

//Eventos touch
function initSwipe()
{
    document.addEventListener("touchstart", swipeStartHandler, true);
    //document.addEventListener("touchmove", swipeMoveHandler, true);
    //document.addEventListener("touchenter", endHandler, true);
    //document.addEventListener("touchleave", endHandler, true);
    document.addEventListener("touchend", swipeEndHandler, true);
    //document.addEventListener("touchcancel", cancelHandler, true);   
}

//Cancelar eventos
function cancelSwipe()
{
    document.removeEventListener("touchstart", swipeStartHandler, true);
    //document.removeEventListener("touchmove", swipeMoveHandler, true);
    //document.removeEventListener("touchenter", endHandler, true);
    //document.removeEventListener("touchleave", endHandler, true);
    document.removeEventListener("touchend", swipeEndHandler, true);
    //document.removeEventListener("touchcancel", cancelHandler, true);   
    
}
Estas dos funciones son las que llamaremos para iniciar el swipe y cancelarlo en caso de que ya no querramos usar el swipe en nuestro dispositivo, he dejado comentado algunos eventos que tiene PhoneGap para controlar la pulsación de nuestra pantalla, que si bien no usamos aquí, está bien saber cuales son por si en algún caso nos hiciese falta, cuando querramos que se habilite esta función que estamos creando llamaremos a initSwipe() y cuando querramos cancelarla pues llamaremos a cancelSwipe().

//Al empezar a tocar
function swipeStartHandler(startEvent)
{
    var touchStart = startEvent.changedTouches[0];
    swipeStartX = touchStart.clientX;
    swipeStartY = touchStart.clientY;
}
Esta función se llama swipeStartHandler, por ser el nombre que se ha asociado al evento touchstart, de manera que es cuando empezaremos a hacer el movimiento con nuestro dedo en la pantalla, aquí usaremos las dos variables que declaramos al principio para guardar la posición X e Y respectivamente de la pantalla donde empezamos a mover nuestro dedo, en este caso, el primer dedo que hayamos puesto en la pantalla, startEvent, que es el parámetro que recibimos, le pedimos el primer dedo que ha sufrido un cambio, ya sea de posición o cualquier cosa y de ahí podemos extraer la información delas coordenadas en las que se encuentra.

//Al hacer drag
function swipeEndHandler(moveEvent) 
{
    var touchMove = moveEvent.changedTouches[0];
    var moveX = touchMove.clientX;
    var moveY = touchMove.clientY;
    
    if(Math.abs(moveX - swipeStartX) > Math.abs(moveY - swipeStartY)) //Drag Horizontal
    {
        if ((moveX - swipeStartX) > swipeMinDistanceX) //Drag Derecha
        {
            Capa.className= " transition mostrar"; //Muestra la capa
        } else { //Drag Izquierda
            Capa.className= "transition ocultar"; //Oculta la capa
        }
    } else { //Drag Vertical
        if ((moveY - swipeStartY) > swipeMinDistanceY) //Drag Abajo
        {
            
        } else { //Drag Arriba
            
        }
    }
};
Y por último en este último método, se le llamará automáticamente al terminar de hacer swipe, es decir, al soltar el dedo de la pantalla, ya que la función swipeEndHandler la tenemos asociada al evento touchend como podemos ver mas arriba.

En este caso he usado Capa.className para especificar que oculte o muestre una capa, en caso de querer saber como hacer esto a través de CSS como ha sido este caso, es tan sencillo como esto:

.Capa.mostrar{
    -webkit-transform: translate3d(75%, 0, 0); 
    transform: translate3d(75%, 0, 0);
}
.Capa.ocultar{
    -webkit-transform: translate3d(0, 0, 0); 
    transform: translate3d(0, 0, 0);
}
.transition { 
    -webkit-transition-duration: .25s; 
    transition-duration: .25s; 
} 
Siendo el porcentaje, el porcentaje de la pantalla que ocupará esta capa y en transition pues la duración del movimiento, que en este caso es un cuarto de segundo (25 centésimas) para darle un efecto de desplazamiento.

En esta función comprobamos que, hayamos desplazado mas horizontal que verticalmente primero, para saber que tipo de movimiento es, y las condiciones de dentro pues tenemos nuestros respecticos movimientos (Drag) comentados para saber cual es cual, y como podremos ver es tan sencillo como ver si el movimiento viene de la izquierda o la derecha con tan solo ver donde empezamos el movimiento y donde lo acabamos.

Si bien esta función tiene sus limitaciones, no es difícil de perfeccionar y especialmente puede ser muy útil para cualquier persona que esté aprendiendo o quiera aprender a usar los eventos de pulsación de pantalla.

No soy un gran experto en PhoneGap, así que si hay algo que no está explicado correctamente o podría explicarse mejor, que es muy probable, quizás lo pueda corregir con el tiempo, aunque ciertamente al menos el comportamiento que ha tenido es justo el que yo he necesitado en su momento.

domingo, 17 de agosto de 2014

Mi primera experiencia con las Oculus Rift

En esta semana he tenido la oportunidad al fín de probar las Oculus Rift, desde que las vi en Kicksarter, allá por 2012, estaba deseando de hincarles el diente no solo como jugador, que si bien desde los años 80 se ha soñado con la realidad virtual, y si bien ya en su día comenté que, la realidad virtual soñada por todos no puede existir o es prácticamente imposible y hay otras vías mas interesantes seguramente.
¿Un verdadero paso hacia adelanet en la realidad virtual?
Ya comenté tiempo atrás un estrepitoso fracaso que fue Virtual Boy, que para nada fue un buen avanze aunque hay que reconocer que si fue un buen intento ya que realmente nadie conseguía dar un buen paso hacia la dirección correcta, ¿Se ha conseguido con las Oculus Rift? esto creo que es mas un tema de opinión que de veracidad, yo diría un rotundo si, pero es cierto que conozco opiniones que discrepan totalmente.

En primer lugar, independientemente de que funcionen bien o no, hay que partir de la base de que a un jugador le gusta jugar normalmente tumbado en el sofá o simplemente moviendose lo menos posible, o al menos al jugador idealizado por todos, yo no creo que sea del todo así pero es cierto que muchos jugadores e incluso los que nos gusta movernos, aveces si que apetece jugar para desconcetar, sentarte y olvidarte de todo, igualmente este dispositivo, aunque puede aportarte una experiencia de usuario sencillamente novedosa y muy llamativa, puede no ser al gusto de todos el colocarse unas gafas y tener que moverse para jugar, al igual que kinect puede dar una vuelta de tuerca al modo de juego, no a todos les gusta y como experiencia personal diré que yo una noche de jugar a un juego de kinect en casa de un amigo, al día siguiente tenía bastantes agujetas.

Bien, quitando este primer punto que si bien va a ser el que determine si tendrán un gran futuro o no junto al precio del dispositivo para el usuario (ahora mismo a unos 200€ para desarrolladores) creo que hay que tener un par de cosas mas en cuenta, creo que el dispositivo, si bien como primer desarrollo realmente interesante en el mercado, le queda mucho que mejorar independientemente de lo bien que se vea o no, etc, que sería la no necesidad de estar enchufado a la consola o pc, es decir, que funcionasen por si solas, incorporarle los videojuegos a las mismas, aunque no trataré este punto hoy y creo que sería interesante tratarlo en otro momento.

Por último antes de contar mi experiencia de uso, decir que, desconocía que además de las gafas, tenía una cámara que tenías que poner delante del usuario, esta cámara refina el movimiento de la cabeza, además de usar el giroscopio de las gafas, este dispositivo ayuda a hacer esos cálculos de sensibilidad al movimiento, lo cual hoy día lo considero también un pequeño problema al no poder girar entero el usuario, aunque tiempo al tiempo por supuesto, poco a poco necesitaremos menos factores externos y hardware mas pequeño, si no, comparemos un ordenador de hoy día con el Mark I.

Después de tratar con ellas, si bien no he tenido una inmersión total con un buen controlador y no he tenido auriculares puestos, es muy cierto que la sensación de inmersión visual es sencillamente perfecta, aunque las demostraciones que hay como la montaña rusa, si bien no tienen una calidad de 3D muy buena, te integra bastante bien dentro de ese mundo, ahora bien, hay un par de puntos que hay que tener en cuenta, cosas que, algunas afectarán a determinadas personas como por ejemplo la necesidad de usar gafas, me parece bastante curioso que, teniendo una pantalla a apenas unos centímetros de los ojos, si padeces miopia veas borroso lo que hay a lo lejos, de hecho, yo tengo la suerte de no haber tenido que usar gafas a día de hoy y ciertamente tenía una sensación de profundidad totalmente real y mi cerebro era capaz de interpretarlo como un mundo totalmente real en lo que a lo visual se refiere, de echo me resultaba bastante raro intentar mirar mi cuerpo y no verlo, era algo así como estar en dos mundos a la vez, y al quitarme las gafas, sentí una leve sensación de mareo ya que, si bien esa sensación de profundidad "a ojos de tu cerebro" es perfecta, digamos que son medidas de distancia distintas a las reales por lo cual es un efecto muy parecido al de ponerse y quitarse gafas para alguien con miopia.

Después de tener esas leves sensaciones de mareo, desaconsejo totalmente que un niño use este tipo de dispositivos ya que, al su vista no estar formada del todo podría tener transtornos visuales muy probablemente, aunque no sea ningún oculista para determinar eso, creo que no hace falta mucho mas para llegar a esa conclusión.

Igualmente hoy día tienen bastante que mejorar, en primer lugar se ve un marco negro en la periferia de tu visión y si intentas verte la nariz evidentemente también, aunque claro, esto último es intentar ir un poco mas a matar, pero quería probar visualmente todo lo posible este dispositivo, también la resolución, si bien se dice que es alta y sinceramente, no niego que lo esté (960×1080 por ojo), hace falta una resolución bastante mayor a esa distancia, yo me atrevería a decir que una resolución 4K o incluso 8K si queremos llegar a un punto de perfección total.
Aunque no lo creais, esto se ve bien integrado, aunque se notan aún los pixels
Otra cosa de la que me dio la sensación es que podía ver pequeños puntos verdes y rojos, como de los antiguos 3D, como si estuviese echo con el tipo de 3D de antaño, no sé si por la baja calidad visual que comenté anteriormente, o si bien no estaba del todo bien integrado el efecto 3D.

Por último decir un par de cosas en defensa de este modelo y es que, para empezar pensaron en los miopes ya que traen unas lentes extra para personas con algo de dioctrias, aunque evidentemente no ajustadas a todas las dioctrias, si no, imaginad cuantas lentes tendría que haber en el kit de desarrollo, espero que cuando las vendan a los usuarios finales si den la opción de diferentes dioctrias, y por otro lado, también puede ser que el efecto visual hubiese mejorado alterando la configuración inicial del dispositivo, cosa que no trasteé demasiado y que seguramente, también junto a una buena experiencia auditiva podría haber incrementado notoriamente.

En definitiva, sí, creo que esto sería definitivamente un buen paso adelante a pesar de que tenga que mejorar, espero que el kit para el usuario final sea mas barato que el kit de desarrollo que si bien, muchos piensan que debería ser mas caro por estar ya digamos terminado, refinado, y con un acabado mas estético, solo puedo decir que las Google Glass (Otro aparato pendiente para mi) cuestan 1500$ y dudo muchísimo que para el usuario final vayan a ser igual o mas caras, por no decir que se sabe que serán mas baratas, hay que tener en cuenta que el kit de desarrollo es una ventaja sobre los demás, para poder sacar al mercado software antes que tus competidores, y por eso son mas caras, por mera exclusividad.

jueves, 7 de agosto de 2014

Aprendiendo de los mejores: Hideo Kojima

Aunque no fue la primera de las conferencias a las que asistí, desde luego si que me hizo ver un punto de vista diferente al mío a la hora de desarrollar un videojuego, nada mas y nada menos que el del gran Hideo Kojima, creador de la archifamosa saga Metal Gear.
Para los que nunca le pusieron cara al creador de Solid Snake, aquí lo tenéis.
Sobra decir que evidentemente, es alguien muy respetado por mi como desarrollador de videojuegos, ya he hablado de el en otras entradas, para mi, hizo uno de los que serán para siempre de los mejores Bosses de la historia, Psicomantis.

Realmente no quiero hablar de la conferencia en si, a quien haya ido no le aportaría nada nuevo y a quien quiera escuchar la charla que se dió en el gamepolis sobre Hideo Kojima, sé que se gravó y se iba a subir a internet así que es mejor buscar la charla y llegar a tus propias conclusiones, de lo que quiero hablar es de las cosas que creo haber aprendido o al menos tener en cuenta para mis propios desarrollos.

Bueno, como un brevísimo resumen, la conferencia trató sobre las referencias del cine que usó este señor en sus videojuegos, a lo cual me hizo pensar que incluso fuera de esta famosísima saga también lo hizo, vease Snatcher, un gran videojuego que está claramente basado en Blade Runner, una película que sin dudas no tiene ni un solo frame de desperdicio.

Ahora bien ¿Que aprendí de todo esto?
Fácil, si hay algo que creo que tiene especial dificultad si quieres hacer un videojuego hoy día, que en la gran mayoría tienen una historia detrás, unos personajes con una personalidad, unos sentimientos... ciertas cosas que antes no se valoraban tanto y que cuando se le empezó a dar ese uso, empezaron a destacar este tipo de cosas que hicieron que los videojuegos se pusiesen a la altura del cine o de un buen libro.

¿Que mejor que estudiar personalidades de personajes ya escritos? Al fin y al cabo, no inventó las personalidades de sus personajes, están basadas en otros personajes de ficción, pero es innegable que supo hacerlo de la manera acertada, dandole una profundidad a cada personaje tan grande como en una película de las que realmente merece ir a ver al cine, en definitiva, hace que un videojuego pueda tener la misma profundidad que una película o libro con la grandísima ventaja de que interactuas con esos personajes y esa historia que hacen que te sumerjas dentro de ese mundo y lo mas importante, te haga sentir emociones que hacen que quieras seguir jugando, que quieras saber que pasará y por supuesto, entretenerte tanto o más que una película o libro aprovechando dicha ventaja.
Una conferencia que me dio que pensar y que, sabemos que hay una fina barrera entre copiar y estar basado en algo, ciertamente el señor Kojima no se puede decir que haya hecho una burda copia de nada ya que, aun estando basado en películas como 007 en ciertos aspectos, no se puede decir que se parezca mucho salvo en el sentido de ser de espías y mucho menos un clon.

Quizás debería de aprender de estas cosas y rescatar personalidades, acciones y transfondos de otros contextos que hagan que pueda enriquecer mis propias ideas, espero poder hacerlo algún día y que por supuesto, guste tanto a mi como a quien le dedique su valioso tiempo a mis juegos.

lunes, 4 de agosto de 2014

Buscar trabajo en el sector: Creando tu currículum

Antes de hablar sobre las conferencias del Gamepolis como prometí, voy a hablar de un tema muy interesante, que en estos tiempos puede ser vital orientarse un poco y que además ha sido una idea de un lector que me ha parecido muy interesante.
¿Currículum sobre papel?
Para empezar no, no voy a explicar realmente como hacer un currículum vitae sobre papel, ni soy la persona mas indicada para eso, ni creo que sea realmente bueno haciendolos, ni creo que pueda aconsejar bien sobre ello, pero sí dar ideas que pueden aportar algo positivo al mismo.

Si no tienes experienca, creala.
Hay que partir de que la mayoría de las personas que tienen dificultades para encontrar trabajo suelen ser personas sin experiencia, o al menos encontrarlo en su sector, concretamente este tiene grandes ventajas al respecto ya que, no es necesario que hayas trabajado en otra empresa antes si puedes mostrar cosas que has hecho tu mismo, así que, ¿Qué mejor currículum que enseñar tu propio videojuego? Según la parte que se te dé mejor puedes hacer unas cosas u otras, desde una mecánica de juego, bocetos e ilustraciones, música e incluso si crees que eres lo suficientemente bueno para ello, tu propio videojuego al completo.

Esto puedes llevarlo aún mas allá si en vez de hacer tu currículum en papel y aportar este videojuego como algo extra, hacer un videojuego donde puedan ver los cursos que hiciste, botones para contactar contigo y por supuesto visualmente atractivo para el que vaya a ver este videojuego, si no sabes si le resultará atractivo, muestraselo antes a un niño para ver si le resulta divertido, es la mejor manera.

Muestra lo que sabes
Otra idea es mostrar tus conocimientos, ya sea en redes sociales donde puedas contactar con las diferentes empresas (Recomiendo encarecidamente LinkedIn ya que es una red social expresamente de trabajo), o con un blog donde muestres tu código de programación, ilustraciones, música y todo lo anteriormente nombrado, quizás os suene un blog que poco a poco se está haciendo hueco en la red de redes y que dejo aquí el enlace por si quieres echarle un vistazo: www.hagamosvideojuegos.com
Si, es esta misma web, aunque no es el motivo principal del blog, no negaré que posiblemente haya influido en que ahora esté trabajando gracias a el ya que evidentemente lo usé como muestra de algunas cosas que se hacer.

¡Muevete!
 Evidentemente el trabajo no llega solo, hay muchas webs de empleo que visitar y revisar día a día, pero voy a recomendar una en especial: www.gamejobs.es
Es una web específica sobre trabajos en nuestro sector que al fín y al cabo es de lo que trata el tema de hoy.
Igualmente si quieres revisar otras muchas webs de empleo hay una infinidad, desde LinkedIn como bien recomendé antes y en la cual fue donde estuve en contacto con la empresa en la que ahora mismo trabajo como tantas otras que solo hace falta buscar un poco en Google.

¡Hay mas alternativas además de trabajar para una empresa!

Sí, hay mas alternativas que explicaré mas adelante, tanto como freelance, como crear tu propia empresa, solo o con tus amigos que tengas en el mundillo que también les gustaría dedicarse a esto y lo mejor, a coste 0.

Más adelante explicaré como y algunas formas que al menos a mi, me parecen buenas para intentar trabajar en el sector, al igual que todo lo anteriormente dicho, espero que sirva de ayuda.

¡Suerte en la búsqueda de empleo!

viernes, 1 de agosto de 2014

Mi paso por la Gamepolis

A pesar de toda esta inactividad en el blog, no pretendo abandonarlo del todo ni mucho menos, mas bien todo lo contrario, pienso volver a dar guerra con este blog y con fuerza, o esa es mi intención.
Conferencias y actividades realizadas
Después de este pequeño paréntesis antes de comenzar, si bien no he podido redactar mi paso día a día por la Gamepolis, ha sido porque he estado toda la semana en Málaga sin mi portatil, igualmente hablaré de todo lo que he visto en varias entradas ya que creo que ciertas cosas se merecen entradas enteras o incluso para una parte concreta de una conferencia en concreto de las que pude asistir o hasta mis investigaciones sobre las que no pude.

Tras tantísimas horas de conferencias concentradas en un fin de semana, aunque por desgracia no pude asistir a todas las que quise y realmente reconozco que se me pasaron volando, ver desarrolladores mostrando sus juegos y por supuesto, jugadores, la mayoría de los asistentes que al fin y al cabo, también puedo verme metido en ese saco como la gran mayoría de desarrolladores de videojuegos, espero que pueda dar a entender las cosas que creo haber aprendido y como han cambiado mi visión a la hora de crear un videojuego.

Empezaré por decir que, de las conferencias a las que asistí, de las cuales, algunas puse alguna fotografía en twitter, no todas para no ser repetitivo, ninguna me resultó aburrida o que me hiciese perder el tiempo, todas tuvieron su encanto, ya sea por satisfacer mi curiosidad como jugador sabiendo anecdotas y videojuegos desconocidos sobre la MSX, o cosas realmente útiles a nivel de desarrollador como herramientas que usar o como gamificar.

Por otra parte ha sido una auténtica lástima no haber podido llegar a probar las Oculus Rift, tengo ganas de incarle el diente y no solo como jugador si no como desarrollador, prometo que en cuanto tenga unas a mano, faltará tiempo para poner aquí algún tutorial para desarrollar para esta maravilla que realmente si es un buen avance.

Sobre las conferencias en si no quiero comentar nada mas ya que trataré cada una mas en profundidad a lo largo de estos días ya que pienso volver a tener una buena actividad, aunque no diaria, al menos entre dos o tres entradas semanales, que últimamente tengo bastantes cosas que comentar y enseñar y por falta de tiempo no he podido.

Por último y para no enrrollarme mas, después de esta semana de vacaciones vengo con bastante fuerza y seguramente esta semana tendréis un par de sorpresillas por mi parte los que leeis este blog ;)

sábado, 12 de julio de 2014

Gamepolis, II festival de videojuegos

Gamepolis II Festival de videojuegos
Se acerca el segundo festival de videojuegos de Gamepolis, evento al que un servidor no piensa faltar y no solo eso si no que, sobra decir que, cualquiera de los que leais esta entrada y vayais, podamos vernos allí contactando a través de twitter.

No solo hago esta entrada por nombrar un evento relacionado con videojuegos si no que, además del jugador que todos llevamos dentro, también habrá ciertas conferencias y exposiciones bastante interesantes desde el punto de vista del desarrollo, que es lo que sin dudas no pienso perderme, sin contar los vicios a todos los videojuegos que pueda.

Exposición de Oculus Rift, algo inperdible ya que, si no tienes unas, que mejor que experimentar el uso de las mismas para poder pensar en que y como desarrollar para este dispositivo que sin dudas es de lo mas llamativo que ha salido en los últimos años al menos en mi opinión.
Nosotros pondríamos la misma cara, seamos sinceros...
GamiCon se encargará de exponer las últimas tendencias en Gamificación, mientras que otras sesiones estarán dedicadas a la Inteligencia Artificial (IA) para videojuegos, la evolución de la música de los videojuegos o a la presentación de nuevas publicaciones dedicadas al mundo del videojuego.
¡Sin dudas un evento al que no se puede faltar!

Fecha: 25, 26 y 27 de Julio
Entradas: Diaria 5€, Abono de tres días 12€, abono de tres días con competición en algún torneo 20€

¡Nos vemos en el evento!

Web oficial: http://www.gamepolis.org/

domingo, 29 de junio de 2014

Si la sigues la consigues, trabaja de lo que realmente quieres.

Aunque ha sido a mediados de semana no he tenido apenas tiempo para relajarme, hoy si toca un poco de blog personal para dar una noticia a mis lectores.

Después de exponer mis ideas, conceptos y aprendizaje en el mundo de los videojuegos, finalmente estoy trabajando en una empresa de videojuegos, llevo desde mediados de semana, sencillamente me cuesta creer que he conseguido algo que desde pequeño, como muchísimos otros he soñado, quizás no sea haciendo videojuegos para mi querida megadrive como soñaba de pequeño, quizás no séa en una empresa que es mas conocida que McDonald como SEGA o Nintendo, pero en cambio es una empresa en la que me siento agusto, hago lo que quiero y lo mas importante, me gusta.

Hoy simplemente quería expresar un poco mi alegría y las ganas que tenía de que llegase este día, poder trabajar de verdad en lo que quiero, aunque por supuesto, no significa que vaya a dejar este blog ya que realmente escribo por gusto y espero que muy pronto pueda volver a mi costumbre de blog diario o al menos casi diario...

No sé si el blog ha influenciado positiva, negativa o neutralmente en conseguirlo, no sé si realmente este blog marcará un antes y un después en mi desarrollo profesional, pero por supuesto no pienso abandonarlo ya que lo que me aporta a mi es mucho mas que eso...

En el trabajo desarrollo actualmente con Unity3D así que lo que vaya aprendiendo intentaré mostrarlos por aquí.

domingo, 15 de junio de 2014

Confirmadas fechas para el IndieFest



Aunque las confirmaron hace unos días no he visto la noticia hasta hoy así que, en primer lugar quien no tenga conocimiento sobre dicho evento, en una entrada anterior facilité toda la información que pude al respecto, aquí el enlace para los que les pille de nuevas:

¡Primeras jornadas de desarrollo indie de videojuegos en sevilla! 

Desde que se anunció Indiefest Sevilla, muchos tenían (y me incluyo) la duda de si podrán llevar proyectos jugables a lo cual han decidido retrasar la fecha que, al fin y al cabo, todos los que queramos presentar un videojuego, siempre queremos tener tiempo no solo para pulir lo que creemos si no que además podamos añadir esos detalles que siempre nos gustan y nunca hay tiempo para ellos pero que al fin y al cabo son los que hacen destacar tu videojuego.

Además de que ya de por sí, para los que estudian es un problema por la vuelta al estudio, los exámenes de septiembre, etcétera.

Para darnos unos meses a todos y con ello hacer un evento mucho más grande, han decidido establecer las fechas del evento definitivas del 13 al 15 de Febrero de 2015.

La fecha es segura pero aún no se sabe el sítio donde se va a celebrar

¡Espero que nos veamos allí! Y poder enseñar uno de los motivos principales por la falta de contenido últimamente que hay en el blog, que dije que lo retomaría y si bien tengo muchas cosas que comentar, analizar y mostrar... ya no es solo por dedicarme al trabajo si no otras dedicaciones personales se comen la mayor parte del tiempo de mi día y hacen que no pueda revisar el blog tan habitualmente como hace un par de meses.

Pronto subiré mas tutoriales de Unity3D, aunque me estoy planteando en empezar a subir ya tutoriales de Cocos2D como dije hace muchísimo tiempo y aún sigue en el tintero, ¿O hay algún otro Framework/IDE que podría ser mas interesante? Se agradecen sugerencias :)

Fuente: http://indiefest.es/fechas-del-evento/

domingo, 1 de junio de 2014

Indie Game Contest! 2014


Los creadores del mítico IDE para crear Videojuegos de rol RPGMaker han organizado un concurso durante este mes en el cual hay que desarrollar un videojuego, las reglas son sencillas y los premios mas que suculentos.

Fechas

 

  • 29 de mayo al 30 de Junio, 2014 – Periodo de desarrollo
  • 30 de junio hasta las 22:59 (Hora española) – Fecha final de entrega de los videojuegos. Solo serán aceptados juegos completos
  • 1 al 7 de Julio – Periodo de votación pública. Los votos finalizarán a las 22:59 del día 7 de junio.
  • Julio – Periodo de los jurados. El juzgado determinará el ganador del gran premio, además de un top de los tres mejores videojuegos separados en dos categorías, RPG y no RPG.
  • Finales de Julio – Se anunciarán los ganadores!
  • Finales de Julio/Principios de Agosto – tendrán un podcast en el que hablarán sobre el concurso, los ganadores, y más!
 Y ahora vamos con la parte que muchos querréis saber...

lunes, 26 de mayo de 2014

Unity3D Scripting: Notificaciones locales en iOS

Hace un tiempo hice esta pequeña investigación para una pequeña prueba, dicha prueba consistía en parte en hacer las notificaciones locales de iOS y ahora procederé a explicar como lo logré.
Ciertamente no encontré mucha documentación mas que la documentación oficial de cada método disponible para crear notificaciones locales en iOS, así que me creé mi propia clase para usarlas, que en algún momento puede que la amplie para añadir notificaciones locales de Android, las cuales tendré que hacer desde nativo de otra manera ya que Unity3D no lo contempla de momento.

¿Que es una notificación local?
Es un mensaje de alerta que, al transcurrir cierto tiempo después de generarla se mostrará al usuario un mensaje de alerta, bien ya sea pues para avisar de que ya tienes de nuevo toda la energía recargada para poder seguir jugando o cualquier otro motivo que se te ocurra sin necesidad de tener que usar internet para que un servidor externo lo procese y te avise cuando sea necesario, lo calculará el mismo dispositivo partiendo de la hora actual hasta el tiempo que le digamos que tardará en mostrar esta alerta, es decir, si son las 10:00 y le decimos que nos avise en cinco minutos pues lo mostrará a las 10:05.

Aquí está el código que procederé a explicar:

using UnityEngine;
using System.Collections;
using System;

public class Notification : MonoBehaviour 
{
 #if UNITY_IPHONE

  //Añadir nueva notificación
  public void UseNotification(TimeSpan time, string title, string text)
  {
   NotificationServices.ScheduleLocalNotification(getNotification(time, title, text));
  }
  
  //Eliminar notificaciones pendientes de esta aplicación
  public void ClearNotifications()
  {
   NotificationServices.ClearLocalNotifications();
   NotificationServices.CancelAllLocalNotifications();
  }

  //Generación de la notificación local para iOS
  LocalNotification getNotification(TimeSpan time, string title, string text)
  { 
   LocalNotification notification = new LocalNotification();
   notification.alertAction = title;
   notification.fireDate = DateTime.Now.AddSeconds ((double) t.Seconds);
   notification.alertBody = text;
   notification.soundName = LocalNotification.defaultSoundName;
   return notification;
  }
 #endif
}
En primer lugar decir que, para usar este script debes de llamar desde otro componente a UseNotification para añadir una nueva notificación y a ClearNotifications para limpiar todas las pendientes, pero procederé a explicar paso a paso que queremos mostrar.

Pasemos a explicar como crear una notificación, sería tan sencillo como llamar a nuestro componente de esta manera:
  GetComponent<Notification>().UseNotification(TimeSpan.FromMinutes(5), "¡Alerta!", "¡Esto es una notificación local!");
El primer valor será el tiempo a transcurrir para la notificación, en este caso cinco minutos, el segundo valor el título de la notificación y por último el texto que queremos mostrar ampliando la información de la notificación.

Ahora veamos como limpiar nuestras notificaciones si ya no queremos que se muestren:

  GetComponent<Notification>().ClearNotifications();
Esta línea nos limpiará las notificaciones, en el caso de querer avisar de que tenemos recargada nuestra barra de energía, si volvemos a la aplicación no necesitamos que nos avise de ello ya que podemos verlo nosotros mismos mientras jugamos así que limpiaríamos las notificaciones y cuando sea necesario volveremos a crear las notificaciones necesarias.

Aunque esta clase se podría ampliar como para cambiar el sonido de la notificación por ejemplo, he querido mostrar la versión mas simple de la cual podrémos partir en nuestro proyecto, espero que sea de utilidad.

viernes, 16 de mayo de 2014

Unity3D Scripting: Unity3D dentro de Android (II)

Primera parte del tutorial: Unity3D dentro de Android


En primer lugar debemos tener Eclipse y el SDK de Android instalado, aconsejo encarecidamente por facilidad y ahorro en instalar plugins a Eclipse, descargar ADT, que es un Eclipse preparado ya para programar en Android.

Una vez descargado debemos instalar al menos la versión 2.3 de Android o una posterior ya que en las últimas versiones de Unity3D no está soportado las versiones inferiores a este y tampoco los que tengan un procesador inferior a ARM7 en las últimas versiones de Unity3D.

Una vez tengamos nuestro Eclipse con la SDK que queramos usar (Insisto, 2.3 o superior) crearemos un nuevo proyecto de Android.
Aquí nuestro nuevo proyecto
Pulsaremos next, después pulsaremos finish y ya tendremos creado el proyecto de ejemplo en el que añadiremos Unity.

El nombre de paquete se llama com.hagamosvideojuegos como el que usaremos en Unity3D, si bien puede tener otro nombre, para hacerlo mas simple. ambos estarán en un mismo paquete.

En este caso le he puesto que el mínimo requerido sea la versión 2.3 de Android como especifiqué anteriormente y la máxima sea la última que hay hoy día, la versión 4.4.

Hecho esto, nos generará automáticamente una carpeta con el proyecto de Android, copiaremos dicho proyecto y sustituiremos los archivos de nuestro proyecto de eclipse por estos.

Una vez sustituidos debemos volver a nuestro Eclipse y pulsar en Proyect -> Clean... y seleccionar el proyecto que queremos compilar.


Por último, este paso realmente es opcional en caso de haber habilitado la opción de "Start a build inmediatelly, pero para cubrirme en salud siempre lo hago y es pulsar en Proyect -> Build Proyect.

Como último paso vamos a crear nuestra clase Ejemplo dentro del paquete com.hagamosvideojuegos aunque realmente podríamos tener la clase en el paquete que queramos, pero por simple limpieza y organización del ejemplo de manera sencilla he preferido tener la clase que te genera Unity3D llamada UnityPlayerNativeActivity junto a nuestra nueva clase.

Veamos el código java que va a contener nuestro proyecto android para comunicarse con nuestro proyecto de android.

package com.hagamosvideojuegos;

import android.util.Log;

public class Ejemplo {
 public float numero;
    
 public Ejemplo()
 {
  numero = 0.3; // Al crear nuestra clase desde Unity3D le asignaremos por defecto este valor
 }
 
 public void Numero()
 {
  Log.d("Unity", String.valueOf(numero)); // Nos mostrará en LogCat el valor que tiene actualmente el número
 }
    
 public void Doble(float valor)
 {
  Log.d("Unity", String.valueOf(numero*2)); // Nos mostrará en LogCat el doble del número
 }
}
Con esta clase dentro de nuestro paquete, todo debería funcionar correctamente, por último decir que, desde android también podemos comunicarnos con Unity3D, no solamente extrayendo datos de java si no al revés, desde java extraer datos de Unity3D, pero eso lo veremos mas adelante.

Creo que no se me escapa nada, en caso de que algo no os funcione correctamente podéis dejar en los comentarios si ha fallado e intentaré corregirlo o ayudar en la medida de lo posible ;)

lunes, 12 de mayo de 2014

¡Primeras jornadas de desarrollo indie de videojuegos en sevilla!

 Por primera vez en Sevilla se organizan unas jornadas sobre videojuegos independientes, esto permitirá a los desarrolladores del mercado y el público final. Está en la fase de organización, la iniciativa de Indiefest Sevilla está ganando apoyos rápidamente con casi 300 likes en facebook mientras escribo esta entrada, apoyo en varios medios y por supuesto, el apoyo de los creadores de dichos videojuegos y gamers.

Indiefest Sevilla es la unión de varios estudios de desarrollo independiente, concretamente el medio informativo sevillano IndieLocus, el estudio independiente sevillano Onikami Games y el estudio Estosehunde Studio, sumados a varios colectivos individuales partícipes de la idea.

El festival contará con varias actividades y talleres, proyectos educativos y clases que serán impartidas por invitados distinguidos, así como diferentes presentaciones de juegos, conferencias de desarrolladores, torneos, venta en stands de comercio y un café bar. A más de que se repartirán premios a los visitantes tales como códigos de descarga, DLC’s

Aún no hay fecha confirmada pero presuntamente, el encuentro se celebraría del 26 al 28 de Septiembre, con el siguiente horario:
  • Viernes: 12.00 – 22.00
  • Sábado: 10.00 – 22.00
  • Domingo: 10.00 – 20.00
A día de hoy no está fijado tampoco el sitio donde se hará, pero en cuanto lo tengan claro lo haré saber por aquí.

Por supuesto, pienso asistir a estas primeras jornadas que seguro que van a dar mucho de que hablar, aunque quizás no asista como desarrollador solitario. ;)

Web oficial: www.indiefest.es
Twitter: https://twitter.com/IndiefestSev
Facebook: https://www.facebook.com/JornadasIndieSevilla

jueves, 8 de mayo de 2014

Unity3D Scripting: Como usar el giroscopio

Aquí vuelvo a dejar un pequeño script que tuve que usar en su momento y que es bastante sencillo de usar realmente.
¿Que es un Giroscopio?
Creo que Wikipedia da una muy buena definición del mismo, pero a nivel funcional dentro de nuestro smartphone podríamos resumirlo en que, es el que se encarga de saber cual es la rotación del mismo, en Unity3D a través del mismo componente nos facilita también detectar la gravedad que se está ejerciendo en el dispositivo al dejarlo caer o la aceleración al desplazarlo.

El principal uso del giroscopio que podemos encontrar en muchas aplicaciones móviles de manera nativa sin que tengamos que tratar con el mismo es saber si está en vertical, en horizontal, boca abajo...

Aquí un ejemplo muy básico sobre las propiedades del giroscópio en Unity3D:

using UnityEngine;
using System.Collections;

public class Giroscopio : MonoBehaviour
{
 void Start()
 {
  Input.gyro.enabled = true; //Habilitar el giroscopio
 }
 
 void FixedUpdate ()
 {
  Debug.Log("Rotacion: "+Input.gyro.attitude); //Rotación del giroscopio
  Debug.Log("Aceleracion: "+Input.gyro.userAcceleration); //Aceleración del dispositivo
  Debug.Log("Gravedad: "+Input.gyro.gravity); //Gravedad  del dispositivo
 }
}
Lo primero de todo es habilitar el giroscopio por si no estaba habilitado ya, así que en el inicio de nuestro script lo habilitamos de esta manera.

Input.gyro.enabled = true;
Una vez habilitado, cuando queramos ver la información es tan sencillo como estos tres ejemplos que he mostrado:

  Debug.Log("Rotacion: "+Input.gyro.attitude); //Rotación del giroscopio
  Debug.Log("Aceleracion: "+Input.gyro.userAcceleration); //Aceleración del dispositivo
  Debug.Log("Gravedad: "+Input.gyro.gravity); //Gravedad  del dispositivo
Algo que podríamos hacer para probar que funciona sería cambiar la rotación de un cubo delante de la cámara y usar la rotación dada en Input.gyro.attitude para entender un poco mejor el comportamiento y de ahí, aplicarlo como queramos en nuestro videojuego.

Utilidades para esto hay miles, solo hay que pensar un poco en que te gustaría hacer.

martes, 29 de abril de 2014

Libros gratuitos para aprender a crear videojuegos

Traigo un contenido que llevo mucho tiempo teniendo en mis marcadores de mi navegador y creo que no estaría de mas compartirlo con todas las personas que quieran aprender cosas nuevas, repasar cosas que hace tiempo que no ven e incluso el simple hecho de curiosear.
Diseño de videojuegos: Sonido interacción y redes
Es una web que tiene varios libros en formato digital de libre distribución y edición pero no comercial con licencia Creative Commons, realmente muchos de ellos son bastante interesantes tanto de videojuegos como otras areas que realmente no son el objetivo de esta web.

Aquí dejaré un enlace a la web que si bien no tiene libros aún sobre aprendizaje de Unity3D, el motor que uso normalmente y del que voy añadiendo contenido, si que enseña otros lenguajes y conceptos que abarcan muchas otras partes como el diseño, interacción, gamificación...

Posiblemente el que mas me ha gustado ha sido el siguiente: Diseño de videojuegos: Sonido, interacción y redes

Aquí dejo el enlace a la web para quien quiera echar un vistazo, aseguro que no tiene desperdicio ni para videojuegos ni para muchísimas otras cosas de contenido disponible.

Link: http://www.etnassoft.com/biblioteca/

lunes, 28 de abril de 2014

Unity3D Scripting: Unity3D dentro de Android (I)

Hay dos maneras de interactuar con Android nativo desde Unity3D, podemos exportar el proyecto a un proyecto de Android y desarrollar nuestra aplicación nativa la cual podrá llamar a Unity3D, o bien a través de una librería ya compilada en Java, la cual podremos usar desde Unity3D.
Hoy aprenderemos la primera de las dos formas, comunicarnos con Unity3D desde nuestra aplicación nativa de android.

En primer lugar, vamos a tener un objeto que va a contener este script en Unity3D que contendrá llamadas a funciones que retornan ciertos tipos de datos o directamente recoger variables.

public class NativeValues : MonoBehaviour {
 
 #if UNITY_ANDROID && !UNITY_EDITOR
  private static AndroidJavaObject jo;
  //Creamos nuestro objeto de java
  void Awake()
  {
   jo = new AndroidJavaObject("com.hagamosvideojuegos.Ejemplo");
  }
  //Recogemos el valor de tipo float del nombre que le pasamos como parámetro
  public float getFloatValue(string variable)
  {
   return jo.Get(variable);
  }
  //Editamos el valod de tipo float de la variable que le pasamos como parámetro
  public void setFloatValue(string variable, float valor)
  {
   jo.Set(variable, valor);
  }
  //Llamamos a un método que no devuelve nada
  public void voidMethod(string metodo)
  {
   jo.Call(metodo);
  }
  //Llamamos a un método que no devuelve nada y le pasamos un parámetro
  public void voidMethod(string metodo, float value)
  {
   jo.Call(metodo, value);
  }
  //Llamamos a un método que devuelve un float
  public float floatMethod(string metodo)
  {
   return jo.Call(metodo);
  }
 #endif
}
En principio vamos a destacar algo importante que cada uno usaremos a nuestro gusto, esto que especifíco en negrita es el nombre del paquete donde estará la clase de la que estamos creando un objeto de java donde com.hagamosvideojuegos es el paquete y Ejemplo la clase como podemos observar aquí

void Awake()
{
 jo = new AndroidJavaObject("com.hagamosvideojuegos.Ejemplo");
}
Y por último ver como vamos a acceder a nuestras propiedades y métodos públicos de nuestro objeto java desde Unity3D.

jo.Get(variable); //Le pasamos el nombre de la variable java que queremos leer
jo.Call(metodo); //Le pasamos el nombre del método java que queremos ejecutar
jo.Call(metodo, value); //Le pasamos el nombre del método java que queremos ejecutar pasándole un parámetro

 Una vez tengamos nuestro objeto con esta clase que, para evitar errores, solo se compilará solo en Android.

Una vez que tengamos nuestra aplicación de prueba, antes de compilar seleccionaremos Google Android Proyect y por último nos dará solo la opción de exportar.

En la próxima parte explicaré los pasos en eclipse para crear nuestro código necesario para interactuar con Unity3D.

domingo, 27 de abril de 2014

¿Cuanta importancia tiene un modo multijugador en un videojuego?

Hoy quiero hacer una reflexión sobre este tema, por supuesto esto entra dentro del tipo de videojuego que guste a cada uno y por supuesto si nos gusta jugar solo o acompañado, cooperativo o competitivo.
Al principio la mayoría de los videojuegos, según su clasificación eran o no multijugador, a mi ahora mismo no me viene a la mente ningún videojuego de lucha que no tenga la posibilidad de que tu contrincante no sea necesariamente una inteligencia artificial, en contrapartida, la mayoría del género RPG han sido hasta hace poco para el disfrute total de una sola persona y en todo caso parcialmente quien, junto a ti, disfrutase de la historia o bien compartiendo el gamepad o disfrutando de la historia del videojuego frente al televisor.

Si bien hay muchas tecnologías que han permitido evolucionar los videojuegos hasta límites impensables, nadie pensaba hace unos años el poder jugar con otras personas cada uno en su casa, ni tampoco poder jugar con detección de movimiento y eso sin nombrar la calidad gráfica a la que hemos conseguido llegar o las físicas que se han podido lograr.

Ahora bien, ¿como ha afectado todo esto de cara al presente y al futuro inmediato? (Ya que el futuro lejano es muy difícil de predecir)

Pues en mi opinión el modo multijugador, aunque quizás apenas tenga sentido o peor aún, que nisiquiera exista aunque diga que si, está hasta en la sopa, ¿Por qué? por la competitividad para ser mejor que tus amigos, como dije hace unos meses, posiblemente la mayor rejugabilidad de un videojuego sea en la que juegas para ser mejor que los demás, en la que compites con tus amigos, ¿Por qué no contra el resto del mundo?

Aún se hacen videojuegos para un solo jugador, pero es bastante poco usual hoy día, y aun siendo de un solo jugador, no es de extrañar que parte de su finalidad sea mandar tu puntuación online o conseguir logros para conseguir enganchar a otro jugador a intentar superarte con una puntuación mas alta o conseguir mas logros que tu.

Posiblemente, de todas las tecnologías que mas ha afectado a esto en particular, es claramente Internet, ya que sin el, aún tendríamos que ir a casa de nuestros amigos o invitarlos a nuestra casa para poder jugar y demostrar quien es realmente el mejor de todos.

Por supuesto esta entrada tiene un lado subjetivo ya que según el género que habitúes a jugar habrá cambiado mas, o menos en ese sentido.

En el caso de los RPG no están tan de moda como antaño, si no que se ha sustituido el género clásico como tal por el MMORPG, el cual no solo te cuenta una historia, si no que te permite jugar con tus amigos, en el caso del género decompetición, te permiten jugar con tus amigos cada uno desde su casa.

Por último, los únicos que he visto una pequeña tendencia aunque no en gran medida a videojuegos de un solo jugador son en los smartphone, que no todos queremos gastar nuestra conexión del móvil para jugar los cinco minutos que esperas el autobús, si no jugar rápidamente, sin problemas y entretenerte mientras tanto.

sábado, 26 de abril de 2014

Patentes en los videojuegos

Hace poco hablé sobre los derechos de autor en un videojuego como algo anecdótico ya que no he podido corroborar que fuese totalmente cierto lo que expliqué, pero que, sin duda alguna fue una anecdota mas que divertida, pero... ¿que pasa si hay algo de mi videojuego que quiero patentar?
En mi opinión las patentes son un retraso para el avance, me parece algo que realmente no está bien definido de base, ya que, el no permitir su uso por otra persona implica que dicha persona no pueda mejorar lo que tu has creado, aunque por supuesto, está la otra cara de la moneda en la que muchas personas no harían una labor de I+D para que se lucre otra persona.

No voy a entrar en un debate para ver si las patentes realmente están bien o están mal pero imaginemos por un momento la situación, ¿Que habría pasado si Shigeru Miyamoto hubiese patentado el género de plataformas con la creación de Mario? ¿Y si sus respectivos creadores hubiesen patentado sus videojuegos de puzzles? ¡Adiós Candy Crush!

Por supuesto no solo el Gameplay sería algo realmente importante que sin lugar a dudas habría repercutido en los videojuegos de una manera atroz, si no tipos de combinaciones en un gamepad, pantallas de carga y un sin fin de cosas que, si bien parecen bastante disparatadas, si alguien no lo conoce, por favor que busque información sobre la guerra de patentes de software entre Apple y Google, realmente es asombroso hasta que punto puede ser absurda una patente y lo peor, que el usuario final es el que lo sufre a la hora de disfrutar su compra ya que su compra ha sido limitada.

Me gustaría comentar un par de patentes que he encontrado sobre videojuegos en internet que realmente me resulta bastante frustrante el mero hecho de que si bien hago un videojuego, yo no haya podido llegar a tener la misma idea que otra persona o bastante parecida para desarrollar un videojuego.

Un ejemplo de patente es la norteamericana nº 6935954 de 30 de agosto de 2005 para una invención de Nintendo, cubre un sistema en el que un personaje del juego se ve afectado por un “nivel de cordura” que a su vez refleja acontecimientos en el juego, peleas contra una criatura horrorosa, situaciones de terror, etc. En esas circunstancias la cordura del personaje se reduce y esto repercute en la capacidad de controlar al propio personaje por el jugador.

Otra original patente titularidad de Microsoft es la nº 6604008, del año 2005. Esta joya de la inventiva humana tiene el título de “Sistema de puntuación basado en metas alcanzadas y elementos subjetivos”, donde Microsoft ha obtenido el monopolio para los sistemas de puntuación en los que los puntos se ganan cuando el jugador completa una hazaña por medio de un estilo subjetivo propio del personaje (ejemplo del Gotham Racing).

Así que la respuesta es que sí, se pueden patentar ciertas cosas aunque dependerá del país donde quieras hacerlo, en el caso de las anteriormente nombradas, han sido patentadas en EEUU, así se patentan técnicas y características del juego, de puntuación, hardware, procesos informáticos, diseño, gestión de memoria, comunicación, etc.

Por suerte o por desgracia, en España y Europa al menos, las patentes de software no están contempladas, en todo caso, lo que si podríamos patentar sería la parte física como el procesador gráfico de la consola o el gamepad.

Espero que este modelo siga estando así ya que en caso contrario las empresas multinacionales realmente acabarían quebrando los estudios indie que si están favoreciendo mucho mas a la creación de contenido original.