Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 0€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales

Leaderboard


Popular Content

Showing most liked content since 01/21/2019 in all areas

  1. 6 likes
    Hola a todos, mi nombre es David y este es el primero de una serie de tutoriales sobre Unity3D. Esta iniciativa surge del programa Unity Student Ambassador y están creados por mi inicialmente para workshops presenciales. Los he adaptado a este formato pero si tienes cualquier duda no dudes en preguntarme. Espero que os guste. Introducción ¿Que es Shader Graph? La creación de shaders en Unity ha sido tradicionalmente el terreno de juego de personas con habilidades para programar. Shader Graph abre el campo para artistas y otros miembros del equipo para que la creación de shaders sea mucho más sencilla. Solo conecta nodos en una red gráfica y podrás ver los cambios al instante. Requisitos El Shader Graph está disponible desde Unity 2018.1. Está diseñado para funcionar con otra característica de Unity 2018.1: Scriptable Render Pipeline (SRP). Por lo tanto, no puede usarlo con el Built-In Unity Renderer. Tiene por tanto soporte tanto para LWRP como para HDRP (o para su propio SRP). Para este tutorial usaré la versión 2019.2.9f1. ¡Comencemos! Lo primero que necesitamos es abrir Unity y crear un nuevo proyecto. Asegúrese de que elige usar el nuevo SRP. En nuestro caso elegiremos el LWRP. Confirmamos y esperamos que Unity lo prepare todo. Una vez dentro de Unity ya podemos ponernos a trabajar. Por defecto debería tener incluido el paquete Shader Graph. Puedes comprobar ese y otros paquetes instalados en Windows/Package Manager. Nuestro primer Shader En la ventana Project, pulsamos el botón y elegimos Create/Shader/PBR Graph. Si queréis conocer más acerca del PBR está es una buena guía: https://blog.teamtreehouse.com/beginners-guide-physically-based-rendering-unity Nombramos el archivo con el nombre que queráis. En este caso le llamaremos Standard_Color. Ya tendríamos nuestro primer Shader creado, vamos abrirlo. Lo seleccionamos y en la ventana Inspector pulsamos Open Shader Editor. Si todo ha ido bien, deberíamos ver esto: Dentro del Shader Editor podemos ver tres sectores claramente diferenciados: PBR Master Node: Es el nodo principal, al que acaban llegando todos los demás. Es el encargado de mostrar las características en el material. BlackBoard: Puedes activarlo y desactivarlo arriba a la derecha. Es donde creas y guardas las propiedades que necesitas usar. Encontrarás Colores, Vectores, Texturas etc… Estas pueden aparecer en el inspector del material para ser usadas más adelante. Preview: Es la previsualización actual de la entrada del PBR Master Node. Puedes cambiar el tipo de renderización pulsando el botón derecho. (Cubo, quad,sphere…) Una vez conocemos las partes vamos a añadirle funcionalidad a nuestro nuevo Shader. Comencemos añadiendo color. Vamos a abrir el Blackboard y vamos a pulsar en el +. Con esto podremos crear una variable de entre las que Shader Graph nos ofrece. En este caso elegiremos Color. Ahora podremos cambiarle el nombre, pero en nuestro caso lo dejaremos tal y como está, con el nombre Color, que al fin y al cabo es lo que será para nosotros. El toggle de Exposed indica si quieres que esa variable aparezca posteriormente en el material para ser editada de forma rápida. En nuestro caso así lo queremos así que la dejamos marcada. En Default puedes elegir el color que desees por defecto, como he dicho podrás cambiarlo después en el material pero si quieres ver como queda en el Shader Editor tendrás que cambiarlo aquí. Por último el Mode te permite establecer el color como HDR. Puedes hacer efectos realmente atractivos con esto pero de momento lo dejaremos como está. Una vez creado nuestro Color vamos a arrastrarlo hacia el Grid donde esta el PBR Master y lo soltamos. Como vemos este nodo Color solo tiene una salida, conectamos la salida con la entrada de Albedo. Si habías cambiado el color default verás que la Preview ahora aparece de otro color. Sino puedes ir ahora y cambiarlo. Una vez hecho esto pulsamos arriba a la izquierda en Save Asset y podemos cerrar el editor. Ahora solo nos falta ver nuestro shader en pantalla. Para esto añadimos una esfera a la escena y creamos un nuevo material. Le pondremos de nombre Standard_Color_MAT, por ejemplo. Una vez creado el material, lo seleccionamos y en el desplegable del Shader elegimos ShaderGraph/Standard_Color o como llamases a tu Shader. Arrastramos nuestro nuevo material y lo soltamos encima de la esfera y … Ahora podemos cambiar cambiar desde el Material el Color, ya que anteriormente lo activamos. Nodos importantes Antes de continuar el tutorial voy a explicar algunos de los nodos más usados ya que los vamos a usar más adelante. Me dejo muchos pero para esta introducción son suficientes: Math Basic: Son las operaciones matemáticas más comunes. Suma, División, Multiplicación, Resta … UV: Son nodos que actúan sobre las coordenadas de uv. Podemos rotarlas, moverlas y darle algunos efectos como el Twirl o Spherize. Veremos un ejemplo más adelante. Shapes: Son texturas generadas proceduralmente dentro del editor. Podemos crear círculos, rectángulos, polígonos etc… One Minus: es simplemente la operación 1 - x. Es muy útil como veremos más tarde, tanto que tiene su propio nodo. Noise: es un nodo generador de ruido. Veremos también su uso más adelante. Step: es un nodo que dado un valor entre 0 y 1, compara la entrada con ese valor y devuelve 0 si es menor y 1 si es mayor. Por ejemplo: si nuestro valor es 0.4, todos los valores por encima que entren en el nodo, serán convertidos a 1 y todos los inferiores serán 0. Dot: es un nodo que calcula el Producto Escalar entre vectores. Devuelve 1 si apuntan exactamente en la misma dirección, -1 si apuntan en direcciones completamente opuestas y 0 si los vectores son perpendiculares. Lerp: es un nodo que devuelve el resultado de la interpolación lineal entre las dos entradas en función de la entrada T. El valor de la entrada T está sujeto al rango de 0 a 1. Por ejemplo, cuando el valor de la entrada T es 0, el valor de retorno es igual al valor de la entrada A , cuando es 1, el valor de retorno es igual al valor de la entrada B y cuando es 0.5, el valor de retorno es el punto medio de la dos entradas A y B . Dissolve Shader Una vez conocemos los nodos más importantes, vamos a hacer un Shader algo más complejo que el anterior. Vamos a crear un efecto que disuelva el objeto haciendo que desaparezca y aparezca a nuestro gusto: Para esto volvemos a crear un nuevo Shader y le ponemos de nombre Dissolve. Lo abrimos y seleccionando el PBR Master pulsamos en el icono del engranaje. Aquí vamos a encontrar algunos ajustes interesantes como si el objeto es Opaco o Transparente. En este caso lo dejaremos como está (Opaque) y lo único que marcaremos será el Two Sided. Esto hará que el objeto pinte también sus caras internas, lo que conlleva eso sí, un coste extra. Tenlo en cuenta en el futuro, en este caso para el Cubo en cuestión, nos interesa que las caras internas también se vean cuando está disolviendo. Una vez marcado, vamos a crear algunas variables que usaremos. En primer lugar necesitaremos un valor comprendido entre 0 y 1 que se encargue de llevar el progreso disuelto. Será 0 cuando el objeto se vea por completo y 1 cuando esté completamente disuelto. Para eso en el BlackBoard crearemos un Vector1(que no es más que un simple número) y lo nombraremos como Dissolve Value por ejemplo. Para facilitarnos el trabajo, podemos cambiar el tipo de número con Mode. En nuestro caso está comprendido entre 0 y 1 por lo que elegiremos Slider y rellenaremos el min y el max con esos valores. A su vez, necesitaremos también un Color para el objeto, como en nuestro anterior Shader y un Color diferente para la parte que se esté disolviendo. Creamos ambas variables, estableciendo el Color para disolver cómo HDR si quieres que brille como el del gif (necesitarás también tener el paquete de post procesos y activar el Bloom). Por último necesitaremos un valor que indique el grosor que tendrá el dissolve. Podemos revisar el Gif para ver el grosor que tiene la parte que se está disolviendo. Creadas todas las variables en mi caso quedó así: Para el efecto de disolver necesitamos en primer lugar una textura que genere ruido donde las zonas negras indiquen lo que llevamos disuelto y las zonas blancas lo que nos queda por disolver. Por suerte, como vimos antes, tenemos un nodo de ruido perfecto para este uso: Simple Noise, asique lo añadimos. Podemos cambiar el valor de Scale del nodo a nuestro gusto. Cuanto menor sea el valor más “zoom” hará el ruido. También vamos a necesitar el nodo Step que si tenías dudas de su uso, en este caso lo vas a entender perfectamente. Ahora unimos la salida de Simple Noise a la entrada Edge del Step. Ahora podemos cambiar el valor del Step entre 0 y 1 para ver su utilidad real. Los valores de ruido que estén por debajo de ese valor devolverán 0 y los que estén por encima devolverán 1. Es decir cuando el Step sea 0 el objeto no se verá y cuando sea 1 se verá completamente. Justo lo que queremos que ocurra. Simplemente conectamos nuestra variable DissolveValue a la entrada In del Step. Para hacer pruebas vamos a colocar la salida del Step en el Albedo del PBR Master. Vamos a guardar y vamos a Añadir un cubo a nuestra escena. Crearemos un material con nuestro shader y se lo colocaremos al cubo. En nuestro material podremos cambiar el valor del DissolveValue. Como vemos el efecto se acerca a lo que buscamos, aunque tenemos dos problemas. Primero no se está disolviendo realmente ya que está pasando de negro a blanco simplemente. Y segundo que el efecto está al contrario, cuando el DissolveValue vale 0 debería verse el objeto completo y cuando está a 1 indica que el objeto está completamente disuelto. Vamos a volver a abrir el Shader Editor para solucionar ambas cosas. Primero vamos a hacer que la parte negra se convierta en transparente. Para ello simplemente tienes que conectar la salida del Step con el Alpha del PBR Master. También tendrás que activar el AlphaClip. Aunque el valor que entra por defecto es 1 tendrás que ponerle tu el valor a través de un nodo. Simplemente crea un nodo Integer (que es un número sin decimal) y conectalo a AlphaClip. Para el segundo problema simplemente usaremos el nodo que comentamos anteriormente. OneMinus. Si a 1 le restamos el DissolveValue obtendremos la parte contraria, que es justo lo que necesitamos. Si guardamos y probamos comprobamos nuestro material ahora podemos ver que funciona como queriamos. Se disuelve de blanco a negro con el ruido que creamos. Solo nos falta añadirle color. Para ello volvemos al editor. Necesitamos pintar el borde que se disuelve y a raíz de ahí lo que tengamos a un lado del borde lo borramos y lo demás lo pintamos del color normal. Una forma de encontrar el borde es sumar el DissolveValue y el borde y restar por un lado el Step de la suma y por otro el Step del DissolveValue solo. Es más fácil de entender con una imagen (para que sea más visual he cambiado el valor default del Dissolve Value a 0.5): Como vemos ahora tenemos el borde diferenciado, pero no lo estamos usando. Lo que vamos a hacer es pintar con los colores que creamos al principio. Una buena forma de hacerlo es usar Lerp. Podemos hacer que si la resta es 1(blanco) se coloree con el Color del Borde y si es 0(negro) el color sea el normal. Y esa salida del Lerp la conectamos a Albedo. Ahora podemos guardar y probar el shader. Si todo ha ido bien debería funcionar como esperábamos. Puedes cambiar a tu gusto los valores del material, como los colores o el borde. Si eres perfeccionista te darás cuenta de que si el borde es muy grande, pueden quedar algunos restos al disolverse. Esto podemos arreglarlo con un simple cambio. Sumando el valor del borde al dissolve antes de hacer el OneMinus. También podrías crear una variable para el Scale del Simple Noise. Así tendrías un valor más que podrías modificar desde fuera sin tener que cambiar el shader. Por último vamos a añadir una textura que se añada al color, así lo podremos usar en más objetos. Simplemente crea una variable de tipo Texture2D y arrastrala al grid con los demás nodos. Tendrás que sacar un nodo llamado Sample Texture 2D y arrastrar la textura a la entrada correspondiente. Luego solo queda multiplicar por el color normal y sustituirlo en la entrada A del Lerp anterior. Guardamos y desde el inspector del material añadimos la textura que queramos y habríamos terminado. No es la única forma de hacer este efecto, hay muchas otras, esta es la forma que yo usé. Espero que os sea útil. Cualquier duda que tengáis hacérmela saber y estaré encantado de ayudaros. Nos vemos en el siguiente.
  2. 5 likes
    Hola soy James Roman, tengo ya varios años trabajando con Unity, y actualmente trabajo en una compañía como desarrollador de experiencias en Realidad Virtual. Y tengo ya bastante tiempo trabajando en VRLAB. Puedes verlo desde aqui. ¿Que es VRLAB? Es básicamente una colección de componentes para interacciones en VR usando Oculus, me he enfocado bastante en las armas ya que creo que es una de las cosas mas divertidas de probar en la Realidad Virtual, he incluido diferentes tipos de armas, escopetas, armas automáticas, revolver, arco y flecha, espadas. También diferentes tipos de recarga para estas armas, puedes cambiar manualmente el cargador a cada arma cuando este se agote, recargar usando diferentes tipos de gestos como en dead and buried, puedes recargar el revolver haciendo un giro rápido con la mano. - Armas - Como ya he mencionado he trabajado bastante el tema de las armas con un completo sistema de armas, varias armas ya incluidas (Escopetas, revolver, Automáticas), puedes tomar las armas existentes como base para crear las tuyas, o crear nuevas armas desde 0. - Completo Sistema de Interacción - También posee un completo sistema de interacción, muy extensible, puedes tomar objetos, interactuar con objetos, mover palancas, botones etc, crear animaciones de interacción diferentes para cada objeto, y diferentes comportamientos incluso para cada mano. - Arco y Flecha - Posee un arco realista con el cual puedes lanzar flechas, puedes tomar una flecha de tu espalda o simplemente tomar una que ya hayas lanzado, estas se pegan a los demás objetos de una manera bastante realista. - Diferentes Modos de Recarga - Posee diferentes formas para poder recargar las armas, puedes cambiar el cargador una vez que este se haya acabado, o simplemente realizar gestos con la mano como en dead and buried para recargar tus armas o simplemente tener munición infinita. - Sistema de Combate Cuerpo - En VRLAB puedes tomar un par de espadas y luchar contra los enemigos, los cuales responderán correctamente a las físicas, ademas de eso puedes golpear a los enemigos con tus armas, como con el arco o una escopeta si no tienes munición. - Botones y Palancas - Botones y palancas que responden correctamente a las físicas, desde las distancia puedes activar una palanca con un disparo o simplemente lanzando un objeto. - AI - Aunque el fuerte de este asset no esta en la AI, he añadido unos ejemplos bastantes interesantes y extensibles para trabajar con estos mismos. - Character Controller y Teleport - Tienes diferentes formas de moverte en VRLAB, la mas común quizás moviéndote alrededor con el joystick o usando un sistema de teleport muy parecido al de roborecall. Todo esto en prefabs bien organizados listos para tomar y soltar en la escena, con montones de posibilidades de modificación mediante el inspector, de igual manera me he esforzado para crear un código legible y placentero a la vista, así que si quieres simplemente entrar y mirar como esta hecho todo, y aplicar tus propias modificaciones mediante código, no debería ser muy difícil para alguien que tenga ya su experiencia con Unity. - Futuras Actualizaciones - - Añadir nuevas armas, entre ellas un lanzacohetes. - Sistema de inventario, para que puedas cargar varios objetos a la vez. - También cabe destacar que me gusta roborecall, y quizás añada algunas de sus funciones, entre ellas la posibilidad de tomar balas en el aire y devolverlas a los enemigos. - Luego simplemente escucharlos a ustedes y seguir mejorando. Dejo nuevamente el link al assetstore aqui, si lo pruebas no dudes en dejar un review para seguir mejorando, y si quieres contactar conmigo directamente puedes escribirme a james@unity3dninja.com finalmente los dejo con algunos vídeos cortos mostrando distintas funcionalidades.
  3. 5 likes
    Hola. estoy terminando uno de mis proyectos. se trata de un juego de naves, un matamarcianos (shoot'em up)... con toques de rouge lite. Falta terminar los modos de juego extras (modo arena, modo survival, y modo bossRush). El modo historia esta acabado, con 25 escenarios y 10 escenas especiales.... no es necesario pasar por todas para llegar al final, puedes elegir multiples caminos. (no es lineal). De momento tiene mas de 30 enemigos diferentes (contando los bosses). 16 skills diferentes (armas secundarias) y multiples mejoras para la nave. Banda sonora original con mas de 40 temas. A ver que os parece... vuestros comentarios seran bien recibidos. trailer gameplay: special scenes trailer: boss trailer:
  4. 5 likes
    Buenas, si alguien lo recuerda, este juego lo empece hace mucho, lo deje abandonado y no pude resucitarlo al tratarse de versiones tan antiguas de Unity. Actualmente estoy haciendo un reboot, de momento y a modo de demo técnica, os muestro este pequeño video de ejemplo:
  5. 4 likes
    Acá les dejo el twitter de este señor: https://twitter.com/tuxedolabs?lang=es Sus videos y artículos son muy buenos, 100% recomendado. Tiene proyectos que integran: Geometría compleja basada en mini voxels (más tirando a átomos que al cubo de minecraft). Físicas rígidas, blandas, flexibles y de flotabilidad. Partículas, Iluminación completamente dinámica. Destrucción. Audio (para manejar todo el tema de las físicas + destrucción). Shaders. Efectos volumétricos. y más :) ... Realmente impresionante, se me hace que este tipo va a quebrar la internet en unos años. Les dejo algunos tweets: El juego que está creando (muy linda idea): Esas partículas :P
  6. 4 likes
    ¡Buenas! Este finde avancé un poco en mi experimento de carreras en TuCiudadTM. La idea es poder generar una escena aproximada de cualquier parte del mundo, y lo que hago aquí es generar la geometría desde OpenStreetMaps. Ésta es la primera prueba: La gracia, se supone, sería poder correr por tu ciudad, o hacer misiones que te envíen a sitios conocidos. Si hay algún vigués, quizá pueda reconocer la zona centro (alameda, arenal...)
  7. 4 likes
    Mira que fue una chorrada que se me ocurrio y es lo que mas exito tiene y mas gracia le hace a la gente. Gracias Pere por tus animos, quizas cuando crezca un poco el bicho pueda dedicarle algo de tiempo hacwr videojuegos, pero ahora lo veo complicado. Mas que por el niño por el trabajo, en el anterior si no habia incidencias el fin de semana podia llevarme el portatil y dedicarle tiempo a los videojuegos. Espero que a lo termines y verlo por aqui para probarlo. Os dejo otro gameplay muy gracioso de um chino, esta to loco!! Saludos!!
  8. 4 likes
    GUÍA TUTORIAL PARA JUEGOS CON ENTORNO 3d PARA MÓVIL Buenas gente mi nombre es Javier García, el desarrollador del juego de Bramson Case, (esperemos que próximamente en las plataformas , que ya me queda pokito^^’). Debido un comentario que me hizo Pioj en uno de los hilos, me he animado a preparar un post para explicar algunas cosillas desde mi experiencia y punto de vista que he aprendido estos años con el proyecto que llevo entre manos. Lo primero vamos a comentar son algunas cosas a tener en cuenta antes de empezar nuestro proyecto, ya sea tanto para móvil, como para pc, aunque en este post luego lo enfocaremos a la preparación de juegos en 3d para las plataformas de móvil ya sea en primero o en tercera persona. CREACIÓN DE UN GRUPO TRABAJO. Tenéis que tener en cuenta que aunque parezca fácil, la típica frase de..“VOY A HACER UN VIDEOJUEGO Y ME VOY A FORRAR” eso lleva una carga de trabajo impresionante que nunca se suele tener en cuenta al empezar el proyecto. (lo digo por propia experiencia y ya veremos lo de me voy a forrar xD) -Ilustraciones -Texturizado -Modelado 3d -Guionistas -Programación -Betatesters -Música -Marquetin -Etc.etc.. (A mi manera de ver, a no ser que sea un proyecto pequeño que puedas cumplir en un par de meses como mucho, intenta montar un grupo de trabajo, ya que en un par de meses suele comenzar la cuesta arriba y empiezan a aparecer todos los problemas que no tuviste en cuenta cuando dijiste esa mítica frase, tanto personales como a nivel del juego). Ya se que puede parecer algo pesado esta intro de post, pero lo considero bastante importante. Y con esta pequeña presentación, vamos a ponernos con el tema.:D --------------------------------------------------------------------------------------------------------------- Para una explicación mas sencilla vamos a separarlo en dos bloques, como he comentado anteriormente esto esta enfocado para las plataformas de móviles (concreta-mente en entornos 3d, aunque algunos conceptos también se pueden aplicar en otras plataformas). -BLOQUE 1 (Modelado, Texturas, Iluminación, Consejos) -BLOQUE 2 (Menús Básicos) BLOQUE 1 (modelado, texturas, iluminación, consejos) COSAS A TENER EN CUENTA ANTES DE COMENZAR EL MODELADO. -No existe ninguna formula mágica para una optimización perfecta. Como indicamos no existe ninguna forma concreta de optimizar el juego para sacar el 100 del rendimiento, en plan... si pongo las texturas en modo móvil, y pocos polígonos en el modelado, me va a ir todo fluido.(desgraciadamente eso no funciona así ). Unity tiene múltiples maneras que puedan ayudar a una buena optimización en el compilado, pero esas opciones de menú (que explicaremos mas abajo) son ayudas muy generalizadas, una buena optimización implica un bueno modelado desde un principio, tanto de personajes, como escenarios, acorde a lo necesitemos en cada momento. Buen modelado + buen ajuste en los menús = todo va de puta madre :D Por poner un ejemplo la imagen puesto a continuación es el exterior de la mansión Bramson donde se desarrollara el juego que llevo entre manos. (No solo la mansión esta completamente amueblada, si no que dentro de esta misma escena hay otra mansión de 2 plantas, también totalmente amueblada y algunos eventos especiales que también están cargadas en la misma escena, por lo que si se plantean bien las cosas desde un principio se pueden conseguir los resultados deseados.) Olvidaos de detalles hiper realistas en los gráficos. Tenemos que tener en cuenta que vamos a realiza un juego para móvil y el procesamiento y los recursos de un móvil son muy limitados comparado con un pc de sobremesa, en este caso tendremos que tener en cuenta algunos conceptos básicos al modelar. 1-MODELADO Intentar siempre modelar en medida de lo posible en low-poly, dándole algún detalle mas a los objetos que puedan estar mas próximos a la cámara, por ejemplo. (Si en un decorado tenemos una montaña al fondo del escenario que nunca vamos a llegar en el juego, es una tontería detallarla con muchos polígonos y darle una textura a mucha resolución, ya que en un móvil no se va a apreciar ese tipo de cosas, pero si se apreciar en los objetos del escenario que estén mas próximo a la cámara) 2-DETALLE DE ESCENA Una de los trucos mas comunes es usar algo mas de detalles donde el jugador vaya a fijarse en el proceso del juego, este ejemplo es muy básico, si tenemos un folio con un punto negro en medio, el ojo humano por norma general suele enfocar la vista en el. (En la imagen puesta a continuación se aplica la misma teoría, el personaje tiene una textura muy básica y algo menos detallada que la cara, que literalmente la cara es una fotografía, por lo que al haber algo mas detallado en ese momento, te sueles fijar mas, otra cosa es que alguien se fije en algo mas concreto como algún detalle en la ropa.. pero eso no suele ser común, a no ser que estés también en el mundillo para percatarte de esas cosas, o que lleves 2 meses buscando la típica puta llave que te tiene atascado y ya miras hasta en debajo de las piedras). 3-COLLIDER Un tema delicado, esta sección para mi bastante importante y a tener muy en cuenta a la hora de preparar la escena en el Unity, como sabréis para los polígonos de los modelos en unity existen varias maneras de meterle los collider a los objetos, ya sea para crear alguna activación de un evento o para bloquear el paso del personaje y evitar de esta manera el clipeo. Intentar usar exclusivamente los collider mas básicos, a ser posible todo cubos o planos, olvidaros de los mesh collider (ya se que es automático y mola mucho), eso al principio parece que no consume mucho recurso pero conforme vaya creciendo el proyecto, la cosa se desmadra muy rápidamente, a continuación os pongo un pequeño ejemplo de una de las salas de la mansión. 4- EXPORTAR MODELOS A UNITY (OBJETOS PRE-FABRICADOS) Un de los errores mas comunes que suele haber a la hora de exportar, es exportar todo el conjunto creando un único prefabricado, teniendo en la escena objetos iguales como pueden ser libros, sillas, etc. Para poder explicar esto bien vamos a simplificarlo al máximo en un par de imágenes, ya que es algo mas complejo pero de esta manera se quedara la base mas clara. -En la imagen 1 hemos creado 4 sillas y las hemos exportado a Unity ya sea en FBX, OBJ o el formato que sea. Como podemos ver al pasarlo a Unity nos a creado 1 único prefabricado con las 4 sillas de 400 polígonos, ese calculo se queda guardado en memoria y si repite el prefabricado en algún otro sitio usara el dato en memoria. -En la imagen 2 como la silla que vamos a usar es igual que las otras, la exportamos independientemente y luego copiamos el prefabricado, hemos conseguido el mismo resultado y nos hemos ahorrado el calculo de 300 polígonos. (aunque parezcan pocos polígonos, recordar que es un juego para móvil, todo lo que podáis ahorrar en una parte, podréis meterlo en otra cosa, o pensar que si tenemos 50 sillas en todo un decorado no son 300 polígonos… 50x100 con 5000 polígonos, comparado con 100 la cosa ya cambia bastante mas ) 5-SHADER ,TEXTURIZADOS Bueno aquí si que hay para gustos colores, ya que hay muchísimas variedad para jugar en esta sección, simplemente me centrare en comentar mi opinión personal y ya cada uno que sopese las opciones, yo en mi caso he usado el shader standar, evitando en medida lo posible usar el shader para móvil, ya que si a malas tengo mucha perdida de fps siempre tendré la opción de pasar todas las texturas a los shader de móvil para ganar algo mas de optimización, para la resolución de las texturas he ido jugando 2048 para objetos mas detallados y cercanos, y 1024 para cosas mas de fondo. -Que tenemos que tener mas en cuenta de un shader estándar, para un juego 3d para móvil. De todas las opciones que podemos ver en la imagen vamos a centrarnos en las mas importantes de mi punto de vista ALBEDO (diffuse para algunos programas) -Este es el color base de la textura, ya sea JPG, BMP, Etc.. (Al ser un juego para móvil intentar que sean todas las texturas en jpg no mas grandes de 2048) METALLIC (Specular par algunos programas) -Esta textura es el brillo que puede tener un objeto al recibir un punto de luz. (Aquí tenéis que llevar mucho cuidado si se usa esta textura, tener en cuenta que no existe en la vida real un objeto que tenga brillo perfecto en toda su superficie, debido a la suciedad, el desgaste, o mil imperfecciones que pueda tener, por lo que el objeto necesitaría una textura para que quede bien y un punto de luz en “tiempo real” para que haga un buen efecto, por lo que es un gasto de procesamiento enorme que a veces no merece la pena meter) NORMAL MAP -Esta textura lo que crea es un capa nueva encima de la textura albedo que le da relieve, dándole un detalle al modelo de low-poly haciendo que parezca que tiene muchos mas polígonos teniendo la base de low-poly. (Aquí realmente no he hecho muchas pruebas para el juego ya que me centrado mas en otras cosas, me imagino que si es solo para darle detalles a algunos objetos en concreto no quedara mal, pero sinceramente no se lo que puede llegar coger de los recursos del móvil, pero me imagino que bastante) REFLECTIONS -Como su nombre indica son los reflejos de un objeto como puede ser un espejo, el reflejo del agua, etc… (Para un juego de móvil yo no me centraría en usarla, a no ser como siempre comento que sea algo muy… muy concreto y pequeño, no poneros ha hacer rascacielos de cristal que se reflejen entre si, que vais a poner el móvil para que se puedan freír huevos). 6-ILUMINACIÓN Este para mi es el tema mas importante y el primero que se tiene que tener en cuenta para realizar nuestro proyecto, debido a que es algo complejo ya que hay menús involucrados los voy a dejar para el final, con los menús correspondientes para explicarlo lo mejor que pueda. ALGUNOS CONSEJOS COSAS PROHIBIDAS A TENER EN CUENTA. -Cosas que tenemos que intentar evitar en medida de lo posible, ya que esto para un juego de móvil hace que la cosa se pueda ralentizar de cojones… hablando en plata. 1-Texturas con canal Alpha, como la gente conocerá y si no lo comentamos, hay algunas texturas como puede ser el PSD, TIF , PNG,etc.. que contienen información para crear desde el mismo archivo una transparencia a la textura, se puede encontrar mucho en hierbas, las hojas de los árboles, etc.. Esto ayuda mucho al modelado 3d (para los juegos de pc),porque poniendo un par de planos bien colocados podemos conseguir unos buenos detalles, pero el problema es que el procesamiento en un móvil para estas texturas es muy… muy limitado y aunque para pc sea una ventaja, para móvil suele ser una desventaja y un gasto de recurso brutal. (En mi caso este es uno de los árboles, como se puede ver tiene el tronco y 8 texturas en PNG que tienen el canal alpha, pues si no me equivoco hay 8 árboles enfrente de la mansión y cada vez que se mira hacia los árboles me da una bajada importante, por lo que intento desactivarlos cada vez que puedo). Vamos…que la primera vez que los puse entre 20 y 30 para dejarlo mas bonito, al girarme en el juego se me peto el movil por completo y creo que hasta me soltó un…Pero tu estas flipando chaval . COSAS ACONSEJABLES A TENER EN CUENTA. 1- Acostumbraros a que cuando carguéis un objeto, revisar lo que habéis exportado, ya que al exportar un objeto puede haber cosas activadas que si no me equivoco pueden darle una sobrecarga innecesaria al prefabricado. 1-MODEL En la sección de Model ya cada uno que lo ajuste a lo que necesite. 2-RIG Aquí por el momento lo dejare para otro post si la gente lo ve bien ya que esto hay que explicarlo desde el programa 3d también. 3-ANIMATION Si el modelo no contiene animaciones esto desactivado. 4-MATERIAL Aquí hay algunos formatos que exportan las textura y se la aplican al modelo directamente, a mi me gusta desactivar esto y poner yo la textura en el Unity, pero eso ya son manías mías, me imagino que si esta bien configurado no importa mucho. DESACTIVAR LOS OBJETOS QUE NO SE VEAN EN CÁMARA. -Aquí simplemente comentar un par de detalles, cuando preparéis el inicio del juego intentar desactivar todos los objetos que no se vayan a usar nada mas empezar, ya que todos los objetos desactivados no cargan sus scripts, por lo que nos ahorramos bastante procesamiento de primeras, y ya cuando los vayáis necesitando los vais activando poco a poco. (Yo en la escena solo dejo el charácter controller y seguido un script de precarga que me activa la zona de inicio, todo lo demás esta desactivado de primeras). SCRIPTS (UPDATE & START) Intentar no usar muchos scripts que tengan codigo dentro del void Update y optimizar la sección de void Start todo lo que podáis. (Aunque parezca que no hace nada, todos las secciones de “ void Update y void Start “ que suelen salir de base en los scripts, si van a estar vacíos, los borráis por completo, porque aunque no tengas nada dentro si están en el script, ya se gasta un mínimo de recurso en checkearlo y si no están nos ahorramos ese chekeo, sobretodo el update. Y ya con esto pasamos al bloque 2, este bloque es mucho mas cortito que ya se me esta haciendo muy largo esto y no quiero extenderlo mucho mas ^^’ -BLOQUE 2 (Menus Basicos) Hay varios menús básicos que tenéis que revisar para ir aprendiendo a gestionarlos y mejorar la optimización del juego, por el momento comentare lo mas básico de cada uno, pero estos menús hay que aprendérselos bien para poder jugar con lo comentado anteriormente. Buen modelado + buen ajuste en los menús = todo va de puta madre :D (Tener en cuenta que estas opciones, son opciones generales y afectan a todo el juego cuando se compila, es como si fuera un limite, si tenemos una luz con una sombra super ultra realista, y en este menú ponemos que las sombras son super ultra low, se pasara a los parámetros super ultra low del menú al compilarlo). -MENU DE QUIALITY En este menú se controla y se configura que calidad y que modos dispondrá el juego. Por ejemplo: PC : BAJA, MEDIA, ALTA, UTRA. IOS : BAJA, MEDIA. ANDROID : BAJA, MEDIA, (y en cada opción su configuración claro esta) (para juego de móviles, la opción de “ V Sync Count “ es el demonio en persona, eso es lo primero que tenéis que quitar). -MENU DE GRAPHICS Este es otro menú a echarle un ojo también, poco a poco tendréis que ir aprendiendo a gestionarlo para sacarle punta en las compilaciones para móvil. -MENU OCCLUSION Este menú es para acelerar el procesamiento de la cámara, prácticamente lo que hace es desactivar (las caras de los polígonos, collider,etc..) que están fuera de la visión de la cámara, ayudando al procesamiento del escenario. -LIGHTING y MENU LIGHTING Y por fin llegamos a la ultima parte, que me la he dejado para el final porque la considero de las mas importantes. Este menú controla las luces generales de la escena. -Environment Propiedades de entorno. (En este menú se controla una iluminación global que afecta a toda la escena, dándole el tono que necesitemos a todo el decorado) en mi caso suelo darle un color base y ya voy jugando con los shadowmask. (shadowmask se explicara mas abajo) -Realtime lighting Iluminación que se aplica en general a toda la escena como bien pone en tiempo real. (esto en medida de lo posible intentar no usarlo, se puede conseguir casi los mismos resultados jugando un poco con los puntos de luz) -Mixed Lighting Calculo de las luces en modo bake. (Bueno… esta es la opción mas a tener en cuenta para conseguir una buena optimización y buenos resultados de iluminación para nuestra escena, muy… pero que muy importante, aprender a configurar esta parte del menú) De las tres opciones me enfocare exclusivamente en el shadowmask que es el que mejor resultado nos puede dar. Lo primero que tenemos que conocer a la hora de iluminar nuestro decorado, es que lo que mas recurso puede llegar a consumir en un entorno 3d es la iluminación, por lo que un exceso de puntos de luz sobrecargaría todo el procesamiento, ya sea por el radio de la luz en si, como por las sombras que puede llegar a generar. Debido a esto toda la iluminación en Unity tiene 2 opciones. -Realtime (como bien indica, es una iluminación en tiempo real del punto de luz, con todo lo que eso con lleva). -Bake (El bake es la opción de decirle a Unity que genere una textura que se aplicara a todos los objetos que interactuan con dicha luz, creando en la textura todas las sombras que se supone que tendría general el punto de luz, de esta manera se ahora el procesamiento en tiempo real, acelerando bastante el procesamiento del decorado). Esto es un pequeño ejemplo de la sombra de una farola en modo bake (Shadowmask) También comentar que esto tiene sus pro y sus contra. -Pro: Ayuda en el procesamiento del calculo de iluminación de los punto de luz. -Contra: Lo malo que tiene el bake, es que solo se puede aplicar a objetos estáticos. (Aunque como siempre digo, todo es cuestión de saber jugar con los menús, vamos a poner el ejemplo del típico juego de terror en una casa con una linterna). -Iluminación Environment : luz azulada muy oscura para dejar intuir el escenario (MODO BAKE) -Iluminación decorado : algunos puntos de luz con sus sombras en algunas lámparas, el televisor, etc, etc..(MODO BAKE) -Iluminación de linterna : le damos un punto de luz que no tenga mucho radio y las sombras en calidad media, para ir iluminando por donde vaya mirando el personaje (MODO REALTIME) Lightmapping Setting Esto son las propiedades textura que crea el modo bake. (Importante saber gestionar este menú para darle la calidad que queremos a los shadowmask). -Other Setting Como bien indica el menú, niebla y los halos. -------------------------------------------------------------------------------------------------------------------------------------------------- -Bueno señores, por el momento con esto ya se despide un servidor, espero que no se haya echo muy pesado el post, porque creo que me he emocionado un poco de mas y no soy de escribir mucho xD. Si lo veis bien, lo iremos puliendo con el tiempo, agregando y organizando poco a poco las secciones que falten por explicar, para que podamos tener un buen post de ayuda para la comunidad sobre este tipo dudas.
  9. 4 likes
    Es un pequeño juego 2D creado para la JAM de UnitySpain. Tienes que guiar al personaje por el bosque hasta que llegue a casa. El juego es tranquilo, se trata de ir encontrando los diferentes caminos y esquivar los peligros que se encuentra como los lobos o las lanzas. Creo que le dedique mas o menos unas 16 horas, y estoy contento con el resultado, tanto que me quedo con el proyecto para irlo evolucionando poco a poco, ya ire compartiendo los cambios y los "improvements". Cualquier idea, o crítica, que querais aportar sera muy bienvenida. Por ahora esta disponible en itch.io: https://uadla.itch.io/way-home
  10. 4 likes
    He encontrado esta enorme fuente de información googleando a cerca de mesh deformation, y wow, que mérito tiene la persona que hizo esto. https://catlikecoding.com/unity/tutorials/
  11. 4 likes
    https://connect.unity.com/p/spriteanimator-2d-tool Completo sistema para trabajar con Sprite Sheets Visitar en Assets Store https://assetstore.unity.com/packages/tools/sprite-management/spriteanimator-153405
  12. 4 likes
    Buenas! Soy Rodrigo, como ya dije en el post de presentación tengo un canal de YouTube y subo videos de forma gratuita y sin publicidad. Hoy subí un nuevo vídeo, el último de la serie sobre el sistema de eventos en Unity. El mismo tiene la capacidad de enviar eventos a cualquier GameObject (incluso si se instancia en modo dinámico), pasar múltiples parámetros y castearlos con la ayuda de Generics y ahora finalmente enviar eventos a objetos específicos. Si les interesa les dejo el enlace: Saludos!
  13. 4 likes
    Creo que todos los niños de mi época han visto la película Twister al menos una vez. Claro que no era perfecta pero dió a conocer por el mundo a los cazadores de tormentas. A mi me encantó... Me llamo Manuel, vivo en Madrid y desde ese momento me empecé a interesar por los tornados. Hace unos tres años, iba por Castilla La Mancha con el coche en pleno verano y vi unos cuantos remolinos de polvo (dust devil en inglés) debido a la tierra caliente y pensé.... "con lo que molan los tornados, qué raro que no haya ningún videojuego sobre ellos". Acababa de publicar mi primer juego en Steam (City Z) y decidí empezar a probar tornados en Unity 3D para ver si había algún potencial. Tan sólo encontré una demo visual que me gustó y empecé a modificarla añadiendo física y mejores efectos. En ese momento me pareció bastante impresionante y decidí crear el primer videojuego (que yo sepa) sobre cazadores de tormentas. Desde entonces, el juego ha evolucionado muchísimo cómo habéis podido ver en el vídeo y creo que ya ha llegado a la calidad suficiente para poder ser lanzado en acceso anticipado en Steam. Queda mucho por mejorar o añadir pero el núcleo del juego ya parece bastante divertido. Características del juego: Modos de juego - Misiones en solitario para aprender las bases del juego - Multijugador online 1 vs 1, 2 vs 2 or 4 vs 4 para jugar contra otros cazadores de tormentas - Tipos de juego variados: Fotografía, Brote de tornados, Controla el tornado... etc. Entorno - Física realista de los tornados con fuertes vientos y destrucción de objetos cercanos - Mapa grande y detallado inspirado en los paisajes de la Tornado Alley - Condiciones climáticas cambiantes y distintas horas del día Gameplay - Algoritmo complejo para evaluar la calidad de las fotos: distancia, focus, escombros visibles... etc. - Distintos coches equipados con radares meteorológicos para medir la actividad de las tormentas - Pods de monitorización para medir la velocidad del viento y su dirección en el suelo Otros - Galería de imagen para gestionar tus fotos y compartirlas en Steam - Emisoras de radio FM modificables para que escuches tu radio favorita en el coche - Posibilidades de ver vacas volando Poco más, éste es el enlace del juego en Steam: Ficha del juego en Steam El lanzamiento en acceso anticipado está previsto para principios de junio y ando retocando cosillas y arreglando errores. Pues nada, aquí me despido, muchas gracias por vuestro interés y no dudéis en comentar dudas o sugerencias. Os dejo con una captura de pantalla que he tomado ayer para que veáis los últimos avances en cuanto a representación de las superceldas:
  14. 4 likes
    Hola, ahora que he empezado el proceso de subir un segundo juego a la playstore le he encontrado utilidad a los post que escribí al subir el primero, ya que me están facilitando mucho el trabajo. Os dejo los enlaces con una pequeña explicación y espero que puedan ser de ayuda a todos aquellos que hacen sus primeras subidas a la tienda de Google. Como subir un juego a la playstore. Aparte de describir el proceso, se indica lo que tendríamos que tener preparado previamente, como los iconos, o una descripción corta y una larga, pantallas, un vídeo… Como firmar un apk de unity para subirlo a la play store. Lo más importante: NO PERDÁIS NUNCA DE LOS JAMASES LA FIRMA. Incorporando Google logros con Google Play Services. Aparte de publicar el juego creo que es una buena idea aprovechar las diversas posibilidades que nos ofrece Google, los logros es una de ellas, y pueden ayudar a motivar al jugador. Como crear un tablero de puntos para Unity con Google Leaderboard. Otro de los servicios que nos ofrece Google y podemos aprovechar: el tablero de puntos! Són post muy simples, donde se explica el proceso más sencillo. Por ejemplo en el de subida no pasamos por Alpha y Beta, ni creamos un grupo de usuarios Betas. Espero que sirvan a todos aquellos que suben su primer juego! Suerte… y a por los Euruuuuuuus!!!
  15. 4 likes
    Si simplemente vas a activar y desactivar un gameObject puede hacer lo siguiente. [SerializeField] private Transform m_torchObject = null; public bool TorcAble = true; private void Update() { if (Input.GetKeyDown(KeyCode.F) && TorchAble) { m_torchObject.gameObject.SetActive(!m_torchObject.gameObject.activeInHierarchy); } } Lo que está haciendo este código es tomar el valor actual de Active Hierarchy del GameObject (m_torchObject) y lo asigna con el valor booleano negativo al actual. Cuando comparas variables booleanas deberias de hacerlo de la siguiente manera. private bool MyBool = false; private void Update(){ //Comprobar si es verdadero if(MyBool){} //Comprobar si es falso if(!MyBool){} } Por esta razón si tienes un valor true y le agregas este signo al inicio (!) obtendrás el valor opuesto. Saludos.. el hombre de LAS scripts...
  16. 3 likes
    WIP. (8/12/19) español: Hola gente! estoy desarrollando un sistema procedural, para la creación de edificios de polígonos bajos. actualmente el sistema cuenta con: - creación de estilos nuevos. - opción para agregar o quitar guías de puntos y lineas. - selección de estilos para dibujar. - menú interactivo de muestra para los estilos creados. - selección de texturas para las paredes y el tejado. - modificación de texturas (escala y posicion). - altura base del modelo. - altura total del modelo. - generar o borrar el tejado. - creación, eliminación y manipulación de nodos. - menú interactivo para crear o eliminar el estilo seleccionado, y eliminar el modelo actual en el que estas dibujando. en manos de un buen diseñador, esta podría ser una gran herramienta! ¿que opinan al respecto? espero que les guste esta idea! https://www.youtube.com/watch?v=RnpPpRkUDpk
  17. 3 likes
    He estado experimentando con los túneles y puentes. En realidad tendré que reescribir varias partes para poder mejorar esto, pero me ha servido para ver la problemática..
  18. 3 likes
    Primero un cuento corto: Me he decidido por al fin subir algunos assets al asset store (de los tantos que tenía, actualmente 3, Kinematic2D, GrabIt y LaserMachine) , pense "bueno esto es fácil, me registro, doy subir al asset store y probablemente dos días después me llegue un mail diciendome gracias por su tiempo Sr. Lightbug" bueno, no fué del todo así, pero después de medio mes de malabares, curso autodidacta intensivo de html+css (duración 1 día) y algunas luchas con Unity Connect acá estoy . ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ASSET STORE ----> Kinematic 2D DEMO ---> DemoWebGL DESCRIPCIÓN Kinematic2D es un controlador de personaje 2D Totalmente Kinematico (no basado en físicas) que te permite realizar el movimiento de tu personaje 2D mientras se encarga de manejar las colisiones correctamente. Basicamente ofrece las funcionalidades del Character Controller (Componente) que viene por defecto con Unity (y más), pero con tres grandes diferencias: Está preparado para movimiento bidimensional (de aquí el 2D) La forma del cuerpo del personaje es una caja (en vez de una capsula, esto es genial para platformers) Funciona con colliders 2D y 3D (Ej: colliders de sprites y 3D mesh) El principal objetivo de este asset es darte la posibilidad de que tú construyas encima un controllador de movimiento del personaje (Ej maquina de estados, habilidades, etc), sin preocuparte por la parte aburrida de las colisiones, así te puedes enfocar en el diseño y mecánicas de tus personajes ... lo divertido! .. para más info --> ir al link del AssetStore -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- PD: Después de haber creado (creo que por primera vez) un hilo en el foro oficial de Unity debo decir, que UnitySpain está años luz adelantado, en todo aspecto, volver aquí es como dejar de usar el intel pentium 2 para subirte a i7 realmente, (y ni hablemos del código) ... felicitaciones @pioj
  19. 3 likes
    Hola amigos Hoy les vengo a hablar de un pequeño proyecto realizado en unity y de la experiencia que he tenido en el camino, se trata de un juego clásico en el que el objetivo principal es ordenar los números del menor al mayor, me he tardado unos 6 meses en terminarlo ya que solo le invertía una o dos horas al día, y en ocasiones hacía pausas y tardaba más de una semana en retomarlo, cosa que es frustrante al querer volver a agarrar el hilo de lo que llevabas, pero bueno, al fin lo he terminado y publicado en la play store. Este es el enlace para quien quiera testearlo y darme su feedback, de verdad se lo agradeceria mucho. Chaos of Numbers Una de las cosas en las que más me he tardado, es el diseño, soy pésimo en ello, y aunque no estoy convencido 100% con el producto final, tenía que lanzarlo pues para ser un pequeño proyecto ya llevaba mucho tiempo. Estas son un par de impresiones de pantalla del juego, espero y tengan la posibilidad de probarlo. Nota: El juego soporta los idiomas español e inglés
  20. 3 likes
    ¡Hola! Os traigo uno de mis assets gratis más descargados: Basic Motions Pack. Se trata de un pack de animaciones 3D de movimiento básicas para que las apliquéis a los personajes de vuestros juegos y apps. Asset Store Link (Gratis) Lista de animaciones: - Idle01- Idle02- Idle01 - Idle02 (transición)- Idle02 - Idle01 (transición)- Jump (inicio - en el aire - aterrizar)- Caminar- Correr- Correr hacia atrás- Sprint Totalmente gratis y lo podéis usar en cualquier tipo de proyecto, incluso comercial. Cualquier duda o sugerencia: contact@keviniglesias.com Más assets como este: www.keviniglesias.com Asset Store Publisher Vídeo de muestra con algunos ejemplos:
  21. 3 likes
    Vertex Displacement Este ejemplo servirá de introducción para el desplazamiento de vértices. Vamos a crear un nuevo shader, con su material correspondiente y lo vamos a aplicar en una esfera añadida a la escena. Colocamos la esfera visible para la cámara y comenzamos. Para el desplazamiento de vértices vamos a usar la primera de las entradas del Master Node, ya sea el PBR Graph o el Unlit Graph. Para este ejemplo usaremos el PBR Graph pero es indiferente. Para poder mover los vértices, simplemente tenemos que usar el nodo Position para saber la posición y sumarle el desplazamiento. En este caso usaremos un desplazamiento en dirección a su Normal. Tendremos que asegurarnos de que el espacio en el que estamos trabajando está en relación al objeto y no al mundo. Esto podemos configurarlo en la variable Space del nodo. Con esto tendríamos un desplazamiento simple de los vértices. Pero es un desplazamiento constante, vamos a añadirle ruido y movimiento con los nodos Noise y Time que vimos anteriormente. Ahora tenemos un efecto mucho mejor. Pero el movimiento está basado totalmente en el ruido que obtenemos, sin tener en cuenta cual es la posición actual del vértice. Para que tenga en cuenta la posición del vértice y se modifique en función de esta, simplemente sumamos a la Posición el Tiempo y lo conectamos con el Ruido. Ahora hemos conseguido el efecto que queríamos. Cada vértice se mueve en función de su posición y del ruido que generamos. Si queremos cambiar la intensidad podemos usar el nodo Remap. Este nodo dado un valor mínimo y máximo de entrada, interpola el valor entre dos valores de salida mínimo y máximos. Por ejemplo en este caso, la salida del Simple Noise está entre 0(negro) y 1 (blanco). Estos dos valores serían la entrada al Remap. Si los valores de salida fueran 0 y 10, en los valores en los que el ruido entrase con valor 0.7,saldría interpolado entre 0 y 10, es decir saldría como 7. Como vemos, ahora el efecto se intensifica en función de la salida que establezcas en el Remap. Recuerda guardar las variables en la Blackboard para poder cambiar los valores desde el propio material posteriormente. Para acabar podemos hacer lo que queramos con el color. Podríamos simplemente asignarle una textura o crear un portal como en los anteriores casos. En este caso para no alargarlo, vamos a usar un simple Voronoi junto a un Color para dar el efecto que vimos en el gif. Es prácticamente lo mismo que hicimos en el anterior shader, colocamos el Lerp y le seteamos los dos colores. Espero que os sea útil y cualquier cosa no dudéis en preguntar.
  22. 3 likes
    Portal Effect El siguiente efecto es un portal muy simple inspirado un poco en la serie Rick and Morty: Para este efecto, a diferencia del anterior, vamos a crear un Shader Unlit Graph. La diferencia es que el PBR Graph incluye cálculos de iluminación avanzados entre otras cosas, cosa que el Unlit no. Este nodo Master como vemos, sólo tiene entradas para color y alpha. Una vez creado el shader, vamos a añadir un Quad a la escena con un nuevo material con nuestro shader. Colocamos la cámara para poder verlo y hacemos el Quad del tamaño que desees hacer el portal. Podrás cambiarlo posteriormente. Una vez creado abrimos el shader. Lo primero que queremos es crear una máscara circular para darle el efecto ovalado y no tener el rectángulo actual. Esto es simple, simplemente creamos un nodo de forma tipo elipse(Procedural/Shape/Elipse). Cambiamos el tamaño a 1 en ambas dimensiones y colocamos la salida del nodo en el Alpha del Master. Como en el anterior shader, sacamos un integer del AlphaClip y lo colocamos a 1. Si guardamos y probamos podemos ver que ahora es una elipse en vez de un rectángulo (cambia el color en el Unlit Master directamente si no lo consigues ver). Para seguir vamos a hacer uso de dos nodos, que combinados, dan justo el efecto que buscamos. El primero de ellos es un nodo de ruido,Voronoi. La explicación de Voronoi se saldría del objetivo de este tutorial asique si te interesa te dejo un enlace de un artículo que lo explica muy bien: https://www.abc.es/ciencia/abci-diagrama-voronoi-forma-matematica-dividir-mundo-201704241101_noticia.html Junto al nodo de Voronoi vamos a usar un nodo de movimiento de UV, en este caso por Twirl que hace que las UV giren. Uniendo el nodo de Twirl al nodo de obtendremos lo siguiente: Puedes cambiar las variables de entrada de ambos nodos para que configurar el efecto a tu gusto. También sería una buena práctica crear propiedades para poder configuraras luego desde editor. Ahora solo falta que gire, para conseguir este efecto necesitamos acudir a otro modificador de UV, en este caso el nodo Rotate. Este nodo se coloca en la entrada de UV del Twirl y nos permitirá controlar el giro de este. Podremos controlar el giro con la entrada Rotation del nodo Rotate. Llegados a este punto vamos a hacer uso de un nodo muy importante, que quizás se me olvidó comentar en la lección pasada. Es el nodo Time, el cual nos permite usar diferentes tipos de tiempo según lo necesitemos. Creamos entonces un nodo Time y conectamos la salida Time (el tiempo por defecto) a la entrada de Rotation. Como ves, si queremos controlar el tiempo simplemente podemos guardar una variable que multiplique el tiempo y esa salida la conectamos al Rotate. Puedes experimentar con los demás tipos de tiempo para ver lo que ocurre con cada uno. Ahora ya solo necesitamos añadirle color. Puedes notar que el Voronoi tiene dos salidas, te animo a que pruebes el efecto con ambas, ya que son el mismo concepto pero de diferentes estilos. Yo me voy a quedar para este con la salida Cells, que le da un toque más estilizado. Al igual que con el anterior, vamos a hacer uso del nodo Lerp que nos ayudará a convertir los colores negros y blancos en los colores que nosotros queramos. Creamos dos colores, para poder editarlos más adelante y los colocamos en las entradas A y B del nodo de Lerp. Con esto el efecto estaría terminado. Vamos a añadirle unos detalles extra para mejorar el efecto. Podemos sacar un nodo Step del Voronoi. En este caso he usado la salida por defecto para poder apurar más el Step. Ponemos un valor pequeño en la entrada del Step para darle un toque sutil simplemente. Lo multiplicamos por el color que quieras, en mi caso blanco y posteriormente lo añadimos a lo que teníamos hasta ahora. Siéntete libre de modificar los valores a tu gusto para darle el tu propio toque. Espero que os sea útil. Cualquier duda que tengas no dudes en dejarla. Hasta la próxima.
  23. 3 likes
    Unity está dejando de ser, por los keynotes que voy viendo, en un motor de videojuegos para ser un motor para todo tipo de aplicaciones. Plantean en el último keynote que los módulos de AR y MARS sean accesibles de manera independiente desde apps nativas. Justo lo contrario que planteas. Además han creado módulos específicos para arquitectura, para automoción, para industria, para ingeniería, etc. Y no es algo que escondan, está en la página principal de Unity. Si hablamos de rendimiento, entonces por esa misma regla de tres, dado que un videojuego es mucho más intensivo en recursos que comparado con una app con soporte de Google Maps, los videojuegos deberían crearse todos en código nativo y no en Unity. Al final es un equilibrio entre rendimiento y capacidades, y en el caso de Unity el apartado multiplataforma así como la cantidad de assets en la store, lo reequilibra a su favor. Y la filosofía de "caja negra" va a dejar de existir a medida que se implante DOTS, ya que podrás debugar directamente sobre el código nativo de Unity. Hasta modificarlo si lo deseas. Creo que Unity está evolucionando y abriendo otros caminos en el desarrollo multiplataforma. El desarrollo de videojuegos exclusivamente y con alto rendimiento habrá que dejarlo para engines como Unreal, pero desde luego no Unity. Y eso no es malo, todo lo contrario. Es un mundo fabuloso el que se abre. Saludos
  24. 3 likes
    Hola, un vídeo en el que explico como crear objetos recolectables. He intentado que sea lo mas configurable posible. Por ejemplo, se pueden indicar objetos a activar en los objetos que se cogen, y el player (responsable del inventario) puede contener objetos de diversos tipos, y a cada tipo se le puede asignar la instanciación de un objeto nuevo cuando se use.... No se si me explico, pero a mi me han funcionado muy bien, así que espero que ayude a todos los que estan empezando. Saludos!
  25. 3 likes
    Buenas gente! Bucando información sobre como importar eficientemente audio para android he encontrado este articulo que seguro que os sirve de utilidad, a mi me ha servido para despejar muchas dudas: https://blog.theknightsofunity.com/wrong-import-settings-killing-unity-game-part-2/ Saludos
  26. 3 likes
    Acá les dejo un excelente tutorial ( en tres partes ) a modo de introducción al nuevo Input system. Uno de los mejores que vi, los demás videos parecen copy+paste, además de que todos ponen las expresiones lambda sin ni siquiera saber que hacen (o por lo menos da esa sensación). Parte 1: introducción y Setup Basicamente de Input.GetKeyDown(KeyCode.w) a keycoard.wKey.isPressed Parte 2: Binding y Composite Acá explica como se pueden especificar bindings (conexiones entre acciones y dispositivos físicos) visibles en el inspector. Un "Composite" es lo mismo pero para con más de un binding. Parte 3: Input System Asset Se migra todo lo expuesto en la clase a un Asset propio del nuevo sistema, con la ventaja de setear varios ActionMaps (por ej uno para un menu, otro para gameplay, etc) con sus acciones y sus bindings.
  27. 3 likes
    @Rootet en tu script hay cositas que están bien otras que están mal, por ej: 1) Update para inputs, FixedUpdate para físicas: if (Input.GetMouseButtonDown(1)){ if (corriendo){ } else{ rigi.velocity = new Vector2(velocidad * 1.25f, rigi.velocity.y); } } En update, estás modificando una velocidad, cosa que debés hacer en FixedUpdate, esto se lee como "Si apreto el botón derecho y corriendo es false la velocidad X es el 25% más grande" y esta actualización sucede en un solo cuadro, no cuadro a cuadro. Además si la velocidad es un 25% más grande se supone que corriendo ahora debe ser true pero no, se setea true si apretás el otro botón (en FixedUpdate). ───────────────────────────────────────────────────────────────────────────────────────────────────── 2) Quién es responsable de corriendo? if (Input.GetMouseButtonDown(0)){ if(corriendo){ if ((enSuelo || !dobleSalto)){ sonido.Play(); //Empujón hacia arriba //Opción 1. Metodo up de Vector2 rigi.AddForce(Vector2.up*fuerzaSalto); //Otra opción //Aplicamos una fuerza de 0 en X y de fuerzasalto en Y //rigi.AddForce(new Vector2(0,fuerzaSalto)); if(!dobleSalto && !enSuelo){ dobleSalto=true; } } } else{ corriendo=true; NotificationCenter.DefaultCenter().PostNotification(this, "PersonajeEmpiezaACorrer"); } } Cuando apretás el botón izq y no está corriendo se da la primer vuelta (el else), es decir que se pone corriendo = true. En el siguiente cuadro GetMouseButtonDown no se dispara (por razones obvias) entoces el "if(corriendo)" no se da. Sí se va a dar el "if(corriendo)" en el proximo click. Además, ¿quién pone corriendo en false? Y volviendo al punto 1, solo si corriendo es falso la velocidad aumenta. Una vez que diste click izquierdo corriendo nunca vuelve a false (?). Puede ser que me haya olvidado de algo, muchas veces contesto a la ligera. ───────────────────────────────────────────────────────────────────────────────────────────────────── █████████████████████████████████████████████████████████████████████████████████████████████████████ Podés resolver el problema parcheando if's y demás, pero te diría que de entrada la estructura es muy confusa para una tarea tan simple, tomalo como una oportundad de mejora y experimentá con una nueva, que tenga más lógica y sobretodo que alguien externo al código lo vea y lo entienda al instante, pensá que esto es un salto y una funcionalidad de correr, practicamente no es nada. La lógica que te recomiendo para una mezcla Update + FixedUpdate en un platformer (y con cualquier personaje) es la siguiente (seguramente hay cosas que no definí, solo una idea muy por arriba): // inputs - esto expandilo a todas las inputs que estás esperando, lo mismo con ejes // En este ejemplo está solo correr "Run" (que elegí la leftShift) bool runPressed = false; bool runReleased = false; bool running = false; bool isGrounded = false; void Update() { // Update puede pasar 100 veces más rápido que FixedUpdate (50 fps por default), así que // todos los KeyDown se acumulan, no se setean, así no perdés ninguno en el camino // por acumular me refiero a usar una simple OR runPressed |= Input.GetKeyDown( KeyCode.LeftShift ); runReleased |= Input.GetKeyUp ( KeyCode.LeftShift ); } void FixedUpdate() { //Detectar suelo, determinar direcciones de movimiento, ángulos, etc // Por supuesto acá es donde decís "suelo = true o false" isGrounded = IsGrounded(); // el vector objetivo cuadro a cuadro, no necesariamente el aplicado Vector2 targetVelocity = Vector2.Zero; // bien general un "if( suelo ) .... if( isGrounded ) { //Todo lo que pasa si y solo si el jugador está grounded // en este caso la input a evaluar es run así que if( runPressed ) { running = true; targetVelocity.x = ... } else if( runReleased ) { running = false; targetVelocity.x = ... } } else //Todo lo que pasa si y solo si el jugador NO está grounded { //en el aire no puede correr running = false; targetVelocity.y = ... } //Una vez determinado el estado se aplica el vector obtenido a la velocidad (de la forma que quieras). rb.velocity = ...(dependiendo de targetVelocity) // IMPORTANTE --> Resetear inputs, FixedUpdate ya las usó runPressed = false; runReleased = false; } Animación y movimiento poco tienen que ver, si no ves los efectos en pantalla tratá de exagerar los valores, en vez de 1.25f poné 5f. Igualmente creo que sí, desde el animator podés setear la velocidad del clip (revisá las referencias de Animator o google más rápido), aunque no recuerdo, estoy completamente seguro que para el sistema Legacy (viejo) se puede hacer, pero con el componente Animation. Saludos
  28. 3 likes
    Efectivamente, ahora mismo eso no es posible con clases C# serializadas, pero la buena noticia es que a partir de Unity 2019.3 lo va a ser gracias a un nuevo atributo llamado SerializeReference. Esto es algo que los que desarrollamos herramientas llevábamos AÑOS esperando que Unity implementase, así que hay cierta expectación con el tema. Más información aquí: https://forum.unity.com/threads/serializereference-attribute.678868/
  29. 3 likes
    Requiem for Erich Sann Actualizamos post con información de todo lo nuevo de Requiem for Erich Sann. Enlace Play Store: Enlace Apple Store: Juego en primera persona, realizado con Unity 3D. El objetivo del juego consiste en salir vivo de la casa con el preciado instrumento que obsesiona al protagonista. Os dejo un video introductorio y se agradece cualquier tipo de review, crítica, opinión... https://www.microsoft.com/en-us/p/requiem-for-erich-sann/9p8lwl0lwcdf El juego es totalmente gratuito y está disponible de momento en la Microsoft Store para X64, X86 y ARM Espero que os guste.
  30. 3 likes
    Os presento mi 2º (segundo) juego: "area51invasion" Link al juego: https://play.google.com/store/apps/developer?id=Raven+Games+Spain Consiste en aplastar a los invasores para que no roben a los aliens del área 51. Partidas de 15 segundos. La gente no saca más de 30-40 puntos. ¿Cuál es vuestro récord? Extras Hecho desde cero en 9 horas. 8 horas fueron en el apartado gráfico.
  31. 3 likes
    Buenas tardes, os presento mi ultimo videojuego online creado con Unity3d. Se trata de un juego de carreras de coches de Scalextric, el juego puede parecer bastante sencillo pero tiene algunos detalles que lo hacen un poco más complejo. En el juego puedes elegir 10 coches y 10 compuestos diferentes de neumaticos, cada uno con sus características , ventajas y desventajas. Esto hace que haya más variedad en el juego y no sea tan lineal. Por otra parte el juego funciona online con un servidor capaz de albergar partidas de hasta 32 jugadores. Trata de hacer los mejores tiempos con tu coche y ten cuidado de no salirte de la carretera ya que perderás el tiempo de la vuelta actual, el juego cuenta con una clasificación mundial TOP 20, se actualiza instantaneamente segun van participando los jugadores. Los controles del juego son: Flecha arriba del teclado: Acelerar o decelerar Barra espaciadora: Cambio de carril TAB: Ver clasificación mundial Sin más preambulos os dejo unas imagenes y el link de descarga, intentaré tener abierto estos días el servidor 24 horas, por si quereis pasaros a probar. Nueva versión: Descarga Android: https://play.google.com/store/apps/details?id=com.Raulandia.KLetrixMotorsport Descarga PC: https://www.dropbox.com/s/epc8yzv41oczfq1/ScalextricPros2k19.rar?dl=0
  32. 3 likes
    ¡Buenas! Me estoy planteando dar una pequeña charla introductoria sobre narrativa procedimental y generación de tramas argumentales en videojuegos, y me preguntaba si existe un interés general por ello. la charla entraría sobretodo en el ámbito de aplicaciones de la IA en el desarrollo de videojuegos y sería un poco hablar de como se encuentra el estado actual y cuales son las soluciones y algoritmos más utilizados para ello. Muchas gracias y espero vuestro feedback!!
  33. 3 likes
    Buenas amigos, ya ha pasado un tiempo pero les dejo un nuevo video sobre UIElements en Unity para aquellos que esten buscando más info en este tema que es muy nuevo aún.
  34. 3 likes
    Esta API tiene una lista extensa de métodos para extender la funcionalidad de las clases de .NET Framework, WinForms, System.Console y Unity3D. Además, contiene implementaciones propias y de terceros. Lista de contenidos interesantes por espacios de nombres uzLib.Lite.Core Contiene una implementación de Singleton. Contiene un wrapper de consola para leer líneas o teclas al mismo tiempo. (clase ConsoleOutput, método: ReadLineOrKey) Dentro del namespace "Input" podemos encontrar alguna clase que contiene una implementación (clase SmartPsswrd) para leer contraseñas por pantalla sin mostrarlas (como se esperaría de un entorno Linux). uzLib.Lite.Extensions Contiene algunas extensiones para arrays y colecciones (añadir elementos a un array, comprobar si un Dictionary/List/HashSet/IEnumerable es nulo o está vacío (IsNullOrEmpty), exntesiones ForEach para ejecutar Action callbacks (incluídas con índice ("int index")) (más metodos en la API de pago), borrar en el índice, DisctintBy…) Contiene algunos métodos de extensiones de "Dictionary": FindIndex (busca el índice por predicado) GetIndex (obtiene el índice de un item existente, si no, devuelve -1) AddOrSet (añade un valor si la clave no existe, si existe entonces actualiza el valor) AddOrAppend (lo mismo que antes, pero para las clases List<T> y T[] como TValue) AddAndGet (si la clave no existe añadela con el valor specificado, después devuélvelo) Get (lo mismo que antes, pero fuerza los tipos genéricos con constraints del tipo: where TValue : class, new(), para que siempre sean clases lo que se pase como tipo genérico) SafeGet (intenta obtener el valor si la clave existe, si no devuelve el valor por defecto (default(TValue))) Contiene algunas extensiones para la clase Bitmap: obtiene un IEnumerable de Colores ("Color") de una clase Bitmap o lo guarda (Save) en una ruta (o en un Stream (TODO)). Contiene una extensión para el tipo primitivo byte: el método RoundOff (para obtener un "byte" redondeado)… Contiene algunas extensiones para la clase Color: obtener el umbral entre dos colores, comparar un color1 para obtener un color similar a partir de un IEnumerable de colores (2), convolución de posterización, obtener porcentaje de similaridad, redondear colores… Contiene un método de extensión para compilar archivos *.sln… Contiene extensiones de compresión: zip/unzip archivos a partir de su ruta (path), Streams u objetos (sync/async)… Contiene una extensión CodeDOM para añadir literales "static" a nuevas clases generadas a través de la clase CodeTypeDeclaration. Contiene una extensión DateTime para obtener su timestamp de UNIX (usa la clase DateTime no la clase DateTimeOffset). Contiene una extensión para la clase Exception para comprobar si un el índice del objeto de tipo array/List/Dictionary está fuera del límite. Contiene extensiones para Git para obtener algunos datos usando la librería LibGit2Sharp. Contiene exntesiones para HTML para limpiar y buscar ocurrencias en códigos fuentes HTML. Contiene extensiones IO para verificar rutas válidas, obtener nombres de archivos a partir de URLs, obtener y verificar patrones de rutas relativas, verificar si la ruta es un directorio, obtener directorios de nivel superior, subir el árbol de rutas (N veces), obtener directorios temporales, verificar si los directorios están vacíos o son nulos, eliminar el contenido de una carpeta… Contiene exntesiones para Internet (System.Net) para descargar archivos y hacer (GET) peticiones… Contiene una extensión para la clase Object para comprobar si un objeto es convertible (cast)… Contiene una extensión para la clase Process para lanzar procesos asíncronamente… Contiene extensiones para el namespace Reflection para invocar métodos estáticos/no-estáticos, verificar si existe un método en la "Assembly" especificada, ejecutar un método comprobando las excepciones… Contiene extensiones de serialización para serializar/deserializar archivos/Streams/objetos/arrays de bytes y para comprobar cadenas de JSON/XML válidas, etc… Contiene extensiones para la clase String para verificar si la cadena es nula o está vacía (no se necesitaría usar más: ...string.IsNullOrEmpty("example")...), formatear cadenas (la misma lógica), para cambiar el primer carácter de una cadena a mayúscula… Contiene una extensión para URIs para comprobar si la URL pasada por cadena es válida. Contiene una exntesión para Visual Studio para obtener el proyecto de Inicio desde un archivo de solución… uzLib.Lite.Plugins.SymLinker Contiene una implementación para crear enlaces simbólicos en Windows/Linux/Mac OSx… uzLib.Lite.Shells Contiene una implementación obsoleta llamada GitShell (una auto-implementación de la funcionalidad de Git antes de que descubriera LibGit2Sharp…) uzLib.Lite.Unity.Extensions Contiene extensiones para animaciones (clase "Animation"). Contiene extensiones para la clase Color: color naranja (Orange) (TODO: implementar más colores), para comprobar si los colores son similares, la distancia entre colores, obtener colores al azar, las mismas extensiones que la clase uzLib.Lite.Extensions.ColorHelper (pero adaptadas a Unity3D)… Contiene extensiones de geometría para obtener posiciones al azar (Vector3), obtener la media de Vector3s, obtener límites encapsulados (esto es un promedio de los límites de todos los renderizadores (Renderers) de un GameObject), obtener el tamaño ortográfico que se establece en una cámara para que este objeto se ajuste perfectamente a su vista, obtener la compensación de un modelo (obtener el máximo y los centros mínimos del Renderer de un GameObject), comparar los tipos Vector3/Vector2 para comprobar si son mayores o iguales, menores o iguales, menores/mayores que otro Vector3/Vector2, obtener objetos Vector3/Vector2 invertidos, obtener el rayo desde el centro de una cámara… Contiene extensiones matemáticas obtener el máximo absoluto de una matriz (array) de floats (params), obtener el múltiplo de un float, verificar si un float está entre un rango (operación exclusiva/inclusiva), establecer la componente “Y” de un vector, obtener la distancia entre dos Vector3/Vector2… Contiene extensiones para objetos (GameObject/Transforms) para establecer capas, etiquetas de forma recursiva, eliminar componentes de forma recursiva, buscar Transforms padres por su nombre, obtener el componente (Component) más arriba en la jerarquía, obtener los componentes por nombre, obtener o agregar componentes en un GameObject (o lanzar excepciones/LogErrors), crear hijos fácilmente, destrucción segura (verifique si el proyecto está ejecutandose bajo el Editor (Application.isEditor) de Unity ejecutando DesroyImmediate), obtener la ruta de GameObject (volcado de la jerarquía de los hijos de este), envíar un mensaje a los objetos (SendMessage) del tipo seleccionado… Contiene extensiones para la clase Rect para conseguir que la implementación de los PropertyDrawers sea más sencilla, para verificar si el rect está dentro de otro rect, agregar el relleno a un rect, hacerles "Clamp"… Contiene extensuiones para la clase Texture(2D) para escribir un texto en una textura, obtener su ancho/alto como un objeto de tipo Vector2, crear texturas a partir de colores (UnityEngine.Color)… Contiene extensiones para la interfaz (UI) donde están puestos algunos GUIStyles personalizados, obtener Rects centrados, dibujar Rects, dibujar ProgressBars, "Label"s centrados, dibujar Marquees… uzLib.Lite.Unity.Utils Contiene una clase llamada "GLDebug" para visualizar Gizmos dentro de la vista de juego (Game view). Screenshots https://imgur.com/a/dqWBKwN Instalación ¿Necesitas ayuda? Solo clona este repositorio en tu proyecto de Unity o en tu solución. Para la documentación, mira la Documentation API. Problemas ¿Tienes problemas? Reportalos en la sección de problemas. ¡Gracias por el feedback! Contribuir Haz un fork de este repositorio, realiza los cambios oportunos y luego crea una pull request (PR). Si encuentra errores o tiene ideas nuevas que no desea implementar, presente un informe de error. Enlaces de relevancia: Sitio del equipo Canal de YouTube Soporte (abre tus tickets aquí) Enlace a la Asset Store Enlace al repositorio Documentación del asset ¡Espero que disfrutéis el asset! ¡Un saludo! ~~ United Teamwork Association ~~
  35. 3 likes
    Puedes utilizar itween con el itween visual editor https://assetstore.unity.com/packages/tools/visual-scripting/itween-visual-editor-180
  36. 3 likes
    Como vais gente? Aquí os dejo el trailer de lanzamiento para PS4, se emite en un rato. Saludos!
  37. 3 likes
    Muchas gracias pos seguirme! Actualizo con nuevo contenido: Una introducción a UIElements (un nuevo framework en Unity 2019.1 que permite crear interfaces gráficas de forma similar a la programación web). Por el momento solo se pueden crear interfaces en el editor (como herramientas) pero esto en el futuro va a cambiar. Saludos!
  38. 3 likes
    Atentos, que doy una Master Class: La imagen de ejemplo que has puesto hace suponer que no está trabajando con la textura, sinó con los canales RGB del Vertex Color, que es una propiedad de la mesh (modelo 3D). Los programas tipo Blender/3dsmax/Maya/etc, traen herramientas para que puedas "pintar" o asignar colores a los vértices que componen los triángulos y polígonos de una malla(No, no tiene nada que ver con aplicar un material de un color sólido). Cuando pintas todos los vértices de un polígono concreto, es cómo si pintaras con un color un polígono de la malla. Básicamente lo que haría un shader de hierba de esos de mover las hojas con el viento sería leer cada uno de los vértices de la malla, y en función de "cuánto rojo o cuán alto es el valor de este color concreto", asociarlo a una magnitud de desplazar la posición de dicho vértice en X/Y/Z, siendo cada uno de estos tres ejes el correspondiente canal de color R/G/B. Cuando hablo de valor del color, me refiero a que en un modo de color de 8bit, tenemos 2^8 = 256 valores distintos para el R, G y B (256 tonos de rojo, verde, y azul)... Pintando ciertos vértices de más o menos rojo, esos vértices aparecerán movidos en X más o menos, dependiendo de su valor. Por cierto, hay programas que soportan incluso RGBA, un canal Alpha adicional para el Vertex Color. Generalmente este canal Alpha se usa más para filtrar el nivel de transparencia de los vértices al renderizarse. Sí, con texturas también se puede hacer este tipo de cosas, y de hecho la base del Normal Map para los relieves hace precisamente eso. El que se use Vertex Color en lugar de una textura es precisamente para ahorrarte cargar en memoria esa textura. Es más empaquetado, más optimizado, más rápido, etc. Pero también más limitado, ya que sólo podemos guardar información en los vértices de la malla. Es como si trabjarámos con una textura muy pequeña (por tanto, menos definición...). La versión "PRO" de estos truquitos que van mediante texturas hacen uso de una 2ª textura a modo de "máscara", que excluye a sólo una parte de la malla para que se mueva o distorsione.
  39. 3 likes
    Hola a todos, Soy nuevo en el foro, pero me gustaría mostrarles un proyecto personal en el que vengo trabajando hace 2 meses y estoy en los últimos retoques, no es un juego con fines de lucro, simplemente es para mi porfolio. Me gustaría saber su opinión El juego se llama Battle Machines: Logo Es una mezcla entre Twisted Metal y Mario kart, un juego únicamente multijugador local hasta para 4 jugadores. Por ahora solo tiene 2 modos de juego, batalla (todos contra todos o por equipos), y captura a la bandera. - Existen diferentes "Motores" que definen las características del auto, entre estas características esta el "Special" que es un arma única de cada motor, el "Special" se recarga con el tiempo, como una ulti del LOL o una herica de HOTS. Mi idea en un principio era hacer varios autos pero como el proyecto lo estoy haciendo solo yo, y modelarlos me llevaría mucho tiempo, decidí que lo que cambia es el "Motor" y no el auto. En el juego, debes recoger cajas para obtener un arma al azar, puedes juntar hasta un máximo de 3 más el Special, en total 4 armas, ademas puedes disparar una metralleta que tiene balas infinitas. Ademas existen esferas de energía, si juntas 10 tus próximas armas serán mas poderosas. Las "armas" son: Misil perseguidor Misil normal (un misil que viaja recto pero mas rápido) Bomba rebotadora (va rápidamente por el piso pero al chocar contra una pared rebota) Mina Turbo Campo de fuerza Tengo una versión para descargar, esta lejos de lo que me gustaría que fuera, pero así va por ahora: Link de descarga: https://icedcris.itch.io/battle-machines Acá les dejo algunas capturas de pantalla: https://ibb.co/L8cNgsj https://ibb.co/GP1xQ2p https://ibb.co/j4jm3vC https://ibb.co/VvGcnyL https://ibb.co/qdMxBG9 https://ibb.co/8rHXcJ3 https://ibb.co/7k0xZHw https://ibb.co/XtPfm2K https://ibb.co/BPYXDXM Cuéntenme que les parece.
  40. 3 likes
    Hola muy buenas gente les quería mostrar mi primer juego de unity para android no es nada del otro mundo pero para mi fue un gran avance y me costo mucho durante el desarrollo fue todo una experiencia nueva para mi aprendí un montón de cosas sobre la marcha y la verdad que me gusto el resulta obviamente aun no esta terminado eso solo es un 50% de lo que me gustaría el juego pero ya vi que es jugable, espero que le guste y me den un apoyo positivo dándome opiniones de que mejorar si es mala idea un juego así. Si queréis descargarlo : https://play.google.com/store/apps/details?id=com.TG.VideoTube Gracias por leer =D
  41. 3 likes
    Hola, Aprovechando el trabajo en un nuevo juego, he creado un tutorial para crear un arma, con sus correspondientes disparos pra Unity. Es muy sencillo, el vídeo dura 20 minutos y contiene el proceso desde la importación de la imagen creada con Gimp hasta la creación de los scripts y las animaciones. Ni que decir que es aplicable a cualquier tipo de arma que quieras crear, el arte ya es cosa de cada uno. Quiza lo mas curioso es que se usa un evento dentro de la animación para disparar, y que tambien se usa un particle system que se modifica desde la animación. Espero que os guste, y que le sea útil a alguien.
  42. 3 likes
    ¡Hola! Esta semana he hecho un par de assets para un proyecto. Me grabé pintando uno de ellos, una espada low poly (260 tris). Podéis ver el proceso en este vídeo: El resultado final lo podéis ver aquí: En Sketchfab (Visor 3D): https://skfb.ly/6HQ8B Aunque no sea un tutorial propiamente dicho, espero que os ayude o inspire de alguna forma, sobretodo si os va el estilo de pintar a mano. ¡Saludos!
  43. 3 likes
    Hola, La creación de personajes es algo que los coders tenemos totalmente atravesada, y me he propuesto intentar cambiarlo, por lo que he escogido GIMP, y estoy creando el arte de un juego, o concepto, que quizá no salga a la luz, pero que me tiene que servir para mejorar en este campo. Os dejo un tutorial, donde se puede ver de una forma muy sencilla como hacer un personaje. El estilo del personaje no se donde enmarcarlo, no es pixel art, creo que no es cartoon, lo que si que esta claro es que es 2D. Se ha creado de tal forma que sea sencillo de importar hacia Unity. El vídeo es muy corto, unos nueve minutos, pero es que me he dado cuenta, que a mi no me gustan los vídeos largos, que no hace falta decir donde esta cada opción del menú. He supuesto que cuando digo: exportamos la imagen, no hace falta decir: vamos al menu file->export as, damos el nombre, pulsamos export, sale una ventana... que no, que no es un curso de todas las opciones de GIMP. Ya puestos he creado un vídeo de timelapse, que es incluso mas corto, pero que basicamente es el manual, recortado y sin voz, donde se muestra el proceso muy acelerado, de como cree el personaje. Seguramente el vienes que viene podré colgar el vídeo de como exportar a Unity y animar el personaje.
  44. 3 likes
    Este asset ya lo había subido hace un tiempo en "Recursos", pero bueno, aca dejo la versión "asset store" así queda para las futuras generaciones DESCRIPCIÓN Grab It te permite manipular "rigidbodies" agarrandolos, puedes moverlos, rotarlos, acercarlos/alejarlos o arrojarlos. Esta mecánica de juego se hizo popular en el genero de horror, especialmente impulsada por Frictional Games en juegos como los de la serie Penumbra y Amnesia: The Dark Descent, el objetivo principal de este asset es emular este comportamiento. La mecánica es simple de ejecutar, simplemente mira directamente al objeto (idealmente con una cámara, pero funciona con cualquier objeto que tenga una dirección de forward) y presiona/mantiene el botón izquierdo de mouse, si el objetivo es un Rigidbody será afectado (previamente filtrado por el layermask). Suelta el botón del mouse y podrás soltarlo. Actualmente hay dos tipos de rigidbodies soportados, RB "normales"(por ejemplo una piedra, un ladrillo) y hingeJoints (por ej puertas). ESPECIFICACIONES - Agarra cualquier Rigidbody. - Mueve al Rigidbody mientras lo sostines. - Rota al Rigidbody mientras lo sostines. - Acerca/Aleja al Rigidbody mientras lo sostines.. - Controla hingeJoints de manera apropiada. VIDEOS DEMO WebGL Descargalo gratis del asset store ---> GrabIt
  45. 3 likes
    Dejo aquí la segunda parte, En esta importamos el caracter creado con GIMP a UNITY, y creo una primera animacion. Hay que decir que la animación la he creado de la forma mas sencilla posible, tan solo con el animator, sin usar ningún sistema de rigging, y oye, que el resultado no es del todo malo.
  46. 3 likes
    Ups , cuando subí los otros dos assets me olvidé de este ... DESCRIPCIÓN Laser Machine es un componente que permite la creación de un arreglo de "lasers" en forma radial, donde cada uno de estos puede colisionar con colliders 2D y 3D. El componente hace uso del método Linecast para detectar colisiones, combinado con un LineRenderer para lograr el efecto visual. CARACTERÍSTICAS - Configura la forma del arreglo de lasers (solo forma radial en v1.0). - Funciona en entornos 2D y 3D. - Setea hasta un máximo de 50 lasers por objeto (se puede liberar a más con solo modificar el Range). - Configura animaciones para los lasers (rotación e intermitencia). - Asigna datos externos (via un scriptable object) para poder proporcionar recursos básicos y propiedades únicas tales como diferentes materiales, velocidad, forma, rango angular, ancho del rayo, etc. - Sobreescribe los datos externos para poder lograr mayor unicidad. IMÁGENES Quiero que observe este ultimo gif ... dejese embelesar con sus vueltas ...y sus vueltas ... ahora estás en mi poder! ---> ve al asset store y descárgalo !!! LINK
  47. 3 likes
    Te recomiendo algo para que lo tomes muy encerio y lo apliques desde el momento que lees este comentario. 1 - No deberias usar UnityScripts, ya se encuentra descontinuado y es un pseudo lenguaje donde confunde muchas características de la programación orientada a objeto. Desde este momento empieza por utilizar C#, todo te sera mucho mas simple y a medida que avances podrás resolver problemáticas complejas que UnityScripts no puede. 2 - El foro recomiendo una versión estable de Unity y esta es la que deberias de tener, con más razón si estás aprendiendo. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Cuando empieces a programar con C# necesitarás practicar la abstracción de los problemas para poder reflejarlos dentro del código. Te dejo el código que publicaste en C# y comentado- //Using sirve para incluir [NameSpace (Nombres de espacio)] al codigo librerias de tercero, por ejemplo, //System contiene clases como Action que se utiliza para representar un evento. UnityEngine contiene a MonoBeahviour, Transform, Vector3,2, etc. using System; using System.Collections; // NameSpace que contiene IEnumerator. using UnityEngine; [RequireComponent(typeof(NavMeshAgent))] // Atributo que indica que el componente NombreScripts requiere que el Objeto donde esta asignado contenga NavMeshAgent, Si no lo contiene lo agrega automaticamente. public class NombreScripts : MonoBehaviour // <<< Todos los componente en Unity requiere Heredar de esta clase para que funcionen. Existen otros tipos de componentes que mas adelante podras ir descubriendo. { private NavMeshAgent m_navMeshAgent {get; set;} // Componente NavMeshAgent usado como CACHE private Transform m_meta {get; set;} // Variable Transform usado como CACHE [SerializeField] private int m_salud = 100; // Variable de Tipo Entero, utilizada para la SALUD [SerializeField] private bool m_patrullar = false; // Variable de Tipo Booleano, ¿utilizada como BANDERA (Flag)? [SerializeField] private Transform[] Puntos = null; // Variable de Tipo Arreglo de Transform, ¿Utilizada para el recorrido (WayPoints)? [SerializeField] private Action m_eventDead; // Evento, al ser invocado se llaman todos los delegados (Funciones) asignado. public bool IsAvailableMeta { get { return m_meta != null; } } // Propiedad que nos returna con un Booleano si la Variable m_meta es NULL. private void Awake() { m_navMeshAgent = GetComponent<NavMeshAgent>(); // Obtenemos el componente NavMeshAgent y lo asignamos a m_navMeshAgent. m_eventDead += () => //Asignamos un delegado Anonimo al evento m_eventDead, este delegedo Destruye el objeto cuando muere. { Destroy(gameObject); }; StartCorrutine(YieldUpdate()); // Iniciamos una corrutina para evitar buscar en cada ciclo del Update. Esto lo hago para que entiendas como funcionan estas cosas en C#. } private IEnumarator YieldUpdate() // Las Corrutinas son delegados que retornan un object IEnumerator, no es complejo de comprender pero en este momento te podria complicar bastante. { while(true) // Ciclo infinito { if(IsAvailableMeta) // Comprobar si m_meta esta asignado, si es asi, entonces que espere 1 segundo y vuelva a repetir el bucle. { yield return new WaitForSeconds(1); continue; } // si la condición anterior es falsa, entonces se llama a la función FindMeta, si se encuentra una meta se vuelve a dar 5 segundo antes de repetir el ciclo nuevamente, de lo contrario solo 1 segundo. if(FindMeta()) yield return new WaitForSeconds(5); else yield return new WaitForSeconds(1); } } private void Update() { if(IsAvailableMeta) // Si m_meta esta asignado entonces creas la logica requerida. { } } private bool FindMeta() // Metodo que nos devuelve un booleano para saber si se entontro o no una meta { GameObject go = GameObject.FindGameObjectWithTag("Enemigo"); // Buscamos un GameObject que contenga el TAg Enemigo y lo asignamos a go (Variable Local) if(go != null) // Si go es diferente a NULL tomamos el componente transform y lo asignamos a m_meta, a la misma vez cortamos la ejecución de la función retornando un valor verdadero. { m_meta = go.transform; return true; } else // Si go es NULL entonces se cota la ejecución de la función retornando un valor falso. { return false; } } private void OnTriggerEnter(Collider col) { if(col.gameObject.CompareTag("Enemigo")) // Utiliza CompareTag para verificar si el objeto colisionado tiene como TAG "Enemigo" TakeDamage(1); // Si es asi aplicar Daño de 1. } public void TakeDamage(int amount) // Función que aplica daño modificando la variable m_salud con el valor enviado a través del parametro amount. { m_salud -= amount; // se decrementa m_salud con el valor de amount. if(m_salud <= 0 && m_eventDead != null) // se comprueba si m_salud es menor o igual a cero y si m_eventDead es diferente a null. m_eventDead es null cuando no se le asigna ningun delegado. m_eventDead.Invoke(); // si la condición anterior se cumple entonces invocamos m_eventDead. } }
  48. 2 likes
    Point.NoFilter no pixela, simplemente no filtra, que es diferente. Se me ocurren algunas: 1 - Reduciendo el tamaño máx de la imagen (abajo de Point No filter tenés "MaxSize") si la imagen es muy grande normalmente ves que pierde calidad si no le subis esto, lo contrario si se lo bajas, pero esto seguro te afecta los colores, igual , con probar no se pierde nada. 2 - Se que tenés los MipMaps pero creo que se usan para el renderizado de objetos lejanos. Sé que se pueden generar pero no sé si seleccionar el nivel. 3 - Por supuesto yendo a un software de dibujo y realizando el efecto. 4 - La otra es mediante un shader, hace un tiempo hice uno para el shaderGraph, pero no se si se aplicará bien a sprites:
  49. 2 likes
    Creo que UnitySpain comenzó aproximádamente en el año 2006-07, y fue fundada por el usuario @Bitomule. Desconozco si tenía otra apariencia distinta a unos foros, pero sí recuerdo que tenía una sección a modo de Blog, con noticias y artículos sobre videojuegos... Yo descubrí esta Comunidad (como cualquier otro usuario) en el 2009-10, mientras buscaba personal para mi empresa. Más adelante(2012 AD), me ofrecí como Moderador y/o Administrador para tratar de rescatar la Comunidad. El resto, ya es historia...
  50. 2 likes
    Buenas, hay muchas formas de llamarlo, una podría ser algo así: void Start() { StartCoroutine(GetTime()); } public IEnumerator GetTime() { UnityWebRequest www = UnityWebRequest.Get(URL_SERVER); // URL_SERVER, es la dirección donde está alojado el archivo .php: http://servidor.com/archivo.php yield return www.SendWebRequest(); if (www.isNetworkError || www.isHttpError) { // Ha habido un error al obtener el tiempo } else { Debug.Log("La hora del servidor es: " + www.downloadHandle.text); } } Eso sirve si solo necesitas mirar la hora, pero para un juego que funciona según el tiempo que pasa, se podría romper muy fácil solo cambiando la hora del dispositivo. Por ejemplo en los juegos tipo Clash of Clans, que construyes algo y tiene que pasar 5 horas para que se termine de construir, podrías ir a configuración de tú móvil, adelantar tu reloj 5 horas, y volver al juego y el juego detectaría que ya han pasado esas 5 horas, por lo que el juego estaría roto...
×
×
  • Create New...