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 58,34€ 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 10/18/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. 4 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:
  3. 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:
  4. 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.
  5. 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.
  6. 2 likes
    Hola, He creado unos pocos vídeos de programación básica de NPC's, o programación de NPC's básicos. La intención es ir creando mas de esta tématica, sin obligación, y de tanto en tanto, pero irlos agrupando en la misma lista de visualización de youtube: Aquí os la dejo: Por ahora hay tres vídeos, o 2.5 por que el último es un poco ampliación del primero. -Como crear NPC's en Unity que te siguen. -Creamos un centinela con Waypoints en Unity, -Como hacer un NC persiga y huya en modo pánico. Ya ire informando de nuevas incorporaciones a la lista :-)
  7. 2 likes
    hola! @iRobb gracias! me encanta que te encante! @pioj gracias por el feedback. el juego lo estoy creando yo solo. todo es creado por mi, desde la musica hasta el arte... y se que esa es la parte que peor se me da, el arte. Se que es mejorable, pero he hecho todo lo mejor que he podido, que no es muy "pro", ya lo se, es de donde mas "flojea" el juego ...pero le he dedicado bastante tiempo y empeño en intentar hacerla "guai". ...lamentablemente no dispongo de artista, ni presupuesto para contratarlo. si que pretendia venderlo... en steam... en la epic store... o algo asi... asi que ahora que me has dicho eso pues nose muy bien que hacer... el juego aun no esta terminado... asi que aun intentare mejorar algo de los graficos... pero no creo que logre mucho... los menus si estan acabados... y el juego si contara con "cinematicas" (historia) ....justo estoy con eso ahora... y con los otros modos de juego (modo arena, modo survival, y modo bossRush) el sistema de equipar skills y mejorar la nave tambien esta acabado... no mostre nada en los trailers porque me parecio mejor mostrar accion.... pero ya hare mas trailers mostrando esas cosas... las fases que son "diferentes" son escenas especiales que tienes que encontrar... (estan ocultas) y aunque parezcan muy diferentes el control es practicamente igual... de nuevo gracias a los dos por comentar
  8. 2 likes
    Hola a todos! Visto en otro hilo de ¿por que usas Unity para algo que no sirve?, vamos a ver si ponemos por aqui esos casos de "no-uso" recomendado. Empezare diciendo lo tipico, Unity es para hacer juegos, cualquier cosa que se salga de ahi es "tonteria", ¿se puede hacer?, pues hombre, es como usar Unreal para hacer un flappy bird, como poder..... puedes hacer lo que te venga en gana. Pero me parece matar moscas a cañonazos usar algo que no esta pensado para lo que fue creado, por mucho que se "abra" a otros mercados. Se supone que como "expertos" debemos usar la herramienta adecuada a cada tarea, no hacerlo todo con la misma porque "es que funciona". Por ejemplo, apps nativas de movil. Si vas a hacer una app de gestion, pongamos un instagram, o un facebook, me parece una chorrada usar unity. Por varias razones: -La build siempre sera enorme comparada con nativa, Unity arrastra mucha codebase, cosa logica -Problemas por tener que andar poniendo plugins para acceder a cosas nativas de iOS o Android, con las actualizaciones de turno, sdks que se quedan deprecated, librerias que desaparecen de la store, etc. -Un rendimiento peor al ser mas exigente con el hardware de lo que puede ser una app nativa (consumo de bateria, cpu, etc) ¿Que es comodo usar unity porque con un click exportas y tienes tu app en ios/android?, si, pero lo dicho, matar moscas a cañonazos.
  9. 2 likes
    Muy buenas compis! Pues aqui os dejo enlaces para web, aunque con poner zombeat.io os apareceran muchas webs con el juego, elegid el sitio que prefirais. Y tambien os dejo el enlace para que podais bajar la version android de zombeat.io. Espero os guste y podais echar un buen rato intentando evolucionar a tope :) Gracias de antemabo por el feedback. Jugar en navegador: https://gamedistribution.com/games/zombeatio Jugar en movil: https://play.google.com/store/apps/details?id=com.FrenzyFrameStudio.Zombeat.io Feliz Halloween! Youtube video:
  10. 2 likes
    Un mini juego para Halloween para probar el AR Foundations de Unity 2019.2. La publicaré en breve. Espero os guste.
  11. 2 likes
    ya he logrado traspasar hacia arriba: agregar el componente physics 2D -> Plataform Effector 2D a la plataforma traspasar hacia abajo cambiar el layer del personaje por 0,5 segundos y volverlo a poner por default
  12. 2 likes
    Qué bien que lo hayas entendido. A veces explicando las cosas se sobre entienden otras, y no es así. Yo me conformo con un like :D
  13. 1 like
    Muy bueno @Igor!! parece muy fluido y divertido, y como dicen todos, esos cambios de perspectiva y referencias a juegos van de 10. Además esos jefes están muy bien logrados, por lo menos de lo visto en los videos (Me recuerdan al viejo algoritmo de la viborita jaja) Ya que se están discutiendo la parte de los colores, hay cosas que me parecen que están bien y otras que no. Reconozco que falta un poco de balance de colores, ojo que es algo que ni algunos AAA consiguen, o que por lo menos lo que logran no es de mi agrado. También todo depende del estilo o estética que busques, sé que es difícil combinar sprites con elementos 3D (sean reales o simulados con normal maps). También he visto algunas superficies que no tienen un albedo bien definido pero sí un color + normal map. Aunque el relieve te ayuda bastante, la falta de un buen mapa de color base puede no mentirte lo suficiente (Ejemplo Video 1 a los 0:42). Este es un problema general que supongo todos tenemos, en mi caso se me ha hecho dificil crear una ilumincación o textura a partir de superficies sin mapas. Lo que te puedo decir (y lo más inmediato que yo modificaría) es que los colores del trail de los misiles me desconcentran mucho, es una cosa mía probablemente. EJ: Las partículas rojas-amarillas "colorean" demasiado la escena mientras que el fondo me dice que el tono en general es menos saturado. Me da la sensación de que los dos colores juntos no funcionan para esa escena. Fuera de estos detallecitos está barbaro, a darle para adelante, la parte difícil (gameplay, movimiento, AI, etc) ya está o va queriendo, te queda tocar cositas de estética/colores. En resumen pienso que podrías considerar retocar o reevaluar los siguientes aspectos: Los trails coloridos Algunos normal maps están a tope. Agregar texturas de albedo, o aunque sea textura de detalles. Theme de colores, o seguir una paleta de colores general. Si esto no es lo que buscas podés meter efectos de cámara (color grading, tonemapping, etc) también podrían funcionar. Y la última, si podés evitar las particulas con el addictive por defecto de Unity (las "Default Particles") hacelo (no se si las usas o no), es lo primero que te vende (El típico "lo hizo en Unity y no quiso pagarle a un artista" jaja). Si tenés texturas propias (no tienen que ser lo mejor) agregáselas. Saludos
  14. 1 like
    Totalmente de acuerdo con @Belegor Talagorsson. Yo lo miro más desde un punto de vista semi-profesional como acabado, sin querer exigirle más. A veces ese salto no es tan positivo como parece. El toque actual le da la veracidad que tiene.
  15. 1 like
    Me sumo al comentario de @iRobb el movimiento ya solo en el vídeo parece bastante satisfactorio. Al principio me confundían un poco todas esas partículas que hay en los mapas a modo de decoración, pero conforme pasaba el vídeo al final me acostumbré, Imagino que al jugarlo pasará lo mismo. El cambio de perspectiva y de mecánica según los niveles me parece una genialidad, todos los guiños y throwbacks a estilos de juego de otras épocas me encantan y creo que le dan una variedad muy llamativa. Sin embargo no puedo por más que lo intento dejar de verle cierto acabado como amateur, que choca un poco con la brillantez de la idea y su ejecución. La verdad, no sabría decirte qué es en concreto, pero hay algo en la parte artística (como ya han mencionado puede que sea el tema de la coherencia, o simplemente que el arte tenga poco detalle, no lo sé) que no me convence. Yo creo que el core está muy bien, y es muy sólido, pero si lo quieres llevar al siguiente nivel igual es hora de ponerse a añadirle "módulos" que le den un valor añadido (personalización de la experiencia tal vez, los modos que has mencionado...). Es mi opinión al menos
  16. 1 like
    Eso suena incluso mejor Jardem. me alegro que te haya salido el efecto.
  17. 1 like
    Se me olvidaba, ¡muchas gracias! Al final he utilizado varias diferentes(Impulse, Force y VelocityChange si no recuerdo mal), le he dado una fuerza en Y en el Enter, diferentes fuerzas, vectores y rotaciones en los 3 ejes para simular un movimiento en el Stay y otra fuerza con un vector y rotaciones aleatorias para expulsarlo en el Exit.
  18. 1 like
    A mí este look sí me gusta. Los tiles del background (paneles de piedra/metal, la "neblina" del 0:20 de tu primer video...) creo que están muy logrados y poco necesitas tocar ahí. La iluminación le da un buen aspecto y variación. En la parte de la lava la iluminación bien, el fondo ya no tanto. Claro, @pioj tiene razón en que algunos sprites y las partículas desentonan, pero yo no lo he notado tanto hasta que llegamos a las fases en 3D en tercera persona por las texturas en las paredes. Las fases oscuras podrían mejorar con unos sprites algo más acertados, o eso creo, que yo tampoco soy artista gráfico. El hud a mí me gusta. Que puede ser mejor, seguramente, pero para mí pasa el corte. Yo pondría el radar algo transparente. Tu juego parace que tiene mucho material "jugable", diferentes fases, diferentes mecánicas... y a falta de probarlo, a mí me tiene buena pinta (yo agradezco el minijuego entre fase y fase de un shot'em up). Con tantas mecánicas, necesitas un esfuerzo extra en los gráficos y se nota que en las fases en tercera persona, la nave y las paredes están menos trabajadas. Yo te diría que no desistas de seguir puliendo. Ahora ya lo puedes enseñar, quizá consigas un grafista que quiera colaborar (sí, todos queremos uno, pero tú ya tienes un juego funcionando). Y luego, depende del precio. Yo no espero lo mismo de un shoot'em up de 20+€ que de un juego indy que es más barato y donde los jugadores saben que se ha invertido mucho menos tiempo. Pero la consistencia sí es importante, y lo cierto es que los gráficos venden.
  19. 1 like
    Por favor, me encanta! Eres bueno. Movimiento rápido y música trepidante. Enhorabuena!
  20. 1 like
    Hola buen dia...quería consultar si alguien sabe como poder disminuir el tamaño en MB de la apk resultando luego de darle en BUILD. necesito una apk para muchos targets y objetos 3d. con un solo target y 1 objeto 3d, la pak peso 19 mb y tengo q hacer minimo 20 target. desde ya agradezco sus comentarios
  21. 1 like
    Y aquí la versión WebGL para poder probarlo sin descargar nada: https://www.anastutia.com/static/game/webgl/
  22. 1 like
    Muy bien. Muy interesante el tutorial. El original, original fue Spy Hunter en los 80's:
  23. 1 like
    Siempre he jugado a esta clase de juego y siempre me ha fascinado ya que puedes agregarle disparos mientras conduces. En vez de coches puedes poner una Nave en fin puedes agregarle muchas cosas a un juego tan simple y a la vez que enganche a niños. Por desgracia no creo que cuelgue el juego pero os voy a enseñar hacerlo en androide aunque podréis hacerlo para Facebook. Ya que este juego parece de carreras pero no es de carreras ya que nosotros solo moveremos hacia la derecha e izquierda lo único que se mueve es la carretera que vamos agregar. Además que si puedo intentare agregarlo un lanzador que dispare a los enemigos. Y por supuesto poner a los enemigos en la pista y también la recompensa que pueden ser monedas suscriptores, copa. Todo depende de nuestra imaginación., El juego al que tratamos de emular esta hecho en 2D y fue un juego que cuando salió en Androide tuvo mucho éxito , ya que yo como mucha gente me descargue el juego y jugué a dicho juego hoy tal y como avanza la tecnología ese juego es poco apetecible ya que los gráficos y diseño de nuevos juegos hechos para Androide son asombrosos y sin duda un juego en 3D vende más que un juego en 2D. Pero el juego que vamos hacer tiene emocionante y eso engancha cuando estas a punto de terminar una cosa pero de nuevo los obstáculos del juego lo evitan y se convierte en frustración quizás no sea el mejor juego del mundo el que tratamos de hacer pero engancha. Sin duda es algo que creo que es sencillo y voy a tratar de enseñaros hacerlo, y como cualquier otra persona es posible que cometa fallos en la elaboración de dicho juego , pero intentaremos realizarlo de la mejor manera posible.
  24. 1 like
    Las funciones de los eventos de colisión solamente son llamados en el gameobject que contiene el collider. Propaga desde el objeto que colisiona y tiene el ontrigger un evento para que un gameobject externo lo reciba vía delegate. https://learn.unity.com/tutorial/events-uh#
  25. 1 like
    ¡Genial! ¡Gracias por el aporte! Este se va de cabeza a mi librería de assets por si alguna vez hago un juego 3D
  26. 1 like
    Muy buena la app :) Coincido con pioj, Unity para hacer una app nativa... mal asunto. Principalmente por la build size (aparte del resto de cosas). Esta app nativa fijo que no pasa de 10 megas, con Unity pues... Aparte el por culo que da trabajar con la red y usar el https para descargar datos, acceder a sdks externos como los mapas en tu caso... Cuando haces esto en nativo y luego lo haces en Unity... te das cuenta que Unity es lo que es, un motor para juegos y punto :) Ya se sabe el dicho, "aunque la mona se vista de seda, mona se queda"
  27. 1 like
    Como ha dicho Pioj, los colliders de unity no se pueden llevar a Blender. Lo que puedes hacer, es abrir el tractor en Blender (imagino que el tractor, tendrás un prefab, pero en algún lugar tiene que estar el modelo también, puede que un .obj o un .fbx, ambos archivos se pueden importar directamente en blender), y una vez tengas el tractor ahí crear polígonos para que hagan colliders, y luego exportar ese modelo de vuelta a Unity y usarlo como colliders poniéndole el componente Mesh Collider. Aunque ¡ojo!, los colliders y las físicas son partes que más rendimiento consume en los motores de videojuegos, mientras los colliders sean más complejos (más vértices, es decir, más caras y más polígonos) pues más tiempo necesita para comprobarlos. A B En el caso A, requiere menos pasos para verificar si el cuadrado azul está tocando el cuadrado rojo. Mientras que en el caso B, se requieren muchos más pasos para ver si el cuadro azul está tocando la figura roja. Esto quiere decir, que si vas a hacer algún polígono de colisiones para el tractor, este polígono debe ser tan low poly como se pueda. Si puedes usar cubos de Unity para ello, perfecto, si necesitas algo más preciso (un shooter, o si es importante la forma para las físicas, etc...) entonces crea un mesh para el tractor en blender, lo importas a unity y lo usas con el mesh collider (que para eso está). No hace falta que te preocupes de la textura, puedes literalmente borrar el componente del "Mesh Renderer" puesto que no necesitas que el objeto se dibuje durante el juego. Pero eso, para colliders "low poly".
  28. 1 like
    La cámara esa sencilla del CamaraPlayer public class CamaraPlayer : MonoBehaviour { public float mouseSensitivity = 10f; public float dstFromTarget = 2f; public Vector2 pitchMininMax = new Vector2(-40, 85); public float rotationSmoothTime = .12f; Vector3 rotationSmoothVelocity; Vector3 currentRotation; float yaw; float pitch; public GameObject PLAYER; public Transform target; private void Awake() { PLAYER = GameObject.FindGameObjectWithTag("Player"); target = PLAYER.transform; } void LateUpdate() { yaw += Input.GetAxis("GiroHorizontalCamara") * mouseSensitivity; yaw += Input.GetAxis("Mouse X") * mouseSensitivity; pitch -= Input.GetAxis("MovVerticalCamara") * mouseSensitivity; pitch -= Input.GetAxis("Mouse Y") * mouseSensitivity; pitch = Mathf.Clamp(pitch, pitchMininMax.x, pitchMininMax.y); currentRotation = Vector3.SmoothDamp(currentRotation, new Vector3(pitch, yaw), ref rotationSmoothVelocity, rotationSmoothTime); transform.eulerAngles = currentRotation; transform.position = target.position - transform.forward * dstFromTarget; } } Está usando el valor yaw (que irá desde -infinito hacia +infinito aunque en la práctica, es de -360 a +360), es un ángulo que usas después para ponérselo a la Y en el transform.eulerAngles. En este código, ese ángulo se modifica moviendo el ratón, pero si tuvieras un enemigo, o un objetivo específico al que apuntar la cámara, lo que necesitas es hallar el ángulo para que apunte a ese punto. De modo que si tienes la X y Z de la posición del enemigo... En ese código que tienes después de hacer la rotación, simplemente mueve la cámara a la posición del jugador y da unos pasos hacia atrás, luego según veo yo no haría falta hacer más modificaciones para el asunto de la rotación. Para el pitch, la idea es igual, pero usando la distancia y la altura (Y) en lugar del X y Z. (Si haces algún enemigo volador pues puede que lo necesites, pero ten cuidado de aplicar también la línea del clamp o puede que la cámara empiece a dar vueltas raras y a ponerse bocabajo). Otra cosa sería cuando hallar el yaw mediante trigonometría y cuando mover el yaw mediante el ratón, se puede hacer dos cámaras, o también podrías poner alguna variable Transform para el "objetivo" de la cámara, si es igual a null, moverla con el ratón, si es distinto de null, hallar el yaw con la fórmula.
  29. 1 like
    Hola Jardem. No tengo ningún script así a mano, pero sin duda veo seguro la necesidad de programar un poco para que ese efecto ocurra. La idea que me viene a la cabeza es la siguiente: - Creas un trigger, un cubo o un cilindro y lo pones donde esté el tornado. Este objeto le creas un script, para que cuando la bola entre ahí, pues empiece el efecto. - En el script, al ser un trigger, puedes usar las funciones de trigger en vez de la Start y Update de siempre. Las funciones de trigger que me refiero son las siguientes: OnTriggerEnter: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html (Se dispara cuando el collider de la bola entra en el trigger) OnTriggerExit: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerExit.html (Se dispara cuando el collider de la bola sale del trigger) OnTriggerStay: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerStay.html (Se dispara en cada frame mientras el collider de la bola esté dentro del trigger) Depende de como sea el script de control de la bola, puede que tengas que hacer contrarrestar más cosas o menos, pero con esas funciones deberías poder tener algo más de control. - Si por ejemplo, el controlador de la bola es el rigidbody estándar de Unity, pues podrías hacer que en el OnTriggerStay, la bola recibiera una fuerza que la mueva. (El vector de dirección de la fuerza, podría variar con el tiempo, quizás la Y sea siempre hacia arriba, pero la X,Z podría estar cambiando dependiendo del ángulo para que la bola vaya recorriendo un círculos mientras está dentro del tornado , las fórmulas trigonométricas creo que serían las siguientes: Dado el ángulo "A" y el radio "r" X = cos (A) * r Z = seno(A) * r La función para mover la bola debería ser AddForce en el OnTriggerStay, aunque no recuerdo qué modalidad habría que ponerle en el "ForceMode" (A penas uso el Rigidbody :( ) https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html https://docs.unity3d.com/ScriptReference/ForceMode.html (Yo creo que "Force" debería valer, pero prueba con los 4 por si acaso).
  30. 1 like
    Lo voy a probar. se ve divertido :).
  31. 1 like
    Bueno en mi opinión, seria desactivar la cámara del jugador o el scritp del Player cuando estuvieras cerca del enemigo en cuestión que quieres fijar, luego emparentar esa cámara al enemigo, usar un Array almacenar el total de enemigos y una tag o algo para saber cual enemigo en especifico es el quieres fijar. luego de emparentarlo la cámara al enemigo, le das distancia para que puedas ejecutar lo que gustes durante ese tiempo, por ultimo le das salida, todo y des-emparentas la cámara y se le devuelves al jugador, vuelves a activar el scritp de la cámara del jugador. https://answers.unity.com/questions/715058/lock-target-and-orbit-it.html
  32. 1 like
    hola en ese script no se puede ver como el "player" gira para dar la espalda a la camara... supongo que esa parte esta en el script del player... en el script tendria que hacer dos funciones, una para el control normal de la camara, y otra para cuando esta fijada... tampoco has dicho como quieres fijarla... que se fije mientras mantengas pulsado un boton? y cuando lo sueltes que se "libere" la camara? pues seria algo asi... public class CamaraPlayer : MonoBehaviour { public float mouseSensitivity = 10f; public float dstFromTarget = 2f; public Vector2 pitchMininMax = new Vector2(-40, 85); public float rotationSmoothTime = .12f; Vector3 rotationSmoothVelocity; Vector3 currentRotation; float yaw; float pitch; public GameObject PLAYER; public Transform target; private Transform enemyTransform;//transform del enemy public float enemyOffsetY = 3; private void Awake() { PLAYER = GameObject.FindGameObjectWithTag("Player"); target = PLAYER.transform; } void LateUpdate() { //buscar el enemy mas cerca del centro de la pantalla if (Input.GetMouseButton(1)) { GetMoreCenteredEnemy(); } //que se fije la camara mientras mantengas pulsado el boton derecho del raton if (Input.GetMouseButton(1)) { fixetToEnemy(); } else { NormalCamera() } } void NormalCamera() { yaw += Input.GetAxis("GiroHorizontalCamara") * mouseSensitivity; yaw += Input.GetAxis("Mouse X") * mouseSensitivity; pitch -= Input.GetAxis("MovVerticalCamara") * mouseSensitivity; pitch -= Input.GetAxis("Mouse Y") * mouseSensitivity; pitch = Mathf.Clamp(pitch, pitchMininMax.x, pitchMininMax.y); currentRotation = Vector3.SmoothDamp(currentRotation, new Vector3(pitch, yaw), ref rotationSmoothVelocity, rotationSmoothTime); transform.eulerAngles = currentRotation; transform.position = target.position - transform.forward * dstFromTarget; } void FixedToEnemy() { if (enemyTransform != null) { transform.position = target.position; Quaternion oldRot = transform.rotation; transform.LookAt(enemyTransform.position - (Vector3.up * enemyOffsetY)); transform.rotation = Quaternion.Lerp(oldRot, trasnform.rotation, rotationSmoothTime) transform.position -= transform.forward * dstFromTarget; } else { NormalCamera(); } } void GetMoreCenteredEnemy() { Vector2 screenCenter = new Vector2(Screen.width/2, Screen.height/2); GameObject[] enemies = GameObject.FindGameObjectsWithTag("Enemy"); float centerDist = 100000; foreach (GameObject enemy in enemies) { Vector3 screenPos = cam.WorldToScreenPoint(enemy.transform.position); float dist = Vector2.Distance(screenCenter, new Vector2(screenPos.x, screenPos.y)); if (dist < centerDist){ centerDist=dist; enemyTransform = enemy.transform; } } } } ??? no se porque se han descuadrado todas las "llaves"... he pasado tu funcion "LateUpdate" a "NormalCamera"... y he añadido una que elige el enemy mas cercano al centro y otra que hace que la camara le mire... he añadido un valor de "offset" para que el enemy quede mas arriba del centro de la pantalla... creo que funcionara... pero no lo he probado... igual da algun error...
  33. 1 like
    Conoces los Physics Joints? creo que es justo lo que buscas. No se si hablas de 2D o 3D pero hay componentes para ambas opciones. Aquí hay un vídeo que te puede ayudar a encontrar el que más útil en tu caso:
  34. 1 like
    Voy a reunir pequeños tips de Unity que se pueden resumir en pocas frases. Esta lista se irá agrandando poco a poco en el futuro. Podéis añadir los vuestros si queréis. La idea es TIP + imagen representativa. Puede usar el atributo MenuItem para agregar menús contextuales que pueden llamar a funciones estáticas. Además, si desea crear teclas de acceso rápido, puede agregar caracteres especiales ("%" para ctrl, "#" para shift, "&" para alt) Recuerde guardar las cadenas repetidas en una variable constante. Verifique que su sistema de partículas tenga un culling automático. Si no tiene,revise las razones o use CullingGroup Puede usar el atributo ContextMenu para probar su código en la ventana del editor No olvide optimizar sus Animators con el modo de selección. Esto deshabilita la animación cuando no son visibles.
  35. 1 like
    Muy buena pinta, y con mucho trabajo detrás! Felicidades. El trailer es muy pero que muy profesional, y el juego esta muy bien. He marcado un par de holes en el minijuego de futbol, pero no me aclaro mucho de como pillar a los otros zombies, así que solo me escapo Por cierto, no conocía esa plataforma de distribución gamedistribution.com. Que es como una especio de Kongregate? Pero aparte hay publishers? .no lo acabo de pillar, como monetizan?
  36. 1 like
    Muy bueno! Felicidades
  37. 1 like
    creo que quieres algo como en zelda: ocarina of time... primero tienes que tener una lista o array de los enemigos luego, cuando pulsas el boton de "fijar" enemigo, tienes que tener una funcion para ver cual es el mas cercano al centro de la pantalla (se hace con camera.worldToScreenPoint o algo asi) y entonces "cojes" ese transform como objetivo. luego, dependiendo como muevas la camara normalmente, pues lo que tienes que hacer es que mire hacia al enemigo... puede ser de varias maneras dependiendo como coloques la camara detras de tu personaje... la camara es libre? esta el protagonista siempre dando la espalda a la camara? el protagonista dispara o lanza flechas o algo hacia donde mira la camara? etc... si pones aqui el script o los scripts que controlan la camara podremos ayudarte mas facilmente
  38. 1 like
    Añadir una transform al enemigo en el punto de distancia que te interese. Tener una cámara disabled. Cuando llegue el momento, asigna la cámara a la transform y que pase a enabled. Realiza una rotation local de la transform o la cámara. Lo de que giren entorno al enemigo desde la posición del jugador no lo acabo de entender, ya que desde esta cámara secundaria lo que se verá es al enemigo en la rotación. Pero vamos, creo que te servirá de base.
  39. 1 like
    Actualización #3. - Agregado panel info de la clase del Crewild en pantalla de estadística. - Bonificanción de daño. - Efectividad del acción. -Agregados 3 nuevos ataques. -Esquive: incrementa la estadística de evasión hasta que concluya la batalla. - Triple Impacto: Puede repetir un ataque de 1 a 3 veces -Disparo de energía: Carga de energía lanzada. - Agregado 3 nuevas criaturas. - Nueva tema en fase de batalla: Space Ballad - Snyder Vega https://drive.google.com/open?id=11ueji-K9lNlVYfENrZxBdhYhpPyRrf6c Hola actualmente me gustaría agrandar un poco mas a la fase, una zona acuática y su respectiva movilidad, corregir los bugs mas visibles ademas de emparejar mas el incremento de niveles por lo que están muy desbalanceado. Espero poder poner mas contenido en la prontitud, muchas gracias si llegaste hasta aquí. vuelvo a poner la versión mas reciente 0.0.3 Versión 0.0.3: https://drive.google.com/open?id=1Nv8W8MKEaaeSGv7409w9NA91kitAn6KU
  40. 1 like
    Water Toon Este será la última parte del tutorial introductorio. Así que para acabar os traigo un shader de agua estilizada. Para empezar, como en los anteriores, creamos un nuevo shader PBR Graph con su material correspondiente y se lo asignamos a un plano creado en la escena. Antes de entrar en profundidad con el shader, necesitamos poder acceder desde dentro a una textura de profundidad de la cámara. Esto veremos posteriormente que lo usamos para el efecto que producen los objetos que están dentro del agua. Si revisamos el gif, vemos que los pies y parte de la caja están dentro del agua. Para poder activar el acceso, simplemente tendremos que ir al asset que controla el LWRP. Puedes localizarlo rápidamente en Project Settings/Graphics. Si pinchas en el asset, te llevará a él en la ventana Project. Selecciónalo y en el inspector activa el toggle Depth Texture. Una vez activado, podemos abrir el editor de nuestro nuevo shader y ponernos a trabajar con él. Vamos a establecer en el PBR Master (en el engranaje) el tipo de surface Transparente, ya que el agua a diferencia de los anteriores sí que debe serlo. Aunque puedes probar posteriormente con diferentes valores para ver el resultado. Para el desplazamiento de vértices vamos a basarnos en el anterior ejemplo. Podemos copiarlo o volver a crearlo si recuerdas el mecanismo. Simplemente añadimos a la posición del vértice la normal multiplicada por el ruido. En esta ocasión, vamos a usar otro tipo de ruido con el nodo Gradient Noise. Para nuestro efecto de agua es más útil ya que ofrece más fuerza en las frecuencias altas, que usaremos para las olas. Como ves he creado las variables necesarias para poder editarlas desde el propio material. Ahora simplemente necesitamos añadir algo de movimiento a las olas. Para eso, ya conocemos el nodo de tiempo. Vamos a multiplicarlo por el nodo de ruido. Para ello necesitamos un nodo auxiliar de UV que nos permita mover las coordenadas. Ese nodo es el de Tiling and Offset. Lo añadimos y conectamos el nodo de tiempo. Luego conectamos la salida a la entrada de UV del ruido. He añadido un Multiply para controlar la variable tiempo por editor también. Con esto tendríamos el efecto de olas simulado. Puedes cambiar los ajustes desde el editor a tu gusto. Ahora pasaremos a la parte del color. Para el efecto de la espuma de las olas vamos a volver a usar un ruido, esta vez el Simple Noise nos valdría, aunque se libre de elegir, incluso puedes probar con Voronoi u otros si quieres. Al igual que con el efecto de oleaje, necesitaremos mover las Uvs con el Tilling and Offset y el Time. Para poder simular el efecto de espuma estilizada, usaremos el ya conocido Step. Con el limpiaremos la textura de ruido con el valor de entrada del Step. Además podemos multiplicar la salida del Step para cambiar el color de la espuma. Todo esto siempre haciendo uso de variables para poder editarlas posteriormente. Repito mucho esto, pero es muy importante poder cambiar tú o la persona encargada de eso los ajustes sin necesidad de abrir el shader. Solo faltó crear una variable para la entrada del Step, siéntete libre de hacerlo tú si lo crees necesario. En mi caso las espumas son blancas, así que no se aprecia el cambio con la multiplicación pero no tiene porqué ser así. Solo faltaría añadir el efecto de profundidad y darle color. Por otro lado buscamos el nodo Scene Depth qué es el que guarda la textura de profundidad de la cámara (lo que activamos anteriormente vamos). Una vez añadido, vamos a cambiar el Sampling Mode a Eye. Esto nos dará la profundidad convertida en unidades de espacio ocular. Esta textura la vamos a dividir por un valor para poder controlar su profundidad. Con esto a mayor denominador, más profundidad se consigue y viceversa. Podremos verlo posteriormente modificando el valor. Por último vamos a crear un Lerp para mezclar el color según la profundidad obtenida(con dos colores). Solo faltaría conectar las dos partes con un nodo Add y conectarlo a la entrada de Albedo. Con esto tendríamos nuestro efecto terminado. Espero que os sea útil y cualquier cosa no dudéis en preguntar.
  41. 1 like
    Buenas gente!! Después de bastante curro en mis ratos libres y unos 6 meses he subido mi segundo juego para Android PLAYBALL Es un sencillo juego en el que manejas una bola por distintos mundos temáticos, cada mundo consta de 9 niveles y un nivel extra de bonus (a este nivel se puede acceder si consigues medalla de oro en todos los niveles). En los niveles puedes ir recogiendo cubos de distintos colores que luego puedes intercambiar por tokens del juego con los que puedes comprar música para el juego o distintas "skins" para la bola. También he creado unos minijuegos que puedes desbloquearlos con los tokens que consigues, también consta de 9 niveles y uno extra de bonus: CUBE CATCHER: Se trata de conseguir todos los cubos en el menor tiempo posible. TIME ATTACK: Acabar el nivel lo más rápido posible. FLOOR IS LAVA: Tendrás que ir ascendiendo hasta arriba mientras la lava va subiendo. BOB´S GAME: En este nivel tendrás que coger todos los cubos en el menor tiempo posible teniendo cuidado de no tocar las trampas eléctricas. Para la forma de controlar la bola se mueve mediante físicas, me base en los típicos ratones antiguos que eran una bola grande externa https://en.wikipedia.org/wiki/Trackball#/media/File:Trackball-Kensington-ExpertMouse5.jpg pues al hacer rodar esa bola virtual mueves la bola del juego. A parte tienen un botón de salto que se incrementa según el tiempo que lo mantienes pulsado, también tiene otro de turbo. Para monetizar el juego he puesto vídeos recompensa que aparecen cada 5 minutos de juego (solo cuenta el tiempo cuando estas dentro de un nivel) si ven el anuncio entero pueden ganar aleatoriamente entre 2.500 y 10.000 tokens. Sino lo ven entero entra 1.000 y 2.500 tokens. También hay un apartado de logros que al conseguirlos te dan tokens. Os dejo algunas imagenes del juego también estoy preparando un video que os pondré por aqui cuando lo tenga terminado. Si lo descargais y me dais feedback os lo agradecere. Muchas gracias y saludos
  42. 1 like
    Kinematic 2D se puede adquirir ahora mismo en el Asset Store con un 30% de descuento, Aprovechalo! https://assetstore.unity.com/packages/tools/physics/kinematic-2d-136688 Y qué haces con los 5 dólares que te ahorras?? pues simple, los donas a Unity Spain
  43. 1 like
    Buenos días a todos, Después de muchos años por este foro, un trabajo de 4 años con una empresa de simuladores y vendidas de humo (en la que empleaba Unity3D entre otras cosas) y tras varios proyectos demasiado ambiciosos que se quedaron en el cajón de las buenas intenciones, al fin, he podido lanzar mi primer juego para dispositivos móviles. Agradecería muchísimo cualquier feedback que me ayude a mejorarlo y sobre todo a seguir aprendiendo. Para los usuarios más impacientes, aquí dejo el enlace para descargarlo, actualmente está excluisivamente publicado para Android. Time Room: Enigma Para el resto, bueno, os dejo algunos detalles por aquí: En primer lugar agradecer a la comunidad de Unity3D por tener un Asset Store tan rico en recursos gratuitos y lo mismo con Flat Icon, Freesound, Bensound y Turbosquid ya que sin ellos esto no habría sido posible. Resumen de trama Time Room: Enig ma, es un juego de aventura del género Escape Room, el protagonista es un físico que inventa una máquina que emplea objetos para poder viajar en el tiempo, este personaje tiene un cofre muy antíguo en su "laboratorio" también conocido como "Sala del Tiempo", dicho cofre es la pieza clave de este juego y averiguar su contenido es lo que llevará a nuestro querido físico a sumergirse en aventuras espacio-temporales, enfrentandose a los peligros y quebraderos de cabeza que eso pueda suponer. Resumen, situación del jugador Al jugador se le suelta en un punto intermedio de la trama, sin apenas ayuda y se le plantan varios misterios que resolver, al principio los "enigmas" son muy fáciles de resolver, pero esto se complica ya que para resolver muchos de ellos habrá que viajar a diferentes momentos espacio-temporales. El juego no obliga a los jugadores a comprender la historia (los jugadores más casual pueden jugarlo resolviendo los enigmas sin enterarase a penas del trasfondo) no obstante, los objetos, comentarios e interacciones, permitirán a los jugadores que quieran, adentrarse en la historia de Time Room: Enigma. Mecánicas Lás mecánicas son muy simples, hay una habitación (Sala del tiempo) donde está la máquina que permite viajar a través del espacio-tiempo, en dicha máquina se pueden insertar algunos de los objetos del inventario y nos transportarán a diferentes épocas y lugares. En cada lugar habrá secretos, trama y principalmente objetos que nos abrirán otras áreas del juego. Comentarios del desarrollo Como se puede apreciar, los estilos son muy sencillos, más bien diría funcionales, he empleado un mes y medio trabajando a destajo en él: Las mayores dificultades han sido el tener que pensar la historia, diseñar los puzzles y pruebas y que todo conectase con cierto sentido "lógico", además de tener que rehacer varias partes por temas de derechos de autor, ya que al no ser el autor del contenido audio visual, en muchas escenas tuve que perder tiempo cambiando cuadros, sonidos etc... (por ejemplo en lugar de usar un cuadro de Dalí, tuve que emplear uno de Da Vinci, ya que Dalí lleva menos de 100 años muerto y aunque las obras de dominio publico rondan entre los 50-70 años, no me la juego ya que me podrian reclamar derechos de imagen) Lo más fácil ha sido la implementación, ya que por suerte, tenía bastante claras las mecánicas y no he tenido que dar muchas vueltas, no obstante, lo más intrincado, ha sido generar un sistema de eventos flexible que me permitiese administrar cualquier tipo de interacción del usuario, manteniendo todo el contexto. Resúmen técnico para desarrolladores He mantenido un patrón MVC para todo elemento que tuviese conexión con interfaz haciendo más flexible el diseño. El patrón Singleton me ha salvado muchos quebraderos de cabeza (Decir que lo empleo en casi todos mis proyectos). Para librerias de terceros he empleado una clase Manager(Patrón Façade con Singleton) para centralizar y administrar todas las llamadas. Por ejemplo Newtonsoft, Google Play Games o Incluso la persistencia de PlayerPrefs de unity (a la que he llamado PersistenceManager) y centraliza toda la gestión de carga y guardado. Todos los datos de juego se almacenan en formato JSON, incluyendo la internacionalización. (También lo he traducido al inglés, sí, espero no haberla liado demasiado ) He empleado una consola, IngameDebugConsole del Asset Store (gratuita y muy buena por cierto) durante todo el desarrollo, para poder agilizarlo, simular interacciones, guardar/cargar, añadir/quitar objetos, viajar en el tiempo... Y bueno, que decir, que muchas gracias por vuestro tiempo y que si tenéis cualuier pregunta, estaré encantado de responderos, agradecería vuestro feedback y si os gusta, un voto en Google Play. ¡Saludos!
  44. 1 like
    Hola Megadok Si usas las físicas de Unity rigidbody, pues sí, el valor mass y el drag que menciona iRobb podrían ayudar en ese aspecto. Hace un par de semanas hice una pequeña escena jugando con esos componentes, puse una pelota que botaba constantemente entre dos rampas, y una cápsula que movías con el teclado. - Si la masa de la pelota, era superior a la de la cápsula, la pelota empujaba la cápsula al chocarle. - Si la cápsula tenía más masa que la pelota, esta no empujaba si no que rebotaba también como si chocara con otro objeto sólido. Aunque tuve dos problemas, 1º Estos valores tenían se veían afectados también por la fuerza con la que se mueve el objeto. Se podía dar el caso de que cuando la cápsula tuviese más masa que la pelota, a lo mejor la pelota si tenía poca fuerza, no podía mover la cápsula, pero si esta venía con mucha fuerza, sí podía mover la cápsula un poco, esto se podía evitar aumentando mucho la masa de la cápsula, aunque siempre pasará lo mismo, mayor fuerza -> más masa es necesaria para que no le afecte... Entiendo que en un juego, se supone que las fuerzas están más o menos controladas, no es que ninguna fuerza vaya a descontrolarse... pero en fin, más baja o más alta, siempre habrá una "frontera". 2º El otro problema es que quizás la pelota no podía empujar a la cápsula, pero la cápsula sí podía empujar la pelota. Por lo que no sé si eso es lo que realmente quieres en tu juego (que los enemigos no empujen al jugador, pero el jugador sí empuje a los enemigos. Ó viceversa). Tal vez incrementando el drag podría ayudar a esto. (aunque tendrás que modificarlo cuando quieras mover al personaje o puede que el drag también impida que el personaje se traslade...) /-----------------------------/ A mi se me ocurren 2 opciones. 1º en vez de usar el sistema de físicas de Unity, hacer los personajes con character controller, este componente también tiene una función Move y reacciona ante los colliders, pero no aplica tantas fuerzas físicas como el rigidbody (aunque eso significa que hay que programar más). 2º usando el sistema de físicas, pero poniendo un trigger alrededor de los enemigos de modo que cuando el jugador entre en ellos, la velocidad de las físicas en el rigidbody pase a ser [0,0,0]. Necesitará pulirlo, especialmente para que no se quede atascado dentro (por ejemplo, que el "bloqueo" solo se ponga si el movimiento se está realizando en la dirección dónde está el enemigo). Me gusta más la 1º, pero supongo que depende de la clase de juego que estés haciendo. O_ò
  45. 1 like
    Un tema de la mass que tengan y también el valor de drag (hablo de memoria con los rb 3d). Si son iguales y el otro no tiene mucha velocidad. También no sé si el rb 2d tiene physics material para hacer un pequeño rebote.
  46. 1 like
    A mi se me ocurre crear un par de capas (layers) para el jugador, una que efectivamente detecte las colisiones con el entorno, y otra que traspase dicho entorno. y activar dichas capas mediante código cuando entre o esté dentro de ciertos triggers. (Supongo que no querrás que "siempre" que pulse la tecla abajo, atraviese el suelo, esto sólo lo hará en ciertas plataformas ¿no? O_ò, puedes marcarlas con un trigger). Lo importante es que las capas una no interactué con la física (para que pueda atravesarlas), esto puedes gestionarlo en el panel de físicas (Edit -> Project Settings -> Physics) En esta por ejemplo, Layer 3 no detecta las colisiones con Layer 1 y 2, mientras que Layer 2, no detecta las colisiones con Layer 1 (ni Layer 3).
  47. 1 like
    En Unity no hay un componente de multilenguaje, sino que cada uno se crea o compra el suyo. Si el juego está bien hecho, las cadenas estarán en algún objeto en concreto y no dispersas a piñón en el código. Hay una herramienta tipo "hacker" para poder ver el contenido de los assets en Unity, incluido su código sino está ofuscado. No la pongo aquí porqué es como tirar piedras al tejado. Por otro lado, yo me aseguraría antes de emprender algo así si cualquier modificación de los archivos te va a dejar el juego inservible. Lo digo por la protección de steam, que seguro que un CRC tiene. Existe otra opción más que considero más adecuada: hablar con el desarrollador ya que muchos ven con buenos ojos que traduzcan sus juegos y podría darte directamente las tablas de las cadenas existentes.
  48. 1 like
    Claro. Necesita más velocidad para llegar a un punto más lejano. Están actuando las físicas. Nunca me cansaré de decirlo, pero esa manera no se debe utilizar. No lo digo yo, está en manual de Unity: https://docs.unity3d.com/ScriptReference/Rigidbody-velocity.html Tienes que utilizar algunas de las funciones del rb e ir ajustando los factores debidos a la distancia y al resto de valores del rigibdody (mass, frinction, bla bla). Si no, es mejor no utilziar físicas.
  49. 1 like
    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!
  50. 1 like
    Utiliza el seno del tiempo, esto te va a dar valores del -1 al 1. Entonces el drone ya se podría mover de izquierda a derecha. El resultado lo multiplicas por la distancia que quieras que haya entre tu nave y el drone. Repite lo mismo con el coseno del tiempo pero el resultado lo aplicas al eje vertical. Esto te va a dar la posición con respecto al origen del mundo, o sea, siempre va estar alrededor de (0, 0). Para que vaya alrededor de tu nave solamente sumas la posición de la nave a la posición que calculaste del drone. No puedo probarlo ahora mismo pero sería algo así: public Transform nave; public float distancia = 5f; private void Update() { // Sin retorna un valor entre -1 y 1 a medida que el tiempo avanza var x = Mathf.Sin(Time.time); // Igual el coseno. Ambas funciones juntas forman un circulo var y = Mathf.Cos(Time.time); // No sé que ejes estás usando pero suponiendo que es un top-down literal // "X" y "Z" serían los ejes // Esta posición estaría entre [(-1, -1); (1, 1)] var nuevaPosicion = new Vector3(x, 0, y); nuevaPosicion *= distancia; // Le sumamos la posición de la nave para que este alrededor de ella nuevaPosicion += nave.position; }
×
×
  • Create New...