Corutinas en Unity

February 26th, 2007

Ya he comentado antes que Unity es un entorno realmente productivo. Una de las features que más tiempo ahorran y más simplifican el código son las corutinas. Es algo que también tiene UnrealScript y podría decirse que es uno de los pilares de la programación en DIV/Fenix.

Digamos que tengo un item que quiero que al colisionar con un jugador, desaparezca suavemente aumentando su transparencia. Y que al cabo de un minuto vuelta a aparecer, de nuevo suavemente. Esto en un motor convencional requeriría tener varias variables de la clase Item para llevar la cuenta del tiempo que llevamos haciendo fading del objeto, el sentido del fading (está apareciendo o desapareciendo?) o el tiempo de espera hasta el respawn. Y además, todo ese código estaría mezclado con el resto de la lógica que queramos que ese item ejecute cada frame, en algún método como Update() o algo similar. Todo eso disparado por algún confuso sistema de detección de colisiones.
En Unity sería algo así:

Corutina de ejemplo escrita en Javascript.

La sentencia yield es equivalente a frame; en DIV/Fenix. En Python tiene el mismo nombre, y en UnrealScript no me acuerdo, pero en todos funciona prácticamente del mismo modo (el contexto en el que pueda usarse ya es otra historia). Básicamente significa “sal de esta función pero mantén el contexto de la misma en memoria, para en el siguiente frame, retomarla justo donde la acabo de dejar”. De este modo puedes definir en una función una serie de eventos o comportamientos que ocurrirán sucesivamente uno detrás de otro en tu simulación, en vez de ejecutarse todos secuencialmente pero en el mismo frame.
Al principio no le veía demasiada utilidad. Después de usarlos me doy cuenta del gran potencial que tienen, sobretodo en cuanto a productividad y mantenimiento del código.

La respuesta a la pregunta

February 19th, 2007

Jay Barnson tiene un recomendadísimo artículo en su blog sobre la gran pregunta que se hace todo desarrollador amateur en algún momento de su existencia.

¿Debería convertirme en un desarrollador indie? Veo mucho esta pregunta, publicada en foros, enviada a mí por e-mail y tal. Esta es una de esas preguntas cuya respuesta sólo puede encontrarse en la cabeza del que pregunta, como “¿Debería comenzar mi propio negocio?”, “¿Deberia terminar mi carrera?” o “¿Debería pedirle a _____ que se case conmigo?”.

Creo que la mayoría de gente que hace esta pregunta (o una parecida) realmente están preguntando “¿Tendré éxito con ello y cuán doloroso será?”.

Primera regla sobre desarrollo de videojuegos

February 19th, 2007

El secreto para progresar es empezar. El secreto para empezar es dividir las tareas complejas y abrumadoras en pequeñas tareas y empezar por la primera.

Visto en Microsiervos. Debería tatuármelo en algún sitio.

Porque tú también puedes

February 12th, 2007

Debería haber escrito este post hace tiempo, pero nunca es tarde si la dicha es buena.

Nae, el tipo más salao de la escene videojueguil española, está consiguiendo bastante publicidad para su última, alocada y mejor idea: un concurso amateur de juegos con premio en metálico (de su bolsillo) y unos requisitos de risa: basta con que el primer elemento hostil del juego sea un caracol.

El premio no es gran cosa (300 €), pero teniendo en cuenta que es para juegos hechos por amor al arte (aunque no existe requisito alguno de no-comercialidad), no está mal. Además, desde el anuncio del concurso se han hecho generosas donaciones para dotar al mismo de un segundo y tercer premio, de 200 y 100 euros respectivamente.

Por lo que a mí respecta, participaré con uno de los proyectos que tengo entre manos y aunque no gane nada, seguro que el hecho de tener una deadline en medio del tiempo que me separa del concurso de artFutura me hace darle más caña aún al proyecto, así que seguro que me sirve para que el juego llegue en mejor forma a este evento.

Para seguir al tanto de novedades respecto al concurso os aconsejo que visiteis asiduamente el blog de Nae.

Manuel Fernandez and the Holy Grail

February 12th, 2007

Últimamente estoy metido en un par de proyectos que sí tengo claro que, por fin, van a ver la luz. Y si estoy tan seguro es porque estoy usando Unity para desarrollarlos.

Unity es, ni más ni menos, el mejor motor 3D que jamás he visto. Seguramente los haya mejores, pero no por menos de diez mil pavos (y este cuesta mucho menos), así que su calidad y sobretodo, facilidad de uso, son dignas de elogiar. Si hay una palabra que defina el entorno de trabajo de Unity es productividad. En numerosas ocasiones me he visto pensando en alguna feature que estaría bien tener, ya sea porque son necesarias para el juego o porque simplemente, molan. Pues un vistazo al manual, y unas pocas líneas y clicks después, ya tenía hecho lo que quería. Eso no tiene nombre, amigos. Nunca un desarrollador amateur de juegos tuvo una razón de mayor peso para hacerse con un Mac.