Age of seas

Age of seas (El diario de Cerón)

Bueno amigos aquí les presento el proyecto que estamos desarrollando.
Age of Seas es un juego multijugador para PC, MAC, LINUX gratuito donde tu personaje es un marinero mercader que explora los mares transportando mercancías de un lado a otro ganado Godeones de oro (moneda del juego) y experiencia así como nuevas mejoras para su barco.

Los Godeones de oro es la moneda del juego que te servirá para comprar otros barcos, sobornar mercaderes y comprar mejoras para tus navíos.

Definiciones de modos de juego:

Estrategia: Ya que tendrás que tomar y administrar bien tus marineros realizando contratos y sabiendo como capitanearlos.
Combate: Ya que tendrás que luchar por mantenerte a flote ya que en el mar siempre hay un pez más grande que tu.
Mercadería: Ya que te ganaras la vida transportando mercancías donde lo requieran.
Exploración: Ya que tendrás que encontrar los materiales que se requieran para tu causa.
Unión: Ya que podrás crear alianzas y clanes para asegurar tu supervivencia.

Age of seas

Modo de juego e historia:
Una vez navegado y descubierto algunas islas puedes comenzar tu campaña de comerciante, en algunos puertos requieren ciertos materiales que en otros venden. Tu misión es ir recolectando esos materiales para luego comercializar en los puertos donde haya demanda. Cada barco dependiendo de su envergadura tiene una capacidad de carga, por lo que aprovechando el viaje puedes transportar mas de un material a la vez y cumplir dos, tres, cuatro objetivos a la vez o todos los que tu barco te permita. El reto es saber organizar tus viajes y que materiales están en este momento más solicitados ya que aumentaran tus recompensas si sabes jugar bien tus cartas, ya que dependiendo del momento el material “AZÚCAR” puede estar más solicitado que el “CUERO” aumentando tu recompensa si decides transportar AZÚCAR a los puertos que lo solicitan aunque estos estén más lejos y aumente el riesgo de la misión, tu recompensa en “godeones” y experiencia serán mayores..

Existen más de 500 materiales diferentes, unos más raros que otros. Pero cuidado! si en el momento que estas transportando tu valiosa mercancía y otro jugador o monstruo te hunde por el camino tu cargamento quedara a flote pudiendo este  ser recuperado por tu atacante perdiendo tu el coste de tu mercancía, ya que tu compras a precio para vender a otro. (Trading)

Uno de los secretos de AGE OF SEAS es que puedes enterrar tus valiosos materiales por las 18 islas disponibles evitando así saqueos y pérdidas de tus valiosos materiales en abordajes o hundimientos inesperados.

Age of seas

Debes jugar bien tu estrategia de comerciante y seleccionar rutas poco transitadas por otros barcos para no arriesgar tu valioso cargamento, pero no todo esta perdido. En Age of Seas puedes crear alianzas (CLANES) formados por otros jugadores bajo un mismo estandarte, los cuales te ayudaran a transportar y proteger materiales valiosos, que son muy codiciados. En la  imagen que vemos a continuación uno de los barcos centrales transporta en sus bodegas “DIAMANTES DE LAS CUEVAS DEL PANTANO” hacia la isla del hombre muerto y el resto de la alianza lo protege.

Pero cuidado! no solo hay que preocuparse de otros jugadores, también los mares de Age of seas esconden peligros como tornados, tifónes y monstruos marinos como, así que tu travesía no sera fácil ni que entregues tu carga tampoco.

Age of seas

Escoge el momento el material y las rutas adecuadas que te dará mejor remuneración  por que si no lo haces pequeño marinero la cosa se te va a complicar mucho.

Pero, no todo es sufrir!

Gracias a todas las mejoras que puedes hacerle a tus barcos puede llegar a ser casi invencible y que otros jugadores o monstruos marinos huyan despavoridos al ver tus cualidades evolucionadas, así que convertirse en el mas temido de los mares no es imposible.

Tu tripulación!

Lógicamente un barco no se gobierna solo y por muy habilidoso que seas necesitas una tripulación. Obviamente en Age of Seas no te lo íbamos poner fácil ya que tu tripulación tiene un estado de animo que dependiendo de tus decisiones se incrementara o disminuirá afectando así al gobierno del barco.

Casos prácticos con tu tripulación.

Como todo marinero no le gusta estar mucho tiempo en la mar y de vez en cuando necesita pisar tierra firme beber hasta no poder mas en una cantina acompañado de grata compañía femenina, Si estas mucho tiempo deambulando en mar abierto sin rumbo fijo el animo de tu tripulación caerá empicado afectándote en el gobierno del barco.

Trucos con la tripulación:

Si es cierto que existen algunas artimañas para evitar que el animo de tu tripulación caiga aunque no se si son muy efectivas. Gracias a los barriles de ron que encuentras por el mar de naufragios desafortunados tu tripulación se podrá emborrachar olvidado así su melancolía de pisar tierra firme, aunque afectara a sus sentidos siendo difícil gobernar tu barco.

¿Que ocurre si el animo decae?

Si dejas que tu tripulación sobrepase los limites mínimos de animo comenzaran a caer enfermos y poco a poco muriendo dejándote sin tripulación y teniendo que contratar a mas marineros saliéndote por un buen pico.

Age of Seas es en definitiva un MMORPG gratuito donde poder divertirte con tus amigos aprender sobre la historia y tener apasionantes batallas por la conquista de las rutas mercantes. Un mundo con mas de 8 horas de navegación de punta a punta  y lleno de vida submarina y terrestre.

Más información e imágenes en:
https://twitter.com/ageofseas
o
https://ageofseas.com

Rutas de mercadería , piratería , grandes batallas épicas y monstruos marinos son algunas de las cosas que te esperan en esta mar inexplorado.

Age of seas

 

Age of seas

 

Age of seas

 

Age of seas

Age of seas

 

Aquí tienen más imágenes:

Age of seas

Age of seas

Probando el multiplayer:
Age of seas multiplayer

Si te ha gustado y quieres apoyarnos:
donar

Bueno amigos eso es todo por ahora, espero que les haya gustado, no se olviden de compartir este post.

Fisicas unity

Como manejar físicas en Unity (Evento)

Hola bienvenido/a a la nueva sección de eventos, publicaremos un evento cada 15 días. Estos son videoconferencias en vivo explicando algún tema en particular sobre el desarrollo de videojuegos en Unity.

Nota: Instalar Zoom meeting antes de la hora del live.

Se explicará como se debe utilizar correctamente las #colisiones 2D / 3D, #Rigidbody, #materiales físicos, etc. Además de prevenir los problemas más cometido en este área del desarrollo de #videojuegos.
Viernes 25 de agosto, 10 am Argentina.
Únete desde : https://zoom.us/j/448235588

Unity engine desarrollo de videojuegos

Los mejores videojuegos hechos en Unity

Hola bienvenido/a a nuestro blog, en el día de hoy veremos los 10 mejores videojuegos desarrollado en Unity, para que vean la potencia que tiene este fabuloso motor, siendo que estos videojuegos se considerar independientes por la cantidad de personas que lo han desarrollado. En este caso vamos a mostrar el Top 10 del 2016 ya que el 2017 aun no cierra y hasta fin de año no sabremos quienes serán los ganadores.

 

El mejor juego para las mejores gráficas 3D: Firewatch

Fue desarrollado por Campo Santo, está disponible para Windows, Mac, Linux, Playstation 4 y Xbox One.

Es un juego en el que no se desmorona nunca el sentido o la noción del tiempo si decidimos ignorar un rato la misión y dedicarnos a explorar el mundo abierto que se pone a nuestra disposición. Hay rutas bloqueadas que sus creadores se han preocupado de cuidar a base de puro sentido común, privándonos del material necesario para abordarlas o echando mano de excusas razonables y creíbles que hacen que nada sea forzado ni se erijan barreras artificiales.

A medida que los días transcurren, la sensación de ir desentrañando capas de un relato emergente recuerda mucho a Gone Home, al que Firewatch no duda en hacer un guiño directísimo en el último tercio del juego, pero el pilar de carga en la andadura forestal de Henry no son las misiones que nos encomiendan en este nuevo empleo ni tampoco la exploración de cada objeto como en el espléndido título de Fullbright, sino en los diálogos por radio con Delilah, la operadora de cálida voz que nos manda las tarea y el único punto de contacto humano en un verano de aislamiento total. Las conversaciones están planteadas en un esquema similar al de los juegos de Telltale, a base de elegir frases o quedarse callado y en algunos casos tener en cuenta un tiempo límite, pero el guion esta vez es harina de otro costal: inteligente, sagaz, fluido, a veces un poco sardónico y otras más profundo. Dependiendo de la fase de la relación que se va fraguando entre Henry y Delilah, hay días en los que la comunicación se vuelve áspera y días en los que ambos se aventuran a un amistoso combate de esgrima dialéctica, no tanto porque se trate de palabras grandilocuentes o conversaciones trascendentales, sino por la naturalidad y la inteligencia con la que se desarrollan las bromas, los sarcasmos y los juegos de palabras. Cada elemento del parque habilita la interacción con Delilah, de modo que si uno se encuentra un árbol arañado y pulsa sobre él no oímos a Henry decirse a sí mismo “estas marcas parecen de un oso” ni vemos un cartel descriptivo, sino que el protagonista se lo comenta a su jefa y esta le explica, con o sin cachondeo de por medio, de qué se trata. Una forma efectiva de no caer en los tópicos de la aventura gráfica.

Fuente : www.anaitgames.com

 

El mejor juego para las mejores gráficas 2D: Seasons after Fall

Fue desarrollado por Swing Swing Submarine, está disponible para Windows, Mac, Linux, PlayStation 4, Xbox One.

Cuesta resistirse a la belleza y encanto que desprende Seasons After Fall. Es un videojuego tan bonito, tan llamativo en su apartado artístico, que lo ves y de inmediato te enamoras. Tiene ese algo, esa magia que te atrapa como si realmente estuvieras viviendo dentro de un cuento de fantasía pero, por fortuna, esta aventura de puzles y plataformas es algo más que simple fachada. Tras sus bellos parajes naturales dibujados a mano encontramos un juego de calidad, con gracia, que sabe sorprender con rompecabezas ingeniosos que basan todo su atractivo en la posibilidad de cambiar, a voluntad propia, las estaciones del año no solo para contemplar los muchos cambios que acontecen en lo estético, que ya os digo es increíblemente bello, sino básicamente para sacar provecho de la climatología abriendo caminos que hasta ese momento parecían intransitables.

¿Un estanque os impide el paso? Dejad que el frío invierno hiele su superficie y ¡problema resuelto! O dad la bienvenida al otoño, contemplad cómo crecen las setas, y ellas solas os guiarán a zonas de otro modo inaccesibles. ¿Qué hacemos con el verano? Permitid que su cálida luz haga florecer algunas plantas; o que la primavera y sus lluvias torrenciales inunden por completo el escenario para acceder a lugares más elevados. De forma fluida, muy natural, en Seasons After Fall cambiaréis el clima constantemente buscando resolver unos puzzles que no son especialmente complejos, pero sí ingeniosos e imaginativos. Todo nace de la experimentación. De probar y observar los cambios que trae consigo cada nueva estación. Y la sensación es de lo más gratificante.

Fuente: www.3djuegos.com

 

El mejor juego de consola y PC: Inside

Fue desarrollado por Playdead, está disponible para Windows, PS4 y Xbox One.

Aquí no hay líneas de diálogo ni letras impresas sobre la pantalla, sólo una historia que se cuenta a base de saltos por escenarios surrealistas y consecución de puzles de los que sólo requieren un segundo de calma. Todo está tan bien hilado que, al final, el mensaje del juego acaba siendo lo de menos. No es que sólo importe el camino, es que ‘Inside’ triunfa al transmitirnos sensaciones como ningún otro lo ha hecho hasta la fecha.

Al control de un niño cuyo destino y procedencia desconocemos por completo, huiremos de perseguidores en una constante carrera hacia adelante en la que las posibilidades de quedarse atascados son casi nulas. No es un problema de falta de dificultad, es una cuestión de intuición que, una vez conocidas las mecánicas básicas, conseguirá que pasemos por puzles y obstáculos sin ni siquiera darnos cuenta de que estaban ahí.

Fuente: www.vidaextra.com

Unity engine desarrollo de videojuegos

Uno de los mejores engine para el desarrollo de videojuegos

 

El mejor juego para móvil : Lara Croft GO

Fue desarrollado por Square Enix Montreal, disponible para Android, IOS, Windows y Windows Phone.

En esta nueva aventura de Lara Croft debemos profundizar en un mundo ficticio bastante variado y dividido en varias zonas claramente diferenciadas. Y como no podía ser de otra forma, nuestra meta consiste en recuperar ciertas reliquias muy preciadas y, de paso, acabar con la Reina del Veneno. Una trama no demasiado original y previsible pero que es narrada de manera acertada a través de breves y simples escenas de vídeo que emplean el mismo motor del juego, las cuales se dejan ver de vez en cuando al completar ciertos niveles.

Cada nivel cobra vida a través de pequeños tableros en los que podemos ir avanzando por unas teselas o puntos prefijados. Es decir, que no gozamos de libertad de movimientos para explorar los fondos, sino que debemos hacerlo por caminos establecidos. La gracia del asunto es que a medida que avanzamos vamos descubriendo numerosas trampas y enemigos, los cuales poseen diferentes características pero un patrón común: se mueven justo después de nosotros, como si de un juego de estrategia por turnos se tratara. Eso sí, este desarrollo es muy simple y tremendamente esquematizado, pero en el mejor de los sentidos.

Fuente: www.3djuegos.com

 

El mejor juego para realidad virtual: Job Simulator

Fue desarrollado por Owlchemy Labs, está disponible para HTC Vive y Oculus Rift.

En Job Simulator, considerado uno de los videojuegos para la realidad virtual de mayor éxito, tendremos que resolver una serie de pruebas mientras emulamos en clave de humor algunos trabajos, como el de chef o el de oficinista. Las opciones y posibilidades de interacción sin casi infinitas.

Fuente: www.vandal.net

 

El mejor juego para la mejor experiencia VR: The Lab

Fue desarrollado por Valve, está disponible para HTC Vive.

Es una escala de la habitación de realidad virtual (VR) juego de video desarrollado por Valve Corporationy lanzado para Microsoft Windows el 5 de abril de 2016. Se utiliza la tecnología VR y el HTC Vive dispositivo para mostrar una serie de experiencias de juego se accede a través de un centro de la habitación. El juego está ambientado en el Portal universo y ofrece ocho diferentes tipos de juego que implican breve demostración de las experiencias que utilizan diferentes aspectos de la VR capacidades. La variedad también es ofrecido más allá de las experiencias mismas por la cantidad de interacción con los objetos del entorno que se incluye.

Fuente: en.wikipedia.org

 

El mejor juego para proyecto (NON-Game) : Tilt Brush

Fue desarrollado por Google, está disponible en HTC Vive. Non- games es una categoría que esta entre un videojuego y un juguete.

Uno de los avances tecnológicos que más fuerte está pegando durante la primera mitad de este año está siendo la realidad virtual. Los grandes fabricantes han empezado a mostrar sus apuestas de hardware, y es sólo cuestión de tiempo que a partir de estas plataformas empecemos a ver cada vez más innovaciones en el mundo del software.

Google ha decidido ir abriendo camino, y lo ha hecho presentando su propia aplicación de dibujo para Realidad virtual. Se llama Tilt Brush, y nos permitirá dibujar en un entorno virtual desde diferentes ángulos o metiéndonos literalmente dentro del dibujo. Eso sí, de momento sólo está al alcance de quien tenga unas HTC Vive.

Fuente: www.genbeta.com

 

El mejor juego para simulación : Factory I/O

Fue desarrollado por Real Games, está disponible para Windows.

Es un videojuego en el que debes administrar una fabrica y todas las tareas que comprende la mismas, un juego muy interactivo el cual se ha considerado uno de los mejores simuladores del 2016 y por supuesto esta desarrollado en Unity.

 

El mejor juego para proyectos de estudiantes : Pine

Desarrollado por Twirlbound en NHTV Breda (universidad de ciencias aplicadas).

Pine es un videojuego de acción y aventuras en mundo abierto donde, como miembro de una de las últimas tribus de la gran isla de Albamare, se debe buscar un nuevo hogar para nuestro pueblo. La producción nace de la premisa de una humanidad alejada de la cima de la cadena alimenticia, donde debe cooperar con otras especies para subsistir en un lugar repleto de misterios por descubrir. Desarrollado por Twirlbound, la producción cuenta entre sus atributos con una IA avanzada, capaz de aprender de los movimientos y estilo de juego del jugador.

Fuente: www.3djuegos.com

 

Una mención especial para el mejor asset: Dungeon Architect

Fue desarrollado por Code Respawn, está disponible en el Asset Store.

Dungeon Architect es una herramienta de generación de nivel de procedimiento. Le permite crear rápidamente sus propias mazmorras tanto en tiempo de ejecución como en tiempo de diseño con poderosas herramientas de edición.

Curso Unity

Aprende mucho más sobre cómo desarrollar videojuegos en Unity

Bueno eso fue todo por hoy espero que te haya gustado, nos vemos, hasta la próxima.

Cursos gratis en desarrollo de videojuegos con Unity

Como programar una interfaz de usuario (UI)

Hola bienvenido/a esta semana en vez de redactar un post como es costumbre de todas las semanas, decidí hacer un video explicando uno de los aspectos más solicitados por mis alumnos más nuevos en el área del desarrollo de videojuegos. Explicaré como usar algunos de los aspectos más básicos de el sistema UI que nos provee Unity, no pude explicar todo lo que tenia en mente ya que en 30 minutos no puedo explicar un sistema tan amplio y completo como es este. Bueno espero que les guste y lo disfruten, no te olvides de compartir.

Unity: uno de los mejores engine.

Estamos muy contentos de anunciar que Unity 2017.1 ha sido lanzado y ya está disponible para su descarga. Queremos agradecer a la comunidad de Unity por sus valiosas contribuciones durante la fase beta.

Unity engine desarrollo de videojuegos

Hola bienvenido/a un nuevo post, en el día de hoy hablaré de algo que no acostumbro, pero me puse a pensar que hay muchas personas como tú que no saben desarrollar videojuegos, tal vez ni siquiera sepas que es un motor de videojuegos, o estés agobiado por la elección de tantos que hay en el mercado.

Antes que nada quisiera presentarme, mi nombre es Danilo Giardina y soy programador de videojuegos. Hoy te explicare todos los aspectos sobre el desarrollo de videojuegos para que comiences sin temor alguno.

¿Qué es un motor de videojuegos?

Es un software que nos facilita las tareas para desarrollar un videojuego. Si tuviéramos que hacer estas tareas en código base, solo podrían desarrollar los expertos en la materia. Esto te permite a ti , a mi y a cualquier persona poder desarrollar un videojuego.

¿Cuál es el mejor?

Si bien ya sabemos lo que es un engine , pero no sabemos cual elegir entre tanta variedad y todos parecen ser espectaculares. Te diré la verdad, es cierto, la mayoría de los engine que tu consideras como opción (asumo que serán los más reconocidos como Unreal, Unity, Cryengine, Construct2, GameMaker, etc), todos son fabulosos. Muchos te dirán que cada uno tiene pro y contras según que juego quieras hacer, seguramente me estarás preguntando ¿tengo que aprender todos los engines? No, en absoluto. Mi recomendación es que busques un engine genérico en donde puedas desarrollar casi cualquier videojuegos, porque digo casi; porque hay algunos tipos de juegos que requieren engines especializados, por ejemplo los MMO. No es que con los genéricos no se pueda hacer; pero no están orientado a eso por lo que es un poco más laborioso hacerlo.

Unity engine desarrollo de videojuegos

Los líderes en motores de videojuego genéricos son Unity y Unreal. Bien, pero ¿cual es mejor? hay muchísimo contenido de personas intentando comparar y deducir cual es mejor. En mi opinion van a tener que buscar eternamente porque no existe un ganador entre estos 2, es más para mi deberían unirse pero son empresas rivales. Lo que puedes hacer en uno , lo puedes hacer en otro , mas fácil o difícil pero se puede hacer. Como habrás notado nosotros somos partidarios de Unity pero no estamos en contra de Unreal, los 2 motores son excelentes.

Bueno quería dejarte algunas características que tiene el nuevo Unity para ver si te puedo convencer a que consideres usar este hermoso engine. Insertaré información oficial desde su web.

 

Unity 2017.1 en pocas palabras

Unity 2017.1 incluye una tonelada de nuevas características y mejoras. Pero yo sólo te mostrare alguna de ellas para no aburrirte.

 

Artistas y diseñadores: nuevas herramientas para contar historias y secuencias en el juego:

Unity 2017.1 introduce nuevas formas en lo que artistas y diseñadores pueden crear impresionantes contenidos cinematográficos, componer tomas fotográficas artísticas y contar mejores historias visuales con las herramientas Timeline, Cinemachine y Post-Processing Stack.

La línea de tiempo es una poderosa herramienta visual que te permite crear contenido cinematográfico como cintas y trailers, secuencias de juego y mucho más.

Cinemachine es un avanzado sistema de cámaras que te permite componer tus planos como un director de cine dentro de Unity, sin ningún código, y abre la puerta a la era de la cinematografía procedimental.

La pila de postprocesamiento le permite aplicar filtros realistas a escenas utilizando la terminología, los controles y los formatos de espacio de color de la industria cinematográfica para crear efectos visuales de alta calidad con apariencia más realista y dramática, de modo que pueda contar una mejor historia visual.

 

Eficiencia: colaboración, análisis de las operaciones en vivo y más herramientas

Estamos anunciando Unity Teams, un conjunto de características y soluciones que simplifican la forma en que los creadores trabajan juntos, que incluye Collaborate (ahora fuera de beta) y Cloud Build.

Nuestros analíticos de live-ops introducen nuevas formas más fáciles de entender a sus usuarios y reaccionar y ajustar dinámicamente sus juegos sin tener que volver a implementarlos.

Además, hay muchas actualizaciones de productividad para el editor, incluyendo mejoras a la importación de FBX, flujos de trabajo de animación, funcionalidad 2D, trabajo con paquetes de activos e integración con Visual Studio.

 

Gráficos y plataformas: mejoras en general

Hay una serie de avances en las áreas de Particle Systems y el Progressive Lightmapper que ofrece más opciones para lograr su visión artística y el rendimiento de control. Varias plataformas obtienen opciones de optimización de procesamiento con Rendimiento Diferido en iOS y NVIDIA VRWorks en PC.

Este es un pequeño resumen de lo que viene, ahora te paso a explicar detalladamente algunas de estas características.

 

¿Qué hay de nuevo en Unity 2017.1?

Herramientas de artista para la narración: introducción de la línea de tiempo y Cinemachine

Como diseñador, artista o animador, ahora puede crear secuencias de contenido cinematográfico y de juego por su cuenta, sin depender de los programadores, con nuevas herramientas de narración integrada. Eso significa más tiempo haciendo, y menos tiempo haciendo cola para todos.

Timeline es una potente herramienta visual que te permite crear contenido cinematográfico (como el cortometraje Adam). Puede usarlo para crear escenas, crear secuencias de juego y mucho más, orquestando sus objetos de juego, animaciones, sonidos y escenas. Con Timeline, puede centrarse en la narración de cuentos y cinemáticas, no en la codificación.

La herramienta de secuenciación basada en la pista de Timeline aplica un enfoque de “arrastrar y soltar” para coreografiar animaciones, sonidos, eventos, videos y más, para una creación más rápida de bellas escenas y contenido de procedimiento. Timeline tiene características para animación y audio, auto-keying y una interfaz de múltiples pistas con la capacidad de bloquear y silenciar pistas. Timeline es extensible a través de la Playable API y le ofrece la posibilidad de crear sus propias pistas para conducir cualquier sistema que tenga en su juego. Puede crear un clip de Timeline para representar prácticamente cualquier cosa, y hacer que los clips se repitan, escalen y se mezclen, aprovechando al máximo la interfaz de la línea de tiempo.

Cinemachine es el resultado de más de una década de construcción de videojuegos y cámaras cinematográficas. Ahora pone las conductas de cámara líder de la industria en manos de todos y abre la puerta a la era de la cinematografía procedimental.

Es un conjunto de cámaras inteligentes que activan dinámicamente las mejores tomas en el mejor momento basándose en la composición de la escena y la interacción. Esto elimina innumerables horas de animación manual, programación de cámara y revisión.

La función Cinemachine está disponible a través de la tienda de activos, agregue a su proyecto ahora.

Desde un shooter en primera persona hasta una aventura de acción en tercera persona, puedes revolucionar tus cámaras en el juego con Cinemachine. Usted puede fácilmente:

  • Controle secuencias como un director de cine con herramientas avanzadas de la cámara, incluyendo la configuración de la cámara del mundo real.
  • Componga fotos con un enfoque en la dirección artística, no detalles de la implementación. Dé a Cinemachine cámaras inteligentes instrucciones sencillas, como seguir la cabeza del personaje, y si la animación cambia, su disparo se actualizará automáticamente y seguirá funcionando correctamente.

Con Unity 2017.1, hemos añadido muchas nuevas capacidades a Cinemachine como:

  • Objetos múltiples de destino: Destine varios objetos y establezca la ponderación entre ellos. Crea un grupo lógico, basado en cualquier número de sujetos, que se posiciona según la posición de sus miembros. Puede utilizarse como un objetivo LookAt y Follow al realizar el seguimiento de un grupo de objetos. Genial para 2D también.
  • Encuadre de forma dinámica varios objetos: Automáticamente se enmarca automáticamente un grupo de blancos en función de sus posiciones. Si los objetos se separan, Cinemachine ajustará el FOV o Dolly (o ambos) dependiendo de un conjunto de reglas que cree.
    Nueva API totalmente abierta: Cree fácilmente Cinemachine para obtener exactamente el comportamiento de la cámara que necesita su proyecto.
  • Pista de Dolly: Cree imágenes de pista de Dolly como película y haga que su cámara se mueva suavemente a través de sus mundos. Ideal para secuencias cinematográficas o cámaras de juego donde desea que la cámara siga al sujeto por un conjunto de rieles.
  • Disparo claro: El disparo claro elegirá dinámicamente la mejor cámara basada en la prioridad de tiro y lo bueno que es el disparo. ¿Algo se movió en el marco que arruina el tiro? No hay problema, Cinemachine se cortará a la mejor cámara siguiente. Increíble para repeticiones o cualquier otra secuencia cinematográfica de un escenario variable.
  • Cámara impulsada por el estado: Permite la vinculación sin código de cámaras y estados de animación. Accione fácilmente diferentes comportamientos de cámara a partir de animaciones.

Usted puede llevar su narración al siguiente nivel combinando Timeline y Cinemachine juntos. Vaya aún más utilizando la pila de postprocesamiento para crear efectos y añada humor y drama a sus escenas.

Unity Teams

Unity Collaborate está fuera de beta y se une a Cloud Build como parte de una nueva oferta llamada Unity Teams, una solución única con un conjunto de características que le ayudará a crear juntos, más rápido. Para celebrar, los Equipos de Unidad son gratuitos para que todos puedan probar hasta octubre de 2017.

Obtenga más información sobre la oferta de lanzamiento de Unity Teams.

Para Colaborar, el trabajo que priorizamos para su primera versión de producción en 2017.1 refleja la retroalimentación proporcionada por los usuarios Beta. Además de las mejoras en el rendimiento, la estabilidad y las correcciones de errores, hemos añadido un nuevo conjunto de características: push selectivo, mejor integración del navegador de recursos y una nueva característica “In Progress”, que indica en tiempo real cuándo un compañero de equipo tiene funciones locales, Cambios no publicados en una escena o prefab.

Obtenga más información sobre los equipos de Unity.

Análisis de Live-Ops

Con Unity 2017.1, usted tiene acceso a las operaciones en vivo basadas en datos que colocan análisis analíticos a su alcance. Sumérjase y vea cómo su audiencia está interactuando con sus creaciones y luego realice ajustes en tiempo real que se adapten a sus hábitos; Todo ello sin reubicar una nueva versión. Unity 2017 le da el poder de servir mejor a su audiencia a medida que descubre formas inteligentes de optimizar las experiencias de juego.

Obtenga información de manera más eficiente con los Eventos estándar (actualmente en versión beta), que proporcionan un conjunto de eventos predefinidos que ayudan a descubrir sus conocimientos específicos del juego. Con el nuevo Analytics Event Tracker, puede implementarlos sin escribir una sola línea de código.

Cambie su juego en un instante, sin redistribución, con la nueva función de Configuración remota, que se ha agregado a Unity Analytics.

Obtenga más información sobre Analytics.

Mejoras 2D

En Unity 5.6, lanzamos grandes mejoras a las herramientas y flujos de trabajo para creadores de juegos 2D.

En Unity 2017.1 estamos introduciendo 2D Sprite Atlas, un nuevo activo que reemplazará al Sprite Packer. Con él se producen flujos de trabajo nuevos y mejorados que le proporcionan más control para el embalaje de sprites y su uso en tiempo de ejecución. Los atlas son una parte importante de los flujos de trabajo 2D en Unity, y el Sprite Atlas proporciona una creación y gestión de atlas más simples, así como una API de secuencias de comandos para un mayor control y versatilidad.

Sprite Las máscaras se usan para ocultar o revelar partes de un Sprite o grupo de Sprites en el espacio mundial. La máscara Sprite sólo afecta a los objetos utilizando el componente Sprite Renderer, así como los sistemas de partículas.

En 2017.1, también estamos añadiendo una Sprite Physics Shape al editor Sprite. Esto le permite configurar una forma predeterminada personalizada en un Sprite para generar formas de collider con un PolygonCollider2D.

Mejoras de animación

Hemos revisado las ventanas de animación para mejorar el flujo de trabajo de imágenes clave, hacer que la animación se sienta más cómoda y familiar, y permitir la interacción con las máquinas de estado del animador. La grabación del funcionamiento se proporciona como característica experimental.

El nuevo flujo de trabajo de fotogramas clave le permite decidir de forma explícita qué es la clave cuando, y todos los valores de propiedad modificados sin clave se descartan cuando la animación es reevaluada / vista previa. Hemos cambiado el comportamiento predeterminado de la edición de clips en la ventana de animación (nuevo modo de vista previa predeterminada), retroalimentación visual y teclas de acceso rápido globales. El objetivo de estos cambios es permitir un flujo de trabajo suave para fotogramas clave fuera de la ventana de animación, además de permitirle previsualizar clips sin tener que estar en un modo de autokey / rec.

Statemachinebehaviour ahora también se puede depurar en modo de juego en el editor.

También estamos introduciendo GameObjectRecorder, una nueva función de editor experimental, que le permite grabar cualquier propiedad en un GameObject y sus hijos. De esta forma, puede crear fácilmente animaciones guardando todo lo que se ha grabado en un clip de animación.

Mejoras progresivas de Lightmapper

En 2017.1, hemos añadido soporte para LODs en el Progressive Lightmapper. La diferencia principal entre el Iluminar y el Lightmapper progresivo al baking LODs es que con el Progressive Lightmapper, no es necesario autor de Light Probes alrededor de los LODs para obtener luz rebotada sobre ellos. Tener la iluminación indirecta en la resolución completa al bake llevará a Lightmaps mejorados para LODs, y usted puede evitar el proceso tedioso de la creación de los Lightprobes para ellos. (Esto también estará disponible en 5.6.)

También añadimos soporte para materiales de doble cara en el Progressive Lightmapper añadiendo un nuevo ajuste de material que hace que la iluminación interactúe con los backfaces. Cuando se habilita, ambos lados de la geometría se contabilizan al calcular la iluminación global. Los backfaces no se consideran inválidos cuando se ven desde otros objetos. El renderizado de la cara posterior no está controlado por este ajuste ni los backfaces serán representados en los mapas de luz. Backfaces rebotan la luz usando la misma emisión y albedo como frontfaces. (Esto también estará disponible en 5.6)

Mejoras en el Sistema de Partículas

Estamos introduciendo la integración de sprite, fuerzas de colisión de partículas (que pueden empujar colisionadores), un gran número de mejoras de forma, incluyendo un nuevo tipo de forma, y ​​adiciones al módulo de ruido, así como otras características y mejoras. Ahora es más fácil usar Partículas en 2D gracias a los nuevos controles y restricciones como alinear a la velocidad. Puede utilizar Particles para obtener más efectos y animaciones que nunca, incluyendo líneas y senderos iluminados.

Hemos añadido soporte para usar Sprites en el sistema de partículas, a través del módulo de animación de texturas. Esto permite un mejor atlasing y batching de sistemas de partículas, y también expone una serie de características de Sprite para su uso en sistemas de partículas, tales como marcos de animación de tamaños variables y puntos de pivote por marco.

El módulo de ruido viene con nuevas opciones para proporcionar un mayor control sobre cómo se aplica el ruido a sus partículas. En la implementación original en Unity 5.5, se aplicó ruido a las posiciones de las partículas. En 2017.1, será posible aplicar ruido a:

  • Posiciones
  • Rotaciones
  • Tamaños
  • Tus sombreadores que usan nuevas secuencias de vértices personalizadas (¡excelente para la distorsión UV!)

Estamos introduciendo una nueva forma de emisión de burbujas y modificando los modos para los planos del modo de colisión del sistema de partículas en el módulo de forma. Una transformación dentro del módulo le permite aplicar la posición personalizada, la rotación y la escala a la forma de emisión.

Otras mejoras incluyen la capacidad de alinear las partículas a su dirección de velocidad, y permitir que Emit over Distance se use para sistemas de espacio local. La emisión de bordes es ahora más flexible, lo que le permite elegir el grosor del borde utilizado para generar partículas.

Finalmente, las partículas pueden ahora aplicar fuerzas a los Colliders que golpean usando el módulo Collision.

Conclusión

Bien , como ya habrás notado este motor es sumamente completo , hermoso, flexible para lo que desees emprender. Se que no es una decision fácil para ti pero si tomas mi consejo y eliges Unity no te vas a arrepentir. ¿Porqué no te vas a arrepentir? No sólo te muestro la potencia que tiene sino que nosotros nos dedicamos a enseñar Unity, tanto online como presencial. Eso quiere decir que en tu camino de aprendizaje de este motor de videojuegos o en el camino del desarrollo de tu propio videojuego, estaremos acompañándote en todo momento para que en ningún punto te veas abrumado o pierdas tu rumbo.

Perfecto, pero ¿hay que comprar Unity? Te informo que con la versión gratuita de Unity puedes lograr esta misma calidad que te he presentado en el post. Entonces podemos decir que no tenemos que preocuparnos por el costo de Unity engine, pero ¿y mi ayuda qué? Bueno tenemos un canal de Youtube , cursos gratis , post de este mismo blog gratis. Aunque si quieres algo mejor ofrecemos también un servicio VIP, entérate de todas sus características aquí: enlace

Bueno hemos finalizado este post ayudandote a elegir tu engine de videojuegos, esperamos verte en nuestros siguientes post “como aprender a programar desde 0” y “Requisitos para desarrollar un videojuego”. Espero que les haya servido, nos vemos. Hasta la próxima.

Aprende a desarrollar una IA para tus NPCs parte 5

inteligencia artificial Unity (IA)

Hola a todos, bienvenidos a una nueva edición de como desarrollar una IA para tu NPC en Unity. Como había prometido hoy vamos a ver como rotar y mover nuestro personaje para que siga a nuestro player o jugador.Bien lo primero que debemos hacer es borrar las paredes que teníamos puestas de la edición anterior, los sensores dentro del NPC los desactivamos. (Para desactivar un objeto se debe destildar el check que se encuentra al lado de su icono y nombre). Una vez hecho esto debemos crear un cubo y nombrarlo Player, este mismo lo colocamos en alguna parte del escenario.Ya teniendo listo el escenario, vamos a la pestaña de proyectos y creamos un nuevo C# script dentro de la carpeta scripts y colocamos el siguiente código.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RotateToTargetAndMove : MonoBehaviour {
    public GameObject target;
    public float speedCharacter = 8.0f;

	void Update () {
        Vector3 pointA = gameObject.transform.position;
        Vector3 pointB = target.transform.position;
        Vector3 direction = pointB - pointA;

        float distance = Vector3.Distance(pointA, pointB);
        Debug.Log("Distancia:" + distance);

        Ray ray = new Ray(pointA, pointB);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        if (Input.GetKey(KeyCode.Mouse0))
        {
            transform.LookAt(pointB);
            gameObject.transform.position += gameObject.transform.forward * 
            speedCharacter * Time.deltaTime; 
        }
	}
}

Como podrán ver es un código similar a las primeras ediciones, ahora vamos a pasar a explicar el código detalladamente.

inteligencia artificial Unity (IA)

 

Explicación del código

public GameObject target;
    public float speedCharacter = 8.0f;

La primer variable es la que ya habíamos creado en ediciones anteriores es para almacenar el objetivo del NPC, en este caso va a ser el Player, y la segunda variable determina con que velocidad se moverá el NPC.

Vector3 pointA = gameObject.transform.position;
        Vector3 pointB = target.transform.position;
        Vector3 direction = pointB - pointA;

Ahora definimos las 3 variables típicas de las ediciones anteriores las cuales usamos para determinar la dirección.

float distance = Vector3.Distance(pointA, pointB);
        Debug.Log("Distancia:" + distance);

Utilizamos nuevamente las variables declaradas anteriormente para determinar la distancia entre el NPC y el Player.

 

Ray ray = new Ray(pointA, pointB);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

Creamos un rayo a modo depuración para poder verlo en la pestaña de escena.

if (Input.GetKey(KeyCode.Mouse0))
        {
            transform.LookAt(pointB);
            gameObject.transform.position += gameObject.transform.forward * 
            speedCharacter * Time.deltaTime; 
        }

Este es el código nuevo, creamos un condicional que nos dice “si presionamos el click izquierdo del mouse…” nos rotamos en dirección al player (transform.LookAt(pointB)) y luego nos movemos en dirección a él con una velocidad determinada.Puesta en marcha Ahora borramos todos los scripts que estaban añadidos a nuestro NPC y agregamos el script que acabamos de crear. En la variable target debemos arrastrar el Player. Luego de eso estamos listo para probarlo.Bueno eso es todo espero que les haya gustado.
Nos vemos en la próxima edición en la cual les enseñare:

 “Como mejorar el movimiento del NPC”. 

Si te gusto este post comenta y comparte.

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aprende a desarrollar una IA para tus NPCs parte 4

inteligencia artificial Unity (IA)

Hola a todos, bienvenidos a una nueva edición de como hacer una inteligencia artificial en Unity. Como había prometido hoy les traigo como desarrollar sensores para la detección de obstáculos en el entorno.Para comenzar vamos a ir a nuestra pestaña de proyectos, carpeta scripts, creamos un nuevo C# script y escribimos el siguiente código.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CoordinatesSensors : MonoBehaviour {
    public GameObject sForward,sBackward, sRight, sLeft;
    private GameObject obstacle;
	
	void Update () {
        Forward();
        Backward();
        Left();
        Right();
	}
    void Forward()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sForward.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sForward.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle = posObstacle - point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("adelante " + h.transform.gameObject.name + " a distancia: " 
                + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
    }
    void Backward()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sBackward.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sBackward.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle = posObstacle - point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("atras " + h.transform.gameObject.name + " a distancia: "
               + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
    }
    void Right()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sRight.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sRight.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle = posObstacle - point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("derecha " + h.transform.gameObject.name + " a distancia: " 
                + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
    }
    void Left()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sLeft.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sLeft.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle = posObstacle - point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("izquierda " + h.transform.gameObject.name + " a distancia: " 
                + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
    }
}

Bueno como podrán apreciar para los que están siguiendo esta saga, este código es muy similar al que ya habíamos visto en la edición anterior salvo algunos cambios. Básicamente lo que hicimos fue separarlo de alguna manera y lanzar un rayo en cada dirección.

Explicación del código

Ahora pasamos a explicar los cambios que hemos realizados en el código.

public GameObject sForward,sBackward, sRight, sLeft;

Lo que hemos hecho acá es dividir la variable target en 4 variables llamadas sensor+dirección, por ejemplo sIzquierda o en su traducción al ingles sLeft.

void Update () {
        Forward();
        Backward();
        Left();
        Right();
	}

Ya no tenemos escrito todo nuestro código en el método Update, sino que creamos 4 métodos individuales y los llamamos desde el Update.

void Forward()
    {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = sForward.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, sForward.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);
       //Continua...

Este es uno de los métodos individuales para cada dirección, en este caso es para la dirección hacia adelante. Lo único que modificamos en esto es cambiar la variable target por la variable correspondiente a la dirección del método en donde estamos.

inteligencia artificial Unity (IA)

 

Puesta en marcha

 

Bien, ya tenemos nuestro código listo pero aun no esta funcional, ya que debemos hacer algunos cambios en nuestra escena.Primero antes que nada tenemos que crear paredes a modo de obstáculos que servirán a nuestro NPC para detectar su entorno, pueden tener o no la misma forma que presentamos en la imagen.Segundo debemos crear 4 cubos dentro de nuestro NPC, a estos cubos le debemos sacar la colisión, desactivar el mesh renderer para que no se vean y colocarlo a 4 unidades de distancia desde el NPC. Es decir que debemos tener estos 4 cubos como hijo de nuestro NPC.Para colocarlo en 4 unidades seria de esta manera cuboDerecha (x=4), cuboIzquierda (x=-4), cuboAdelante(z=4), cuboAtrás(z=-4).Tercero para poder visualizar los sensores solo en la vista de escena, debemos cambiarle el icono a cada uno de ellos, esto se hace haciendo click en el cubo celeste que esta junto al nombre del objeto en la pestaña inspector.Y por último debemos borrar nuestro antiguo script de nuestro NPC, agregar este script y asignarle los 4 cubos según correspondan a sus direcciones.
Bueno eso seria todo espero que les haya gustado, nos veremos en la siguiente edición. Si te ha gustado el post no te olvides de comentarlo y compartir.
Siguiente edición Como rotar y mover nuestro NPC hacia el waypoint.
curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aprende a desarrollar una IA para tus NPCs parte 3

inteligencia artificial Unity (IA)

Hola a todos bienvenido nuevamente a una nueva edición de como desarrollar una inteligencia artificial en Unity. Como lo prometido es deber, hoy vamos a ver como detectar obstáculos entre el NPC y el waypoint. Lo primero que tenemos que hacer es ir a nuestra pestaña de proyectos , ir a la carpeta de scripts y crear un nuevo C# script. Luego de eso escribimos el siguiente código:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RaycastArrayObstacles : MonoBehaviour {
    public GameObject target;
    private GameObject obstacle;
	
	// Update is called once per frame
	void Update () {
        Vector3 point_A = gameObject.transform.position;
        Vector3 point_B = target.transform.position;
        Vector3 direction = point_B - point_A;
        float distance = Vector3.Distance(point_A, point_B);

        Ray ray = new Ray(gameObject.transform.position, target.transform.position);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

        RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

        if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle= posObstacle -  point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("Primer obstaculo " + h.transform.gameObject.name + " a distancia: " 
                + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }
	}
}

Como podrán ver el código no es muy distinto al anterior, si se habrán dado cuenta que es una simple modificación del código de la edición numero 2. Es por lo cual antes de continuar debemos sacar el antiguo script de nuestro NPC y agregarle el que acabamos de crear.

Explicación del código

RaycastHit[] hit;
        hit = Physics.RaycastAll(ray);

Declaramos un array de variables de tipo RaycastHit con el nombre de hit. En dicho array almacenamos todas las colisiones que pueda tener nuestro antiguo rayo de detección llamado ray.

if (hit.Length > 0)
        {
            foreach (RaycastHit h in hit)
            {
                obstacle = h.transform.gameObject;
                Vector3 posObstacle = obstacle.transform.position;
                Vector3 directionObstacle= posObstacle -  point_A;
                float distanceObstacle = Vector3.Distance(point_A, posObstacle);
                Debug.Log("Primer obstaculo " + h.transform.gameObject.name +
                " a distancia: " + distanceObstacle);
                Debug.DrawRay(ray.origin, directionObstacle * 1.0f, Color.magenta);
                break;
            }
        }

inteligencia artificial Unity (IA)

Comprobamos si existen al menos una colisión que nos impida avanzar en la dirección de nuestro rayo. Si eso es cierto, recorremos a través de un foreach (estructura repetitiva similar a for) todas las colisiones almacenadas en nuestro array hit. Como a nosotros no nos interesan todas las colisiones vamos a trabajar únicamente con la primera que nos está obstruyendo el paso.A la variable obstáculo le asignamos el objeto que contiene la primer colisión. Creamos una variable de tipo Vector3 para almacenar la posición del obstáculo, también otra variable del mismo tipo para almacenar la dirección del mismo.Declaramos una variable de tipo flotante que almacene la distancia entre el NPC y el obstáculo, luego de eso imprimimos en consola el nombre del objeto obstáculo y su distancia ,para luego dibujar el rayo correspondiente a esa acción en la pestaña escena. Por ultimo y no por eso menos importante un break , el cual sirve para detener la búsqueda de colisiones una vez encontrada la primer colisión.

Bueno mis queridos seguidores eso es todo por hoy, en la próxima edición veremos:

“Sensores cardinales”.

No se olviden de comentar y compartir si les ha gustado esta edición.

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aprende a desarrollar una IA para tus NPCs parte 2

inteligencia artificial Unity (IA)

Hola a todos bienvenidos nuevamente a la segunda edición este emocionante saga sobre inteligencia artificial aplicada a videojuegos. Como había prometido hoy vamos a ver como calcular la distancia y dirección entre el NPC y su respectivo waypoint. Lo primero que debemos hacer es crear un nuevo C# script en la pestaña de proyectos (Nota: si tienes una carpeta para scripts o programación debes crearlo ahí dentro.)Luego escribimos este código:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RaycastPointToPoint : MonoBehaviour {
    public GameObject target;
	
	void Update () {
        Vector3 pointA = gameObject.transform.position;
        Vector3 pointB = target.transform.position;
        Vector3 direction = pointB - pointA;

        float distance = Vector3.Distance(pointA, pointB);
        Debug.Log("Distancia: " + distance);

        Ray ray = new Ray(pointA, pointB);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);
        
	}
}

Como podrán apreciar este código es mas corto que el de la edición pasada. Recuerden, una vez escrito este código debe ser asignado su NPC (nota: si no tienen un NPC, creen una esfera para hacer la prueba).Lo que debe hacer este código es calcular la distancia y dirección entre ambos, y lanzar una linea de depuración para que veamos su comportamiento.

inteligencia artificial Unity (IA)

 

Explicación del código

Antes que nada les recuerdo que el nombre del archivo debe coincidir con el nombre de la clase principal.

 public GameObject target;

Dicho esto, lo primero que hacemos es crear una variable publica de tipo GameObject llamada target, en esta variable se almacenará el waypoint actual.

Vector3 pointA = gameObject.transform.position;
        Vector3 pointB = target.transform.position;
        Vector3 direction = pointB - pointA;

Declaramos 3 variables locales dentro del método Update de tipo Vector3 , este tipo almacena 3 valores flotantes etiquetados como x,y,z. A la primer variable le asignamos la posición de nuestro NPC ,a la segunda variable la posición de nuestro waypoint y por último a la tercer variable le asignamos la dirección. Para calcular la dirección entre 2 vectores basta con restar el primer vector al segundo.

 float distance = Vector3.Distance(pointA, pointB);
        Debug.Log("Distancia: " + distance);

Ahora creamos una variable local de tipo flotante llamada distancia a la cual le asignamos la distancia entre el NPC y el waypoint. Para hacer este calculo nos ayudamos de un método que nos provee Unity el cual pueden apreciar en el código. Luego de esto mostramos en consola el mensaje “Distancia: el valor de la variable”.

Ray ray = new Ray(pointA, pointB);
        Debug.DrawRay(ray.origin, direction * 1.0f, Color.red);

Antes de finalizar este script creamos una variable de tipo rayo llamada ray, en la cual decimos que este rayo sea desde el NPC hasta el waypoint. Después de eso, dibujamos este rayo en la pestaña de escena con un color rojo. Para dibujar este rayo lo primero que debemos hacer es decirle su origen, hacia donde se dirige y en que color va a estar representado.
Eso seria todo por hoy espero que les haya gustado y servido. Por el momento no estamos detectando nuevos waypoint ni obstáculos solo lo estamos calculando para luego utilizarlos en la siguiente edición.No te olvides de comentar y compartir.

En la próxima edición se verá la detección de obstáculos.
curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aprende a desarrollar una IA para tus NPCs parte 1

inteligencia artificial Unity (IA)

Hola a todos bienvenidos a nuestra primer edición sobre inteligencia artificial para videojuegos. En esta guía mostraremos a modo de ejemplo como se realiza una IA en Unity. Si bien hay varias técnicas que se pueden utilizar en este motor, como el sistema de navigation que trae incluido el engine , pero en este caso vamos a hacer una programación basada en waypoint (puntos de camino).

Creación de WayPoints

Lo primero que debemos hacer es crear un nuevo proyecto en Unity. Crear un nuevo C# script en la pestaña de proyectos. (Recuerden tener su pestaña de proyecto bien organizada con carpetas de scripts, prefabs, scenes, entre otras). Una vez creado vamos a escribir el siguiente código.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NavPointCreator : MonoBehaviour {
    public int id;
    GameObject wp;
	
	
	void Update () {
        if (Input.GetKeyUp(KeyCode.Space))
            CreateTarget();
	}
    void CreateTarget()
    {
        if (wp != null)
            Destroy(wp);
        GameObject waypoint = GameObject.CreatePrimitive(PrimitiveType.Cube);
        waypoint.transform.position = new Vector3(Random.Range(7.0f, -7.0f), 0.03f, 
        Random.Range(7.0f, -7.0f));
        waypoint.name = "Waypoint " + id;
        id++;
        waypoint.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
        //waypoint.GetComponent<MeshRenderer>().enabled = false;
        wp = waypoint;
    }
}

Explicación del código C#

Para resumir lo que hace este código es simplemente crear un cubo en un punto aleatorio dentro de un rango, si el cubo esta creado lo destruye y crea otro en otra posición. Esto sirve para crear los destinos u objetivos para nuestro NPC, lo que le dará un comportamiento más natural a comparación de un comportamiento lineal o por animación.Ahora pasamos a una explicación mas detalla del código.
“`public int id;GameObject wp;“`Declaramos una variable publica de tipo entero llamado id, la cual usaremos para identificar cada waypoint. También declaramos una variable privada de tipo GameObject nombrada wp, la cual contendrá al objeto cubo que representa al waypoint.

void Update () {
        if (Input.GetKeyUp(KeyCode.Space))
            CreateTarget();
	}

Si tocamos la tecla espacio llamará al método de crear objetivo.

void CreateTarget()
    {
        if (wp != null)
            Destroy(wp);
        GameObject waypoint = GameObject.CreatePrimitive(PrimitiveType.Cube);
        waypoint.transform.position = new Vector3(Random.Range(7.0f, -7.0f), 0.03f, 
        Random.Range(7.0f, -7.0f));
        waypoint.name = "Waypoint " + id;
        id++;
        waypoint.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
        //waypoint.GetComponent<MeshRenderer>().enabled = false;
        wp = waypoint;
    }

Por último tenemos el método crear objetivo. Primero se comprueba si wp no esta vacio , en ese caso se destruye el wp existente, luego se crea un cubo nuevo en una posicion aleatoria dentro de un rango , se le asigna un nombre incluyendo en él su id, se le asigna un tamaño de 0.5 y luego se guarda el nuevo waypoint en la variable wp.Existe un código comentado que sirve para ocultar la parte visible del cubo, ya que a fines prácticos nosotros no queremos ver los waypoints de nuestros NPC’s.
Bien eso sería todo, espero que les guste, no se olviden de comentar y compartir si les gusto el post.

En la siguiente edición como detectar la distancia y dirección para que el NPC se dirija al waypoint.
curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Aulas Talleres Móviles (ATM) Desarrollo de videojuegos

Hola a todos , hoy les presento los videojuegos desarrollados por mis alumnos en esta hermosa experiencia de aulas talleres móviles (ATM).Agradezco a Mariela B. por esta hermosa oportunidad que nos brindó. Sin mas les comparto las creaciones de los alumnos:

Gostly:

ATM Aulas Talleres Móviles
ATM Aulas Talleres Móviles
ATM Aulas Talleres Móviles
ATM Aulas Talleres Móviles
Descargar ATM Aulas Talleres Móviles

 

EDGELESS:


ATM Aulas Talleres Móviles

ATM Aulas Talleres Móviles

ATM Aulas Talleres Móviles

descargar ATM Aulas Talleres Móviles

Tips y buenas practicas sobre Unity (Parte 2)

unity tips

11.Si arrastramos un objeto encima de otro en la vista de jerarquía (Hierarchy) esto establece un vinculo. Si un objeto esta vinculado a otro significa que es el padre o el hijo de ese objeto. El objeto arrastrado siempre quedará como hijo. Cuando un objeto es movido , rotado o escalado también sus hijos sufren estas modificaciones.

Podemos arrastrar un hijo y dejarlo arriba en la vista de jerarquía para desvincular este objeto.

12.Podemos organizar nuestra vista de jerarquía con objetos vacíos (empty gameObjects) como si fueran carpetas, colocamos una serie de objetos dentro de estos objetos , lo cual provocará una serie de hijos para este objeto vacío, esto nos permite colapsarlo en la vista de jerarquía. Recuerde cuando un objeto se convierte en hijo de otro sus transformaciones están sujetas a las del padre. Es por lo cual se recomienda poner el objeto vacío en posición 0,0,0.

Es una muy buena práctica organizar nuestra jerarquía, sobre todo cuando hay muchos objetos en la escena.

13.Las variables publicas son expuestas en el inspector, en donde podrás ajustar el valor en su propio componente después de haberlo agregado a un objeto. Esto se conoce como serializar el valor porque Unity guarda el estado modificado de la variable.

Si una variable es pública también puede ser accedida por otros scripts.

14.Un vector es un almacenamiento de multiples valores como una unidad.Por ejemplo un vector3 son 3 números flotantes (etiquetados x,y,z). Esto permite manejarlo como una única variable en vez de utilizar una variable para cada valor.

Algo similar ocurre con la utilización de arrays.

15.Es común colocar los controles de teclado y mouse en un mismo script, esto resulta más cómodo pero no es para nada flexible. Unity tiene un maravilloso sistema de componentes que debería aprovecharse. Para aprovechar la flexibilidad de este sistema debemos tratar de hacer scripts separados.

Al utilizar scripts separados podemos otorgar o denegar un determinado comportamiento a un objeto mediante el sistema de componentes.

16.Un ray es una imaginaria o invisible línea en la escena que comienza en un punto de origen y se extiende en una determinada dirección.

Esto se utiliza cuando utilizamos el Raycast u otros métodos similares.

17.Coroutines es la forma de ejecutar tareas sin que el programa espere hasta que estas sean finalizadas. Es decir se ejecuta el programa principal y la coroutina en simultáneo.

Esto seria como poner una tarea en segundo plano.

18.Render es la acción de la computadora que dibuja los píxeles de una escena 3D. Nuestro monitor es 2D es decir tiene x,y , pero lo que muestra es en 3D, lo que quiere decir que tiene x,y,z. Cuando el algoritmo que hace posible esto se está ejecutando , a esa acción se denomina rendering.

19.Finite State Machine (maquina de estado finito) es una estructura de código en la cual el estado actual de un objeto es seguido. Existen transiciones bien definidas entre los estados , y el código se comporta de manera diferente en base al estado.

Esto lo usamos en el sistema de animaciones Mecanim.

20.Un asset es cualquier archivo que se puede mostrar en la vista de proyecto; estos pueden ser imágenes 2D , modelos 3D, archivos de código, escenas y mucho más.

De ahi el nombre de su tienda Asset Store.

Si aún no has visto la edición anterior de esta saga has click aquí.

¿Buscas aprender más sobre desarrollo de videojuegos con Unity?

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Tips y buenas practicas sobre Unity (Parte 1)

unity tips

1.Muchos desarrolladores se centran demasiado en el editor visual ; pero Unity tiene una limitación con este editor , ya que no permite editar código. Aunque Unity permite la conexión a cualquier IDE Externo como Monodevelop, Eclipse , Visual Studio, entro otros.

Personalmente como siempre trabajo con C#, utilizo Visual Studio.

 

2.Un objeto malla es un objeto visual en 3D. Las visuales en 3D son construidas por lineas y caras que forman a una maya. Para poder unir las lineas con las caras se utilizan vértices , los cuales contienen información sobre la posición , normales , UV , entre otras cosas.

Aclaración la líneas no pueden ser formadas sin vértices , y las caras no pueden ser formadas sin líneas, pero toda la información esta guardada en los vértices.

 

3.Unity permite que al darle “Play” en el editor el juego se ejecute , en realidad esto es un sistema de debug para que veamos si posee fallos nuestro trabajo , no solo que podemos ejecutarlo y probarlo ,sino también podemos ir a la pestaña de escena (scene) , seleccionar cualquier objeto de la escena y mirar en el inspector el comportamiento que esta teniendo en tiempo real.

Advertencia, todos los cambios realizados en la escena mientras estas en modo Play, no serán guardados.

 

4.La dificultad con los sistemas de control de versión (Tales como Subversion, Git y Mercurial) solían ser una debilidad importante, pero con la versión más reciente de Unity, eso ya no es problema. Es posible encontrar recursos de hace tiempo atrás, diciendo que Unity no funciona con control de versiones, pero los recursos más nuevos mencionan a los archivos de metadatos (Son el mecanismo que Unity introdujo para trabajar con sistemas de control de versión) y a cuales carpetas del proyecto se debe o no incluir en el repositorio.

Si no están familiarizados con los comandos de Git pueden usar un software llamado SourceTree. En mi caso yo utilizo los repositorios de Bitbucket.

 

5.Unity permite utilizar los 3 botones del mouse para un manejo mas fluido en la pestaña de escena (scene) , el primer botón se utiliza para seleccionar un objeto , el segundo se utiliza para orbitar en la escena y el botón central activa la herramienta “Pan”(Mano). Ademas en la pestaña de jerarquía (hierarchy) y proyecto (project) se utiliza el primer botón para seleccionar y el segundo para abrir opciones como si fuera Windows.

Además, con q,w,e,r ,t puedes cambiar el tipo de herramienta entre selección , traslación , rotación , escala , herramienta 2D.

 

6.En la pestaña de proyecto (project) existen carpetas y recursos que visualizamos. Estos archivos están directamente vinculados a la carpeta Assets de nuestro proyecto en el disco duro , por lo cual si agregamos archivos a esta carpeta Unity los sincronizara y si borramos también los borrara. Tener mucho cuidado de no borrar o mover esta carpeta porque su proyecto se puede quedar inutilizable.

Es común sincronizar esta carpeta assets para hacer los backups de tu proyecto.

 

7.Un frame es un solo ciclo del bucle principal del juego. Casi todos los videojuegos son construidos en base a un bucle en el núcleo del videojuego , en donde el código es ejecutado en ciclos mientras el juego corre. Cada ciclo incluye el dibujado de la pantalla.

FPS significa frames por segundo.

 

8.Monodevelop organiza los archivos en grupos llamado soluciones y genera una solución donde están todos los scripts ; usualmente no tienen que preocuparse por ello.

Esto mismo sucede con el IDE Visual Studio.

 

9.Los números de posición pueden ser cualquier unidad que desee. Siempre y cuando sean compatibles en toda la escena. La elección mas común para las unidades son metros y es lo que generalmente se escoje; pero aveces se suele usar “pies” como unidad, aunque hay muchos que también usan las “pulgadas”.

Tener en cuenta la unidad de medida ya que afecta directamente a la física del juego.

 

10.Siempre que perdemos de vista un objeto en la pestaña de escena (scene) , para encontrarlos debemos seleccionar nuestro objeto en jerarquía (hierarchy) y luego colocamos el mouse encima de la pestaña de escena (scene) y pulsamos “F” (focus) . Lo que hará es llevar nuestra vista de escena hacia el objeto que estamos buscando.

En caso de no encontrarlo en la vista de jerarquía tenemos un buscador en esta vista.

 

¿Buscas aprender más sobre desarrollo de videojuegos con Unity?

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Taller de videojuegos (Material para profesores)

hola a todos hoy damos el comienzo a un taller de programación de videojuegos. Cabe destacar que este taller esta orientado para adolescentes a partir de los 14 años. Aunque esto no limita que si deseas hacerlo puedas hacerlo teniendo una edad inferior a la establecida. Esta esta edad se impone para dar entender al publico de el porqué de la manera de enseñar los contenidos.
Sin mas vueltas vamos a nuestra primera presentación.

Taller de programación de videojuegos

Bueno una vez que ya hayan visto las 6 presentaciones , que por cierto son bastante cortas. Les explico que el objetivo de subir este material es facilitarle un poco la teoría a los profesores de Unity. Anteriormente establezco que el material esta diseñado para alumnos menores de edad, por lo cual el material es rápido , al grano y explicado de la manera mas coloquial posible.

Espero que les sirva , en caso de que no seas profesor y lo hayas leído ten en cuenta que el material no se explica por si solo , es tan solo un apoyo teórico para que los alumnos puedan recordad ciertos temas explicados en clases. Saludos y hasta la próxima.
¿Buscas un curso sobre cómo aprender a desarrollar videojuegos con Unity?

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.

Scripting C# : Properties

Hola a todos hoy les voy a enseñar como utilizar Properties en C#.
Los properties te permiten acceder a una variable privada de otro script , definiendo si solo quieres que sea leída o si también puede ser modificada desde un script externo.

Primero creamos un script C# con el nombre de “PJ”, luego escribimos lo siguiente:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PJ {
    int health = 5;

    public int vida {
        get
        {
            //Debug.Log("internal: "+ health);
            return health;
        }
        set
        {
            health = value;
        }
    }
}

Ahora creamos otros script con el nombre de “GameController” y copiamos lo siguiente:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameController : MonoBehaviour {
    PJ player = new PJ();
    int health=10;
	// Use this for initialization
	void Start () {
        Debug.Log("gameController:"+health);
        Debug.Log("Pj:" + player.vida);
        player.vida = health;// set
        health = player.vida/2;// get
        Debug.Log("gameController:" + health);
        Debug.Log("Pj:" + player.vida);

    }
}

Bien , lo que deben hacer ahora es arrastras el GameController a un objeto vacío en una escena nueva. Al darle play veran en la consola algo como esto:

  • gameController:10
  • Pj:5
  • gameController:5
  • Pj:10

Como podran ven el valor de gameController se inverte con el de Pj. Para entender esto vamos a explicar que hicimos paso por paso.


Comencemos por el script Pj:

  • Borramos el MonoBehaviour de la clase
  • Creamos una variable privada de tipo entera con el nombre de health ,con un valor asignado de 5.
  • Creamos el properties ( public int vida) significa que es publico , devuelve un entero y su nombre es vida.
  • Recuerden que un properties es una variable por lo cual debe ir en minúsculas y no debe llevar paréntesis.
  • Abrimos y cerramos llaves , dentro de estas definimos el get y set . Cada uno de ellos con sus llaves correspondientes.
  • Dentro de get debe ir el return que es el valor que tiene que devolver, como ya lo habíamos definido arriba debe ser un valor entero , es por eso que devolvemos la variable entera (int) health.
  • Dentro de set debe ir la variable privada a la que estamos accediendo y le asignamos “value” donde esta el valor que fue asignado a vida.

Seguimos por el script GameController:

  • Creamos una variable de tipo Pj (nombre del otro script) con el nombre player y le asignamos una nueva instancia del mismo. Es decir creamos un Pj dentro de la clase GameController. Aunque les recomiendo saber sobre instancias antes de mirar este tutorial.
  • Creamos una variable privada de tipo entera con el nombre de health y le asignamos el valor de 10.
  • En el método Start imprimimos varios mensajes en consola con la sentencia Debug.Log.
  • Asignamos en la linea 12 al properties vida el valor de health de GameController, que en este caso es 10.
  • En la linea 13 asignamos a la variable health de GameController el valor del properties vida dividido 2 , ya que en la linea anterior habíamos cambiado su valor a 10.

Bueno espero que hayan entendido pronto actualizare este post con mas ejemplos de properties , así que no dejen ve verlo.

curso sobre desarrollo de videojuegos en unity
Pulsa en la imagen para ir al curso.