Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 04/23/2012 in all areas

  1. 12 points
    Muchos lo sabréis y otros no, pero hay una lista de recursos bastante tocha hecha en zeef.com de recursos para el desarrollador de videojuegos. Espero que os sea de utilidad! https://game-development.zeef.com/daniel.cuadrado.gonzalez
  2. 8 points
    Hola gente les dejo un link a mi curso de youtube, totalmente gratuito y disponible para la comunidad. Esta totalmente actualizado al 2020 y hecho por mi, soy programador con titulo universitario y 10 años de experiencia en unity! El curso esta dividido en niveles de dificultad, Comenzando para gente que nunca toco unity y terminando con contenido muy avanzado como creacion de framework propios para multiplayer, entre otras cosas. Para que los usuarios mas avanzados puedan saltearse las partes que no les sirve y explorar mas fácilmente el contendio. Son mas de 200 videos, con muchisimas horas de grabacion que complete con la intención de subir a udemy. Al terminarlo cambie de parecer y ahora lo estoy subiendo de forma gratuita a youtube. Se sube 1 video cada dia de forma atomatica, y ya estan todos los videos seteados para subirse a youtube de forma automatica a este ritmo. Link: https://www.youtube.com/channel/UCl3p_fKnx2-GIUWVbiDAcMg Sin mas, espero verlos por mi canal y que les sirva el curso. Un saludo!!
  3. 7 points
    Mi primer vídeo juego en Unity 3D Personal. También hecho con MakeHuman y blender. Mi blog
  4. 7 points
    En la anterior entrada hablé sobre trigonometría, repasando las razones trigonométricas y viendo el teorema de pitágoras. Si no lo recuerdas o has llegado nuevo aquí, míralo antes de continuar (enlace debajo). Trigonometría Vectores Matrices Funciones Introducción Si estás familiarizado con motores de videojuegos como Unity, conocerás el concepto de vector ya que se usa habitualmente. Pero ¿qué es realmente un Vector? Un vector básicamente es una flecha que apunta en una dirección y que tiene una longitud concreta: Esto sería un ejemplo de un vector y cualquier flecha apuntando en cualquier dirección sería otro ejemplo. Pero ¿cómo representamos esto? Para poder hacerlo tenemos que llevarnos nuestro vector a un sistema de coordenadas (x e y) y establecer el origen del vector en el centro del sistema. Por si no recuerdas que era un sistema de coordenadas, es una forma de visualizar un punto en el espacio. En este caso el espacio es 2D por lo que se representa con dos líneas, una horizontal (representado por el valor X) y otra vertical (representado por el valor Y) que se cruzan en un punto, llamado centro: Así quedaría nuestro vector anterior dentro de un espacio de coordenadas. Esto, por ejemplo, podría representar el movimiento de una nave en su proceso de despegue. Comienza en la posición (0,0) y sigue en la dirección del vector hasta llegar a su objetivo. Teniendo en cuenta que X es el valor horizontal e Y el valor vertical, el vector sería (2,1) Pero ¿qué podemos hacer con esto? Como has visto puedes representar movimientos con ellos, por ejemplo. Pero para ver de forma práctica su uso vamos a usar Unity3D. Cualquier versión te servirá para este propósito puesto que solo vamos a tocar código básico. En mi caso usaré la versión 2020.1. Si usas otro motor la teoría sigue siendo válida pero tendrás que buscar la forma de adaptarlo por tu cuenta. Unity internamente usa vectores para colocar un objeto dentro de la escena (realmente esto es incorrecto ya que usa una matriz, pero no nos adelantemos). Si vas al componente Transform (crea un gameobject nuevo si no tienes ninguno) te encontrarás con este Vector3 (un estructura propia de Unity) que contiene 3 valores: Estos son la posición en X,Y,Z. Pero ¿pero qué son estos valores? Pues al igual que la gráfica anterior nos indican que desde el centro del mundo hasta la posición de este objeto el vector es (0,0,0). Vamos a ver qué podemos hacer con esto. Para ello creamos un objeto de nombre Player y otro de nombre Target. Los colocamos en diferente posición y le asignamos diferentes iconos para poder diferenciarlos: Recuerda que puedes cambiar el icono en la siguiente pestaña: Una vez hecho esto vamos a crear un nuevo script de nombre Player y lo vamos a añadir al objecto Player. En este script vamos a añadir una variable Transform pública de nombre target y vamos arrastrar nuestro Target a través del inspector. Con esto tendremos acceso al vector de posición del Target desde nuestro Player. Ya tenemos acceso a los dos vectores de posición, el del personaje y el del objetivo. Sabiendo esto ¿cómo hacemos que el personaje se mueva hacia el objetivo usando vectores? Pues aquí llega la parte interesante ya que si restas el vector de posición del objetivo con el vector de posición del personaje, el resultado es el vector necesario para llevar el player al objetivo. Veámoslo gráficamente creando la siguiente función: Si pulsamos play al añadir este código, veremos cómo el personaje se mueve hasta la posición del objetivo. Vale parece que se mueve, pero quiero más. ¿Que tal si medimos la distancia que hay entre uno y otro antes de moverlo? Para esto vamos a recordar la trigonometría que aprendimos en la parte anterior. Magnitud La magnitud de un vector es la distancia que hay entre dos puntos. En nuestro caso sería la posición del personaje y nuestro objetivo. Para calcularla solo tenemos que aplicar la fórmula de la distancia. Esta fórmula es simplemente el teorema de pitágoras disfrazado, y lo vamos a ver en la siguiente imagen: Como puedes ver, nosotros lo que queremos calcular es la distancia (h) por lo que podemos convertirlo en un triángulo añadiendo X e Y. Ahora solo tenemos que usar pitágoras para despejar h. ¿Lo recuerdas? Vamos a resolverlo en código. Para ello vamos a crear una clase estática nueva llamada BasicMath donde vamos a ir añadiendo nuestras funciones matemáticas a partir de ahora. Seguiremos usando Mathf (Unity) o Math (System) para realizar las operaciones básicas que se salen del objetivo de este tutorial. Mencionar que todos los cálculos e igualdades que haremos aquí serán basados en 2 dimensiones. Una vez se han entendido correctamente los cálculos, solo hay añadir la componente z. Esta sería nuestra implementación del teorema de pitágoras. Para ver la distancia simplemente podemos añadir un log en nuestra función MoveToTarget: Si estás familiarizado con Unity ya sabrás que por defecto nos soluciona todos los problemas de vectores con su estructura Vector. Podemos acceder directamente a la magnitud de un vector desde dentro del mismo de la siguiente forma: Como puedes ver, ambos resultados son iguales, aunque nuestra implementación es menos óptima que la que usa internamente Unity. Por lo que esta clase BasicMath y todo lo que contenga es únicamente para uso educativo. La magnitud tiene un pequeño problema y es que hacer una raiz cuadrada es algo costoso a nivel computacional. Por eso habitualmente se usa el valor antes de pasar por la raiz cuadrada. Seguirás teniendo un valor que representa la distancia pero será más eficiente. Podemos crear esta implementación de la siguiente forma y equivale al SqrMagnitud de la clase Vector: Esto es genial, tenemos al personaje moviéndose al target y conocemos su distancia hasta él. Pero no queremos que el player avance directamente hacia el objetivo, sino que lo haga poco a poco a la velocidad que nosotros queramos. Para esto vamos a necesitar normalizar nuestro vector. Normalización Normalizar un vector es cambiar su longitud a 1, manteniendo su dirección. En nuestro caso de ejemplo, el vector “dir” que tenemos. Al cambiar su longitud a 1 podemos controlar la velocidad de movimiento mediante un valor multiplicador. ¿Cómo calculamos el vector normalizado (no confundir con el Vector normal)? Dividiendo el vector por su magnitud: Podemos implementar rápidamente esto en nuestra clase BasicMath: Podemos ver que equivale al valor normalized de la clase Vector: Una vez tenemos el valor normalizado, podemos multiplicarlo por un valor y hacer que el personaje se mueva en función del tiempo: Vamos a tener que pasar nuestra normalización a Vector3 ya que estamos trabajando en dos dimensiones y la posición añade la Z (aunque como este caso sea 0). Si modificamos el valor speed podremos hacer que el personaje cambie su velocidad al moverse a través del vector. Antes de continuar me gustaría darte otra forma de mover un vector de un punto a otro. Pero en lugar de basado en la velocidad, basado en un valor comprendido entre 0 y 1. Cuando el personaje está en su posición inicial, el valor es 0 y cuando llega a su objetivo es 1. Esto es llamado interpolación (Lerp). Interpolación Para interpolar un vector simplemente vamos a sumarle al vector inicial, el vector de dirección al objetivo por un valor t (comprendido en 0 y 1). Veámoslo en código: La primera línea limita la t entre 0 y 1. La segunda simplemente suma al vector de origen, el vector dirección multiplicado por t. Si la t es cero devolverá el valor “a” y si es 1 devolverá el valor “b”. Con el siguiente código podremos probar esta funcionalidad nueva: Tenemos que crear un valor t (el atributo Range nos ayudará a limitarlo entre 0 y 1) y un Vector3 que guarde la posición inicial. Esto es necesario porque si le pasamos la posición actual al Lerp los resultados se irán actualizando al ir moviéndose y el resultado no será el que buscamos. Comentamos la anterior MoveToTarget y añadimos la nueva en la función Update. De esta forma si pulsamos Play tendremos un valor t en el inspector que si vamos moviendo entre 0 y 1 hará que nuestro player se desplace más o menos cerca del target. Hay otros tipos de interpolación que veremos en el apartado de Funciones en próximas partes de este tutorial. Una vez tenemos esto, vamos a pasar con una de las operaciones con vectores más importante. Producto Escalar El producto escalar (dot) es una operación entre dos vectores que nos devuelve un valor. Este valor nos da información muy útil sobre estos dos vectores: Si este valor es cero: el ángulo entre los dos vectores es 90 grados por lo que son totalmente perpendiculares. Si este valor es negativo: el ángulo es mayor a 90 grados. Cuanto menor sea este valor, mayor será el ángulo. Si este valor es positivo: el ángulo es menor que 90 grados. Cuanto mayor sea este valor menor será el ángulo. Aquí puedes experimentar visualmente con estos conceptos: https://www.fisicalab.com/apartado/producto-escalar La fórmula del producto escalar, siendo “a” y “b” dos vectores, es la siguiente: dot = ax * bx + ay * by Ya conocido el concepto vamos a practicar con él. Primero lo añadimos la función a nuestro BasicMath. Ahora añadimos la función Dot de testeo con lo siguiente: Esto calculará el producto escalar entre el vector del personaje y el vector de dirección. Como ves hemos utilizado el transform.up en lugar de la posición. Este valor indica la dirección del vector hacia arriba teniendo como referencia el tranform. Ya conocerás estos vectores si estás habituado a trabajar con Unity. Podemos verlos mejor aquí: Si usamos estos vectores a la hora de calcular el producto escalar, los resultados serán en función a la dirección y no en función de la posición. El vector de posición no nos indica hacia donde está apuntando, sino su posición con respecto al centro del mundo. Una posición por ejemplo de (3,4,0) no nos es útil para calcular el producto escalar, sin embargo el vector.up (0,1,0) sí, ya que es una dirección en este caso hacia arriba. También hemos normalizado los dos vectores antes del dot para que sea más fácil trabajar con el resultado. Activamos esta función en Update, comentando lo demás (puedes dejar el MoveToTarget si quieres). Si damos Play podemos ir moviendo el target y ver como va cambiando el producto escalar. Pero ¿de qué sirve conocer este valor?. Pues anteriormente vimos que este valor nos da información muy relacionada con los ángulos. De hecho podemos calcular el ángulo entre dos vectores conociendo los productos escalares. Ángulo Para calcular el ángulo tenemos la siguiente fórmula,siendo “a” y “b” vectores: θ = arcocoseno (dot(a, b)) Vamos a añadir esto a nuestro BasicMath. Este resultado estará en radianes por lo que crearemos dos funciones, una en radianes y otra que convierta el resultado a grados. Hemos normalizado ambos vectores antes de hacer el Dot. De esta forma lo hará desde dentro y podremos pasarle el vector sin normalizar. El valor Rad2Deg es el factor de conversión de radianes a grados que es 180 . Esto es un valor constante: No es necesario que añadas tanta precisión, puedes coger los decimales que quieras para este fin. Creamos ahora nuestra función Angle en el Player (puedes sustituir la función Dot ya que no la volveremos a usar). Volvemos a usar el Vector.up y añadimos la función al Update para verla. Para visualizar mejor el ángulo, voy a añadir en el OnDrawGizmos el siguiente código. Esto crea dos líneas que simular el comportamiento de los vectores. Si damos al play podremos ver dos líneas que forman un triangulo, el angulo entre las dos es el que nos está mostrando por consola: Con este valor de ángulos podrías, por ejemplo, rotar al personaje para que siempre mire al target con la función transform.Rotate. Con esto llegamos al final de esta entrada sobre vectores. Ha sido algo básico pero que sirve como punto de partida si quieres profundizar por ti mismo. Como he comentado estos cálculos son teniendo en cuenta solo 2 dimensiones. Te animo a que realices los cálculos añadiendo a las fórmulas una dimensión más. Podéis encontrar el código del proyecto aquí Recuerdo que no soy matemático y que los cálculos que aquí he realizado pueden contener errores o no ser del todo precisos. Cualquier duda o anotación siéntete libre de contactar conmigo. Nos vemos en la siguiente entrada.
  5. 7 points
    Estoy leyendo el libro "Unity Game Optimization" que está en Packt y la tercera edición es de noviembre de 2019. He hecho un resumen de los apartados dedicados a scripting que me parecen muy buenos. Algunos los conoceréis, otros no y otros es posible que no supiérais porqué utilizar una manera u otra. En todos los casos el concepto de optimización ve sus frutos cuando es un desarrollo de cierto tamaño. Desde mi punto de vista, si empiezas con buenos hábitos, luego no tendrás los mismos problemas de rendimiento que el resto de desarrolladores. La optimización se debe realizar desde el día 1. Paso a relatar. Optimización 1 Eliminar las callbacks vacías de Start() y Update() al crear un script si no son necesarias. El tenerlas afectará a la inicialización de la scene y al instanciar prefabs. La de OnGUI() es especialmente problemática ya que puede llamarse más de una vez por frame. En la de Update() se realiza un Native-Managed Bridge, o sea, hay que enlazar el modo managed de C# con el del código nativo dependiente de plataforma. En general no dejar nunca una callback vacía. Optimización 2 Cómo obtener los componentes de un GameObject. Hay tres maneras de hacerlo, aunque a la práctica se utilizan dos de ellas. Los datos hablan por si mismos para 30.000 objetos. // 6413 ms test = (TestComponent)GetComponent("TestComponent"); // 89 ms test = GetComponent<TestComponent>(); // 95 ms test = (TestComponent)GetComponent(typeof(TestComponent)); El mejor es del uso del template o tipo genérico. Como en C++ ;) Optimización 3 Cachear los GetComponent, preferiblemente en el Awake. Esto es realmente crítico si se realiza en el Update. Al final obtendremos un mejor rendimiento a cambio de un coste de memoria mínimo (entre 32 ó 64 bytes por item dependiendo de la plataforma). Optimización 4 El uso de funciones dentro de Update. Si las acciones no requieren se llamadas en cada frame es mucho mejor convertirlo a un InvokeRepeating que puede llamarse en el Start y cancelarse en el OnDestroy: private void Start() { InvokeRepeating("ProcessAI", 0f, _aiProcessDelay); } Optimización 5 La comparación de objetos null. La llamada directa de "gameobject == null" genera una conversión Native-Managed Bridge con la consiguiente sobrecarga. Es mucho mejor utilizar el ReferenceEquals que no utiliza la conversión. Por eso se incluyó en Unity: if (!System.Object.ReferenceEquals(gameObject, null)) { // No es null } Optimización 6 La comprobación con Tag directa genera memoria adicional y hará actuar al GC posteriormente. Utilizar el CompareTag no utiliza memoria ya que evita el Native-Managed Bridge completamente y tarda la mitad de tiempo: // Asignación de memoria y GC. Tarda el doble de tiempo if (gameObject.tag == "Player") { // realizar acción } // Evita el Native-Managed Bridge totalmente. No asigna memoria adicional if (gameObject.CompareTag ("Player")) { // realizar acción } Optimización 7 Dictionary vs List. Las List son mejores para iteraciones. Los Dictionary son mejores para búsquedas aleatorias. El Dictionary es peor para las iteraciones debido a que debe realizar una comparación hash para cada uno de los elementos. De todos modos tener los dos tipos en algunas situaciones no es mala idea. Optimización 8 La Transform. Cuando instanciamos un nuevo GameObject con GameObject.Instantiate(), uno de sus argumentos es el componente de la Transform del parent que queremos asignar, que por defecto es null y colocará el GameObject en el root. Todas las Transforms que está a nivel root necesitar crear un buffer de memoria para poder almacenar los children que tienen más aquellos que vendrán después. Esto no ocurre con las Transforms que son child. Pero si una Transform en root le cambiamos el parent una vez creada y la reasignamos, se procederá a descartar el buffer de memoria que iniciamos en el Instantiate. Para evitar esto es mejor proveer del parent en la función. Otro apartado interesante es que, hay una propiedad en la Transform llamada hierarchyCapacity. Si somos capaces de estimar el número de Transform child de este objeto root, podremos reducir el número de asignaciones de memoria. Optimización 9 World Position, World Rotation, World Scale. Cuánto más profundo esté en la jerarquía un objeto mayores cálculos son necesarios para determinar el resultado final de su estado. Esto significa que es mucho más eficiente utilizar los elementos de Local que de World. Optimización 10 Cambios en la Transform. Si es posible, agrupar todos los cambios en una Transform y no realizarlos hasta el final de todos los cálculos y en FixedUpdate. Esto evitará movimientos extraños o teleportaciones de los objetos debido a que Unity lanza eventos internos cada vez que una Transform es modificada. private bool _positionChanged; private Vector3 _newPosition; public void SetPosition(Vector3 position) { _newPosition = position; _positionChanged = true; } private void FixedUpdate() { if (_positionChanged) { transform.position = _newPosition; _positionChanged = false; } } Optimización 11 SendMessage y Find. El método SendMessage() y la familia de métodos GameObject.Find() so especialmente costosos y deben evitarse en su totalidad. El método SendMessage() es como 2,000 veces más lento que una simple llamada a una función, y el coste de Find() se escala pobremente según la complejidad de la scene aumente ya que tiene que iterar por todos los GameObject de la misma. Optimización 12 No solamente Occlusion Culling/Frustum Culling. Para los objetos que solamente tienen renderizado es factible utilizarlas únicamente. Otros objetos que utilicen cálculos internos de manera constante continuarán consumiendo a pesar del Culling. Una buena solución a este problema es utilizar las callbacks OnBecameVisible() y OnBecameInvisible(). Como los nombres dicen, estas callbacks son invocadas cuando un objeto renderizado se ha vuelto visible a una cámara o invisible respecto a todas las cámaras de la scene. Además, cuando hay múltiples cámara en la scene (por ejemplo en un juego multiplayer) las callbacks son solamente invocadas cuando es visible para una cámara o invisible para todas ellas de igual modo. Esto significa que las callback serán llamadas en el momento preciso que se necesitan. Si nadie puede ver el objeto se llamará a OnBecameInvisible(), si como mínimo un player puede verlo se llamará a OnBecameVisible(). Optimización 13 Distance vs sqrMagnitude. El cálculo de raíces cuadradas para las CPU implica bastante proceso comparado con otras instrucciones. Cuando tengamos que utilizar un cálculo de distancia, y si no requerimos de una precisión extrema, es mejor utilizar sqrMagnitude y valor a comparar por su potencia de 2. // Utilizar la raíz cuadrada en Distance() float distance = (transform.position – other.transform.position).Distance(); if (distance < targetDistance) { // dentro de distancia } // No realiza el proceso anterior float distanceSqrd = (transform.position – other.transform.position).sqrMagnitude; if (distanceSqrd < (targetDistance * targetDistance)) { // dentro de distancia } Optimización 14 Datos de Prefab a un Scriptable Object. Si tenemos muchos diferentes tipos de Prefabs que contienen datos que pueden compartirse entre ellos, como fuerza, velocidad, puntos, etc. entonces todos estos datos serán serializados en cada Prefab que luego se instancie. Una mejor solución es serializar estos datos en un ScriptableObject. Esto reduce la cantidad de datos a serializar en el Prefab, el tiempo de deserialización y el tamaño del Prefab en sí mismo reduciendo el tiempo de acciones que serán repetitivas. Optimización 15 Update(). Una mejor solución al problema del Update() es no utilizar nunca, o mejor dicho, una sola vez. Cuando Unity llama al callback Update(), o cualquiera relacionado, cruza la ya comentada frontera del Native-Managed Bridge que es una tarea costosa en términos relativos. En otras palabras, el coste de procesamiento de 1.000 Update() independiente será mucho más costoso que la ejecución de un Update() con 1.000 funciones. Para poder minimizar este problema es mejor agrupar todos los Update() en un solo Update() global que luego llame a las diferentes funciones que requieran la acción.
  6. 7 points
    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. 7 points
    ABRAMELIN GAMES Injection π23 Survival-horror clásico Inspirado en una pequeña localidad de Málaga. Jugabilidad orientada a resolver puzzles, exploración y supervivencia. 4 modos de cámara: 1ª persona, 3ª persona (camara libre y autocam) y camaras fijas (survival-horror clásico). Juego no recomendado para menores de 18. Plataforma: PlayStation 4, Windows (x64) Desarrollado por: J.A.M. (Abramelin Games) Colaboraciones: Abramelin logo, bocetos y cover art por Danilo 'Do Burundanga' Supervisión de código, sistema Autotarget 3ª persona, Autocam y sistema IK por Francisco Javier Tejada. Guía de optimización: LightBug Luces volumétricas open source por Michal Skalsky Actores de voces: Bernardo Casado (grabaciones cintas, doctor1) Jonathan Casquete (ex-militar, policia1) Virginia Montero (niño walkman) Miguel Flames (sacerdote2, policia2) Javi Ruiz (personaje principal) Luis Alberto Martin (doctor2, magnate) Pablo Ibañez (sacerdote1) Ruth pascual (doctora) Diego Orellana (enterrador, enfermero, guardaespaldas) Carlos Cremades (dueño del club) Francisca Rey (mujeres del club, ermitaña) Jose M. Sancho (profesor) http://abramelingames.blogspot.com/ www.abramelingames.com https://twitter.com/AbramelinGames
  8. 6 points
    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:
  9. 6 points
    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.
  10. 6 points
    Lamentum Se cuenta que un conde vive en una mansión oscura. De él se dice que puede conceder cualquier deseo y que es tal su poder que incluso la muerte no se atreve a cruzar sus dominios. Pero todo tiene un precio... ¿Te atreverías a pagarlo? Sobre el juego: Lamentum es un juego survival-horror en estilo pixel art que tiene lugar en Nueva Inglaterra a mediados del siglo XIX. Tomarás el papel de Victor, un joven aristócrata que busca desesperadamente la cura para una rara enfermedad. El juego se basa en la exploración y resolución de enigmas, pero sin olvidar la acción y el combate. Acerca de nosotros: Somos un pequeño equipo de dos personas con base en Madrid y Sevilla. Aunque tenemos experiencia en el sector de los videojuegos, este es nuestro primer proyecto en equipo. También contamos con la colaboración de Black Light Sound, encargado de la música y los efectos sonoros. Soundcloud: https://soundcloud.com/blacklightsnd Gracias por pasaros y agradeceríamos vuestros comentarios. Podéis seguirnos en: Twitter: https://twitter.com/ObscureTales Facebook: https://www.facebook.com/ObscureTalesGames
  11. 6 points
    Hola de nuevo a tod@s. Después de algún tiempo sin postear nada por aquí, y tras la satisfactoria experiencia con mi anterior proyecto SpinBlock Puzzle del que ya os hable en otro hilo, os traigo lo último en lo que estoy trabajando. Un juego de estrategia táctica multijugador por turnos, con ambientación medieval fantástica. Donde la acción se reparte entre la construcción y evolución del poblado o ciudad, mediante la obtención de recursos. Y el combate contra otros jugadores en diferentes mapas disponibles, empleando las tropas y máquinas de asedio creadas con antelación o reclutando otras nuevas. Y levantando defensas para impedir el avance del contrincante. Aquel que consiga cruzar las defensas del oponente obtendrá el estandarte del adversario y ganará la partida. Pero para ello tendrá que desarrollar su estrategia en función de los recursos disponibles, la distribución del mapa, la raza de los personajes, las actualizaciones conseguidas y las habilidades desarrolladas. Próximamente os ampliaré detalles. Por ahora os dejo con algunas capturas para abrir boca. Espero que os gusten y quedo a la espera de vuestras críticas y sugerencias. Saludos. Despliegue de defensas de nivel básico Despliege de defensas de nivel intermedio Detalle de una trampa de estacas y un ariete Encendiendo la barbacoa!!!!
  12. 6 points
    EDITO: La pagina de steam ya esta activa, Delta Squad en Steam con su correspondiente trailer y demas 🙂 Ya puedes comprarlo!! Hola!!!, Llego el momento de presentar el proyecto en el que llevo varios meses currando. Se llama Delta Squad, y al igual que mi anterior trabajo FullBlast esta pensado para old gamers y gente que gusta de arcades clasicos con gameplay clasico 100%. Aqui no hay ayudas a los jugadores, ni "complicado" lore, al mas puro estilo john carmack, donde decia aquello de que la historia en un juego tal y cual... xDDelta Squad es un arcade donde tenemos que liberar a la humanidad de un maligno virus y para ello iremos cumpliendo misiones en cada nivel hasta conseguir nuestro objetivo. Se puede jugar hasta 4 personas local coop, y trae un modo para activar el "friendly fire" que es siempre tan agradecido en estos juegos (porque matar a tus compañeros siempre se agradece xD) Aqui os dejo la primera captura del proyecto 🙂 Delta Squad es un juego muy particular y que solo gustara a un porcentaje MUY pequeño de la gente. El juego va enfocado a la gente que busca un juego retro como los arcades de los 90', si no te encuentras en ese target, entonces el juego NO tiene nada que ofrecerte y no te recomiendo comprarlo porque te aburrira mucho. Si por el contrario te gusta comprar juegos asi "raros" como me pasa a mi, entonces seguramente este Delta pueda estar entre tus retro-favoritos. Para gustos colores... Edit: Aqui tenemos el primer video en movimiento del juego 🙂 Gameplay video
  13. 6 points
    Buenas Os presento el proyecto que estoy llevando a cabo yo solo desde hace 1 año. Vendí mi antiguo negocio hace unos meses y estoy trabajando en esto a tiempo completo desde entonces. Mi idea es ponerlo a votación en Greenlight en una o dos semanas como máximo. El argumento es bastante sencillo: eres el capitán de una nave militar. Los mundos exteriores han declarado la guerra a la Federación Galáctica y todas las naves militares, incluida la tuya, reciben la orden de dirigirse a la capital y defenderla del inminente ataque. El juego en sí, es muy parecido al planteamiento de FTL. Hay un mapa estelar generado aleatoriamente con diferentes puntos a los que podemos saltar, cada vez que saltamos a un nuevo punto aparecerá un evento en el que podremos tomar decisiones. Dependiendo de la suerte y nuestras elecciones podremos ganar o perder créditos, moral, tripulantes, ganar nuevos sistemas o armas para la nave o hacer que el evento termine en una batalla. Algunos eventos son sencillos y tienen solo dos finales posibles o incluso solo uno (por ejemplo, los eventos que siempre finalizán en una batalla), pero otros serán bastante más complejos, el más variado hasta ahora tiene 9 finales distintos y 35 strings de texto. El sistema de batalla no se parece en nada al de FTL y es más parecido a Starpoint Gemini o al de Battlevoid Harbinger (pero en 3D). Las naves tienen puntos en los que se pueden acoplar sistemas y armas, las armas disparan y apuntan automáticamente y nosotros controlamos el movimiento de la nave, el control de energía y las habilidades que ofrecen algunos sistemas y armas y que tienen un tiempo de recarga una vez se utilizan (por ejemplo: camuflaje óptico, reparación, sabotaje de sistemas enemigos, lanzamiento de misil nuclear etc.). He grabado un gameplay de 15 minutos para que podáis ver un poco el juego. Ahora mismo el juego está en pre-alpha, tiene la mayoría de sistemas acabados, aunque algunas cosas pueden variar pero principalmente le falta contenido (eventos, naves, armas y sistemas), que es a lo que me dedicaré a partir de ahora. En el estado actual se puede jugar el primer nivel de los 5 que tendrá una partida completa. Pongo también algunas capturas más: Decidme como lo veis y que os parece!
  14. 5 points
    Cuando decidí dedicarme a crear videojuegos una de mis preocupaciones principales era mi escaso conocimiento matemático. Internet estaba lleno de mensajes asegurando que no es necesario saber matemáticas para crear videojuegos y aunque, pueda ser cierto en determinados casos, creo que aprender las nociones básicas te van a ayudar a saber lo que estás haciendo y sobre todo a construir mejores juegos. Como veréis no es necesario un conocimiento matemático avanzado para entender gran parte de los cálculos habituales. En esta serie de publicaciones voy a hablaros de algunos conceptos matemáticos básicos que se usan constantemente en videojuegos: Trigonometría Vectores Matrices Funciones Trigonometría La trigonometría, como su nombre indica (tri-tres; gono-ángulo; metría: medida), es la ciencia destinada al estudio de las medidas de los ángulos. Si por ejemplo quieres girar un personaje en tu juego necesitarás un ángulo de giro. Para poder medir un ángulo (o cualquier cosa en general) necesitamos una unidad de medida, vamos a ver las dos principales en el caso de los ángulos: Grado Cuando vas a comerte una pizza lo primero que haces (después de cocinarla claro) es partirla en diferentes trozos. Imagina que la cortamos en 8 trozos, siempre en 8 trozos porque nos encanta el tamaño de cada trozo. Si quisieras medir el ángulo de cada trozo podrías crear tu propia unidad de medida basada en tu especial devoción por los 8 trozos. Llamémosle pizzo a esta medida. Entonces si tu cortas tu pizza en 8 trozos, cada trozo tendría un ángulo de 1 pizzo. Podríamos pedir que se estableciera como medida oficial el pizzo pero me temo que ya tenemos una medida general que puedes usar en su lugar: el grado. Si en lugar de 8 trozos partimos la pizza en 4 trozos iguales y establecemos que cada trozo vale 90 grados, tendríamos la definición de grado. La definición es la siguiente: cada una de las partes que resultan en dividir en noventa partes un ángulo recto. Aquí podemos recordar los tipos de ángulos rápidamente. Radián Una vez hemos recordado la unidad familiar que es el grado, vamos a ver el radián que es el que usaremos de forma habitual. Pero antes de entrar en el radián, debemos conocer el número Pi. ¿Qué es Pi? El número Pi es uno de los más importante en las matemáticas. Su definición es la siguiente: Pi es la relación entre la longitud de una circunferencia y su diámetro. Pero ¿qué significa esto? Pues básicamente quiere decir que sí dibujamos una circunferencia de diámetro 1 y medimos su longitud, obtenemos Pi. Con esta imagen lo entenderás mucho mejor. Si pintamos el borde de una rueda de diámetro 1 y giramos mientras pintamos el suelo midiendo la longitud de la mancha de pintura, tenemos Pi, que es un valor constante (e infinito): 3.14159… De forma habitual se trabaja con radio = 1 en lugar de diámetro = 1. Por lo que la longitud de la circunferencia es este caso sería el doble de Pi (2 π). Como apunte este número es conocido como Tau y su valor es 6.28318… Pero, ¿qué relación tiene esto con un radián? Si seguimos con el ejemplo de la pizza anterior, imagina que te ha venido la inspiración y has cortado la pizza de tal forma que la longitud del arco de cada trozo que has partido mide exactamente 1. Vamos a verlo gráficamente: La pizza tiene radio = 1 y cortamos (no tendrías que cortarla realmente porque es minúscula pero bueno) un trozo cuya longitud de arco es exactamente 1 (arco azul en la imagen). Pues bien, el ángulo que se forma, nombrado “a” en la imagen, mediría exactamente 1 radián. ¿Que pasa si seguimos cortando trozos con longitud de arco 1? Pues tenemos que el ángulo que se forma con media circunferencia (“a” en la imagen) es π radianes. Y el de la la circunferencia completa sería 2π (Tau) radianes. Nota: los dibujos son solo explicativos, las distancias dibujadas no usan medidas reales. Seno, Coseno y Tangente Una vez conocemos el concepto de radián vamos a experimentar un poco con las circunferencias. ¿Qué pasaría si formamos un cuadrado cortando el eje x e y de la siguiente forma? ¿Como calculamos el valor de “x” y de “y”? ¿Que son x e y? Pues aunque resulte sorprendente esos valores son el seno y el coseno del ángulo “a”: La definición nos dice que el coseno de "a" es la abscisa de su punto asociado y el seno de a es la ordenada de dicho punto. Creo que es mucho más entendible con la imagen anterior. A medida que el ángulo cambia, sus valores en x e y modifican su valor. Aquí podemos verlo mejor: La tangente como ves es la recta que toca en un solo punto la circunferencia en función del ángulo. Teorema de Pitágoras En este punto vamos a hablar de otro término muy importante en matemáticas y que usaremos en los siguientes publicaciones, el Teorema de Pitágoras. Este teorema dice que dado un triángulo rectángulo, podemos relacionar su hipotenusa(h) con sus lados (x e y) de la siguiente forma: Despejando tendríamos: ¿Pero qué uso tiene esto? Pues en el siguiente episodio hablaremos de su uso con Vectores. Imagina que tienes un personaje en un escenario y quieres saber a cuánta distancia está un determinado enemigo. Deberás plantearlo con el teorema de pitágoras, donde la “h” es la distancia entre tu personaje y el enemigo. Tendrías que calcular la “x” e “y” para posteriormente poder despejar “h”. Pero vamos a verlo con un ejercicio simplificado: Imagina que tenemos el siguiente triángulo. Para calcular h haríamos lo siguiente: ¿Y si quiero conocer el ángulo? Para conocer el ángulo necesitamos profundizar nuestro conocimiento en las razones trigonométricas. Vamos a verlo siguiendo el mismo ejemplo: Para calcular θ vamos a necesitar calcular primero el seno del ángulo. Pero ¿cómo hacemos esto sin conocer el propio ángulo? Anteriormente vimos que: Esto es así siempre y cuando el radio (la hipotenusa) fuera 1. Pero ¿qué pasa si como en este caso la hipotenusa es 7.81? Solo tendremos que dividir la variable entre la hipotenusa de la siguiente forma: Vale ya sabemos calcular el seno sin tener el ángulo: Una vez tenemos el seno necesitamos conocer el concepto de función trigonométrica inversa. No os asustéis porque el concepto es muy simple. Necesitamos algo que multiplicado por el seno (que ya lo conocemos) nos de el ángulo. Veremos más a fondo este término cuando veamos las matrices. En este caso las función trigonométricas inversas las conocemos y son las siguientes: Nota: en español también se les llama cosecante (arco seno), secante (arco coseno) y cotangente (arcotangente) Ya conocemos cómo obtener el ángulo: Ya tenemos el valor en radianes del ángulo. Si necesitamos pasar de radianes a grados, podemos usar las siguientes fórmulas: Aquí podemos ver gráficamente las razones trigonométricas que hemos visto aquí: Espero que os sea de ayuda y perdonad si he cometido algún error o he explicado algo de forma muy torpe. No soy ni mucho menos un experto matemático, mi intención es que todos podáis acercaros y verlas un poco más fácil. Cualquier duda estaré encantado de ayudar. En la próxima parte veremos Vectores y pondremos en práctica todo lo aprendido aquí pero dentro de Unity. Hasta la próxima.
  15. 5 points
    Finalmente, liberamos la herramienta! pueden acceder a ella totalmente gratis! http://www.modelatorsystem.com
  16. 5 points
    Hola chicos, comparto con vosotros una implementación de ruido perlin noise con fBm para todos aquellos que esteis interesados. Si necesitais generación procedural de contenido, con esto solamente necesitais llamar a una función. Además las plantillas de ruido se guardan como Scriptable Object. Os dejo imagenes de las demos que incluye con ejemplos de uso, dependiendo del caso: link: https://github.com/davilopez10/PerlinNoise_Unity3D Perlin Noise 1D Perlin Noise 2D Perlin Noise 3D
  17. 5 points
    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:
  18. 4 points
    Ostia! Vine a actualizar el hilo del asset, y me di cuenta que nunca lo había creado 😅 ... bueno aquí va... Links: Asset store Demo (Desktop) Demo (webGL) Features Documentación (en ingles) Breve descripción: Character Controller Pro es un controlador de personaje (o character controller) de tipo dinámico que funciona con físicas 2D/3D, y tiene forma de cápsula. El paquete se separa en 3 partes: Core: El character controller con todo lo necesario para que exista y funcione por si solo [Lógica no implementada] Implementation: incluye un sistema construido encima del controlador que ayuda a 1) administrar inputs (sin importar su origen, viejo sistema de Unity, nuevo sistema, Rewired, etc) para luego convertirlas en acciones, y 2) proveer de una maquina de estados (FSM). [Lógica no implementada] Demo: Dentro del paquete se incluyen escenas de demostración, estados (implementaciones de lógica de gameplay), acciones predefinidas (movement, jump, crouch, etc), y más. [Lógica implementada]
  19. 4 points
    Hola a todos, les presento mi más reciente proyecto Bubbles and Puzzles, espero que sea de su agrado y puedan apoyarme con su feedback, les estaré muy agradecido. Se trata de un juego tipo fruit cut, pero en vez de cortar las frutas, tienes que cortar las burbujas y rescatar las frutas de su interior para completar el nivel y así poder avanzar. El rescate tiene que ser en el orden indicado ya que de lo contrario iras perdiendo vida hasta el punto del Game Over. La meta es llegar lo más lejos posible y conseguir la mejor puntuación para posicionarte en el Tablero de Ranking, tienes la oportunidad de compartir tu dispositivo con hasta 5 jugadores para así hacerlo más competitivo. Sin más les dejo estas imágenes del juego. Disponible en la Play Store.
  20. 4 points
    He escrito una pequeña guía/hoja de ruta para alguien que quiere empezar en el desarrollo de videojuegos, o seguir mejorando en los primeros niveles. La idea es que sirva de referencia para orientarnos un poco ya que cuando empezamos puede ser difícil saber por dónde empezar y cómo seguir avanzando. Aquí os dejo la versión en texto con más detalles: https://thepowerups-learning.com/como-empezar-en-el-desarrollo-de-videojuegos/ Y aquí abajo la versión en vídeo: ¡Espero que os sirva! ¡Un abrazo! Dani.
  21. 4 points
    Buenas! soy Augusto de Chime Ayer comencé un canal dedicado a Unity y C# y largue con una serie de introducción a la programación en Unity. En el primer episodio simplemente vemos como instalar UnityHub y Visual Studio para dejar todo listo para el siguiente episodio: En el segundo creamos nuestro primer Hola Mundo en Unity, y vemos el concepto de variables con varios ejemplos. Ademas hice otro video suplementario que cubre varios temas básicos como para tener una buena base en Unity antes de empezar la serie Espero que les guste el contenido, voy a estar subiendo los siguientes capitulos a lo largo del mes!
  22. 4 points
    Hola, he creado un pequeño curso de introducción a los MLAgents. En total son nueve vídeos, donde se crean dos proyectos y un minijuego. El primer proyecto es muy sencillo, para no perder tiempo en nada que no sea el funcionamiento / configuración de MLAgents. Como seguir estas cosas por las listas de reproducción de youtube se me hacen complicadas me he liado la manta a la cabeza y he creado una pequeña WEB donde se puede seguir el curso, como si de una academia online se tratara, y acceder a los scripts y ficheros necesarios. La URL del curso es: https://cursos.uadla.com/curso/introduccion-al-machine-learning-con-ml-agents-para-unity/ Si alguien lo sigue por aquí, por favor, que me comente si el sistema funciona correctamente y es como de de usar. Os dejo también el vídeo de presentación: Espero que os guste, la verdad es que es un tema que me ha gustado de siempre, espero tener tiempo para ir haciendo cursos para tratarlo en más detalle y con entornos más complejos. También hay que tener en cuenta que ahora los MLAgents empiezan a estar mas o menos maduros, y sí que veo que empiezan a ser una forma de entrenar NPC's que podemos usar en nuestros juegos.
  23. 4 points
    hola he visto este video en un post de Vandal y no he podido resistirme a compartirlo era de una jam que se ha celebrado entre el 10 y el 12 de julio... ...o de unos locos que se han escapado de un psiquiatrico... no me ha quedado muy claro...
  24. 4 points
    Desarrollo en Unity 2019.3. Una primera aproximación a un FPS sin prácticamente optimización más allá de los lightmaps del entorno. Es posible utilizar diferentes FX dependiendo del material de contacto. He utilizado algunos assets de pago y otros gratuitos en los apartados de diseño solamente. El código y la integración es mío desde cero. El canal de youtube para seguir las actualizaciones es: https://www.youtube.com/user/LosSopranoNet/videos
  25. 4 points
    ¡Buenas! Mi experimento de carreras en TuCiudadTM. La idea es poder generar una escena aproximada de cualquier parte del mundo. La gracia es poder correr por tu ciudad o hacer misiones que te envían a sitios conocidos. Apóyanos siguiéndonos en Twitter: https://twitter.com/yourcityracing (venga que es 1 click!)
  26. 4 points
    Mmm no lo se Rick, parece falso ... Tampoco lo entenderías (sin ser peyorativo), primero porque esto no se explica así. Además de que la pregunta suena a "atajo", que ya es algo incómodo para la persona que pretende ayudarte. No estaría tan seguro de eso, me explico... En mi tiempo en la facultad tuve la suerte de cruzarme con profesores bien hijos de puta, que si les preguntabas algo que estaba en el libro (cosas muy obvias claro) te humillaban (un poco en joda) en frente del grupo. En realidad estaban incentivando a tres cosas muy importantes: Que el alumno siente el culo en la silla, que sepa usar el material disponible (es decir, leerlo al menos). Que el alumno no suelte la lengua por cualquier cosa en clase. Es decir, hay que estar algo preparado (o al menos entender el tema previo) antes de hablar por hablar (sí, había algunos que paraban la clase como 15 veces por día). Que en una consulta, el tiempo empleado realmente valga la pena (para ambos, alumno y profesor). Todo esto desemboca en el respeto al otro (falta de respeto no es necesariamente insultar al otro, aunque podría pasar). Así que, imaginate lo que un "master" siente cuando lee "Si tubierais la amabilidad de hacer un pequeño script... algo fácil de entender" de un tema super básico (que es la base de), y super bien explicado y ejemplificado en casi cualquier medio (blogs, tutoriales, documentación, libros, videos, Unity, etc) como lo son las 👉 clases 👈. Esto a mi me dice que de tu lado estás haciendo cero esfuerzo, y que yo tengo que laburar por vos. Es una relación unidireccional. Si esto pasa seguido, lo más seguro es que empiecen los comentarios un poco desagradables, se empieza a notar ese roce poco a poco. Lo más loco es que seguramente que no surja de malas intenciones tuyas, pero sin darte cuenta estás provocando exactamente esto (y más acá que nos conocemos todos). Mi consejo (en general): Limitar las preguntas (vos mismo dijiste que hacías una tras otra --> "... por aquí mas de un año y sigo haciendo las mismas preguntas idiotas. ") Apuntarlas a algo en concreto, que no sean "Haganme un script que explique el origen del cosmos" ... Por ej: "¿En qué contexto debería utilizar una clase en Unity? Por qué no utilizar una struct para esto?" Preguntar por recursos de ser necesario, si no sabes donde buscar está perfecto. El hecho de preguntar por recursos le dice a quien te ayuda que por lo menos te esforzas en investigar antes. Que no se mal interprete, es no es una evaluación ni nada por el estilo (aunque pueda sonar a una cuando digo "desmuestra a quienes te ayudan tal o tal cosa"). Por ej, yo no sé nada de VR o XR (ni siquiera sé la diferencia entre estos 😆), pero sé que @iRobb la tiene clara (podría decir lo mismo de Networking y @francoe1 ). Sería super irrespetuoso de mi parte inundarlos de preguntas a la primera (ya sea directamente o creando un hilo), por lo menos me dedicaría una semana a investigar por mi cuenta (de ser posible). En caso de no llegar a nada, o verme realmente perdido, bueno ahí sí acudiría a ellos, mencionando mis logros en lo que respecta al tema, mis avances, dónde investigué, qué documentación visité, etc. En fin, mi opinión.
  27. 4 points
    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
  28. 4 points
    Hola @nomoregames, primero que nada decirte que esto no es con ánimo de ofender ni de crear controversia. Este tipo de dudas son básicos de la programación, no es algo de unity sino de el lenguaje. Yo te aconsejo leerte un libro de c# o hacerte un curso donde aprendas al menos lo básico y no andes dando palos de ciego hasta encontrar la respuesta. No me molesta para nada que hagas estas preguntas, pero me parece que se crea contenido innecesario, soy consciente de que nadie nace sabiendo pero si no nos intentamos educar seguiremos en ese bucle de por vida. Digo esto por tu bien y por el entusiasmo que veo que tienes con la creación de videojuegos, puedes explotar ese potencial. Hay muchos cursos de programación en Youtube, también puedes utilizar webs como codeAcademy o KhanAcademy que son gratuitas y super buenas. Es un mundo muy bonito y que si le echas ganas puede sorprenderte más de lo que imaginas.
  29. 4 points
    Me alegro de que os guste!! Si tenéis cualquier duda, estoy por aquí (pero en el Telegram suelo contestar antes 😉).
  30. 4 points
    Buenas gente¡¡ Abrí hace ya tiempo un post sobre este proyecto pero no me deja continuarlo, imagino porque es antiguo asi que he abierto otro. Hace ya tiempo empece un juego de terror en primera persona, lo empece como primera toma de contacto de Unity y para ir aprendiendo, entre el trabajo y otras cosas me ha llevado mas de un año terminarlo entre otras cosas porque lo he realizado todo yo (diseño, programación, sonido etc.... Todavía le quedan algunas cosillas pero ya poco más quiero hacerle porque tengo ganas de pasar a otro proyecto. El juego comienza en una casa abandonada en la que has estado de fiesta, despiertas solo y empiezan a pasar cosas extrañas y tienes que conseguir salir resolviendo algunos puzzles. A lo largo de esta semana subiré la BETA para que lo probéis y me digáis que os parece. He aprendido un montón de cosas y la verdad que me ha gustado mucho realizarlo y estoy bastante orgulloso para ser el primer juego que hago. Lo más complicado ha sido ser objetivo, al realizar yo los puzzles y saber donde estan los sustos se ve el juego desde una manera poco "divertida". Me has servido de mucha ayuda que mis amigos y novia me hayan hecho de testers porque su visión es totalmente distinta a la mia. Os dejo algunos pantallazos y a ver si esta semana subo la BETA y os la paso que seguro que me podéis dar vuestros consejos. saludos a todos ENLACE PARA DESCARGAR BETA: https://zellegames.itch.io/bloodshot-eyes Aquí os dejo parte de lo que pasa si descubris el huevo de pascua.... Aquí algunos cambios de texturas en la escena final, no he puesto más por no hacer spoiler... El nuevo diseño de la UI, más sencillo para mi gusto queda mejor Imagen de la cocina con la luz en modo linear, la verdad que ha ganado bastante He añadido efectos en la escena del baño para potenciarla
  31. 4 points
    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!!
  32. 4 points
    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
  33. 4 points
    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:
  34. 4 points
    Saludos a todos. El período de mantenimiento de verano 2018 ha concluido, por lo que a continuación procedo a indicar los cambios realizados: Dominio Renovado el registro del dominio http://www.unityspain.com por un período de 6 meses. Servidor Servidor VPS dedicado de la Comunidad, formateado y migrado a Ubuntu 18.04 Server 64bit. Añadido motor de cache Varnish (versión más reciente), para acelerar y mejora el rendimiento de la web. Añadido motor de cache Memcache, para acelerar el rendimiento de la web y los foros. Actualización a la versión más reciente del Servidor HTTP Apache2. Actualización a la versión más reciente de PHP para la web y foros. Actualización a la versión más reciente de MYSQL para la web, foros, y las bases de datos. Web y Foros Software de los foros actualizado a la versión más reciente (POR FIN!!!) Eliminado el idioma Español en las secciones, y puesto el Inglés por defecto, a la espera de parche... Tema (Skin) de la web sustituido, al que viene por defecto. Más claro, ordenado y legible. Activado el uso de Memcache en los foros. Activada la API RESTful en la web, para proporcionar servicios externos de consulta. Ahora el icono del voto positivo (flecha verde) pasa a ser el del corazón con fondo azul. Hace lo mismo, da puntos. Desactivados ciertos módulos de la web (comercio, descargas,entre otros...) que provocan errores. En espera de parche... Añadida nueva página Roadmap, en la barra superior de navegación. Muestra el planning previsto de mejoras para UnitySpain. Añadido nuevo módulo para crear evaluaciones o preguntas de tipo Quiz/Trivial. Desactivado por defecto, para testeo... Barra superior de Navegación actualizada, con los nuevos contenidos y herramientas. Desactivado el soporte de Login con otros métodos (Twitter, Facebook, etc), dejando un único sistema de Usuario y Contraseña. Configuradas más herramientas y secciones que hasta ahora estaban inactivas. Conexión con Redes Sociales, Analíticas,etc... Añadido nuevo RSS con las novedades de Proyectos y Scripting. Disponible en la esquina inferior derecha de la página, abajo de todo. Actualizados algunos bloques del SidePanel (sección lateral derecha de la web), para adecuarla a la web. Normas de la Comunidad y Términos de Registro para nuevos usuarios, actualizados. Redes Sociales Se han creado 2 bots en el servidor de Discord, para automatizar labores de Mantenimiento y Consultas. Soporte en construcción... Se ha actualizado y activado de nuevo el bot del grupo de Telegram, para mostrar las novedades en Proyectos. Mantenimiento Se agrupan, a partir de ahora, todos los usuarios inactivos(última visita) por más de 6 meses en un nuevo colectivo llamado Fósiles. Todos aquellos Fósiles con 2 o menos contenidos (por tanto, visitantes fugaces) han sido eliminados, junto con su contenido. Los contenidos(Topics, posts,etc) de los Fósiles con 3 o más mensajes, son movidos a la sección Post Antiguos y preservados. Se han limpiado 1089 usuarios, y la Comunidad pasa a contar actualmente con 1341 miembros activos. Otros Estudio, testeo y pruebas de estabilidad. Más adelante realizaré un pequeño Hilo, comentando las novedades que trae consigo esta versión de la Web. Gracias a todos por la paciencia, y .. Hale! A disfrutar!!! Pioj
  35. 3 points
    Este código lo hicimos en otro post. Pásale una List de elementos y te los posicionará de manera aleatoria: public void shuffle<T>(IList<T> list) { System.Random random = new System.Random(); int n = list.Count; for (int i = list.Count - 1; i > 1; i--) { int rnd = random.Next(i + 1); T value = list[rnd]; list[rnd] = list[i]; list[i] = value; } }
  36. 3 points
    hola a todos. acabo de subir un nuevo trailer a Youtube
  37. 3 points
    La Persistencia Cuántica de Bits o PCB. Es algo muy típico. 😂
  38. 3 points
    Hola Cerpion, Lo primero: No es terrible hacer referencia a otros scripts, pero en un mundo ideal, generalmente es preferible hacer referencias a abstracciones de tus scripts. Esto nos permite que sea más fácil reutilizar y cambiar nuestro código en un futuro. Ahorita me explico más: Supón que tienes un script llamado Player, y un script llamado Joystick, que a su vez tiene un método llamado GetMovement. Algo así: public class Player:MonoBehaviour { //Esta es una manera de obtener la referencia, aquí aparecería un campo para asignar el Joystick en el inspector: public Joystick playerJoystick; //La otra manera sería: private void Start() { playerJoystick = GetComponent<Joystick>(); } } public class Joystick:MonoBehaviour() { public Vector2 GetMovement() { //Supón que aquí regresaramos un movimiento de verdad en lugar de ceros. return new Vector2(0,0); } } Y eso funciona en general. Pero en un futuro tal vez vayas a querer tener players controlados por la computadora, o diferentes scripts para diferentes tipos de control, o qué sé yo que te depare el futuro. Para estar preparado para el futuro, y que te sea más fácil agregar y cambiar cosas, es mejor que nuestras referencias sean más abstractas, que Player en lugar de referirse a un Joystick haga referencia a, por ponerle un nombre, un MovementProvider. Hay dos formas de hacerlo. Una es con clases abstractas: public class Player:MonoBehaviour { //En lugar del Joystick, hacemos referencia a un MovementProvider, que puede ser un Joystick, pero también otra cosa que se te ocurra. public MovementProvider playerMovement; private void Update() { //Aquí usarías el vector que regresa GetMovement de para mover tu jugador alguna manera playerMovement.GetMovement(); } } //La palabra abstract aquí significa que el script no puede ser usado por sí solo, necesita que otro clase herede de ésta para usarlo. public abstract class MovementProvider:MonoBehaviour { //La palabra abstract aquí significa la funcionalidad de este método debe ser definida en las clases que hereden de ésta. public abstract Vector2 GetMovement(); } //Nota como no heredamos de MonoBehaviour esta vez, sino de la clase abstracta MovementProvider. //Cualquier otro script puede hacer lo mismo y definir su propia función para GetMovement public class Joystick:MovementProvider { //Override significa que estamos sobrescribiendo la funcionalidad definida en el padre, en este caso en MovementProvider. //Es cierto que, de hecho, MovementProvider no definió ninguna funcionalidad, lo dejó abstracto, pero igual hay que ponerlo. public override Vector2 GetMovement() { return new Vector2(0,0); } } Y dos es con algo llamado interfaces: public class Player:MonoBehaviour { public IMovementProvider playerMovement; private void Start() { //Como no podemos obtener la referencia a IMovementProvider desde el inspector, hay que obtenerla de otra manera. Puede ser así: playerMovement = GetComponent<IMovementProvider>(); //Si el componente está en otro GameObject, podríamos poner un campo de tipo GameObject en el inspector y luego: playerMovement = otherGameObject.GetComponent<IMovementProvider>(); } private void Update() { //Aquí usarías el vector que regresa GetMovement de para mover tu jugador alguna manera playerMovement.GetMovement(); } } //Las interfaces definen un conjunto de métodos y propiedades que debe implementar una clase. //La ventaja de las interfaces es que puede aplicarse más de una a la misma clase, la desventaja es que no salen en el inspector. //Es común poner una I en el nombre para identificar que es una interfaz. public interface IMovementProvider { Vector2 GetMovement(); } //Nota como avisamos que implementamos la interfaz. Si hay más interfaces, se pueden seguir agregando separadas por comas. public class Joystick:MonoBehaviour, IMovementProvider { //Con las interfaces no tenemos que usar override, basta que el método sea público. public Vector2 GetMovement() { return new Vector2(0,0); } } Respecto a tu segundo punto, generalmente, entre más puedas dividir tus scripts, mejor. La idea es que, entre menos cosas distintas haga un script, más probable es que los puedas reutilizar en varias partes diferentes. Y es menos probable que los tengas que modificar cuando otra cosa cambie en tu código. Cualquier cosa que quede sin explicarse bien, o cualquier duda, tú dime con confianza. Ahm, espero no haber sido demasiado teórico o demasiado confuso; esto de lo que hablé viene de unos principios de programación llamados SOLID, que son muy útiles como guía para facilitarte la vida, pero que luego uno no sabe explicarlos bien porque ya se acostumbró tanto que ya ni piensa en ellos. Por último, estas recomendaciones que te di, no dejes que te atoren mucho; se aprende haciendo y además, en esto de hacer juegos, todo mundo acaba haciendo montón de excepciones a este tipo de reglas. PD Eso del game manager y las referencias estáticas yo realmente te recomendaría evitarlo siempre que puedas. Hay razones para hacerlo, como si nomás es un prototipo rápido, o un juego móvil simple, o ciertas cosas que es mucho más complejo hacer de otra forma. Pero, generalmente, ese patrón de organizar tu código que algunos llaman singleton, acaba dándote muchos más problemas de los que arregla. En el momento en el que decides, por ejemplo, que tu juego es multijugador, tienes que ponerte a rescribir código en todos los lados que usan esa referencia estática, en código que escribiste hace mucho tiempo y que vas a tener que releer completito para entender cómo cambiarlo.
  39. 3 points
    la verdad que estan chulas las fisicas del cable. creo que esto no cuenta como spoiler del juego... o si? si es asi lo siento, cierrenme el tema. pero me gustaria devatir como creen qye funcionan esas fisicas. creen que la manguera esta formada por pequeñas secciones? o es mas bien varios raycast que dividen la manguera en secciones mas grandes cuando colisiona? y el tramo que tiene enrollado en la mano?? forma parte de la misma manguera? o es un objeto adicional para que de la sensacion de que se enrolla.... y miestras tanto la manguera original crece o disminulle su longitud en relacion con la parte que ha enrollado en la mano? ...claro que la parte que tiene enrollada en la mano tiene fisicas tipo "cloth".... pero no reacciona al escenario... eso es lo que me ha hecho pensar que son dos cosas distintas la manguera y lo enrollado... aunque tamvien cuando la lanza cambia un poco el comportamiento... creo que puede ser todo un unico objeto al que le cambian las "layers" de colisiones depemdiendo el momento ...y depemdiendo de que secciones de la manguera sean les ponen unas layers u otras... puede que todo sea una especie de "cloth" gigante... que cuando ha alcanzado su maxima tension (estirado) manda un mensage al personaje para que haga la animacion de "huy, ya no alcanza mas" ustedes que opinan?
  40. 3 points
  41. 3 points
    Y aquí estamos con más novedades. El "esperado" ciclo día/noche y cambio atmosférico dinámico:
  42. 3 points
    ¿Has probado a juguetear con los distintos parámetros que tiene el NavMeshAgent? https://docs.unity3d.com/ScriptReference/AI.NavMeshAgent.html En el siguiente vídeo de Brackeys muestra un poco alguno de estos parametros
  43. 3 points
    La última actualización que ya puse vía Telegram. Así se ve la evolución:
  44. 3 points
    Un mini juego para Halloween para probar el AR Foundations de Unity 2019.2. La publicaré en breve. Espero os guste.
  45. 3 points
    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 ~~
  46. 3 points
    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
  47. 3 points
    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
  48. 3 points
    Actualizo un poco esto. En los últimas semanas he mejorado temas de interfaz, he creado el sistema de contratos (misiones que se pueden conseguir en las estaciones) y he añadido mejoras gráficas y solucionado bastantes bugs. Os enseño los avances más destacados a nivel visual para no aburriros... xD He añadido una nueva interfaz para el control de la nave, gracias a la inestimable ayuda de @Shovah, que ha diseñado y creado el nuevo panel. Hemos intentado simular una especie de panel de control de una nave, con varías pantallas, detalles metálicos, tubos... Ha quedado bastante bien. Los mensajes de voz y mensajes de texto se reproducen en la propias pantallas del panel: He añadido el pequeño detalle de que el panel cambia de iluminación dependiendo del color del ambiente y se oscurece cuando el sol se oculta detrás de un planeta. Las estaciones ahora tienen paneles de publicidad que anuncian los tipos de servicios que ofrecen: Hace una semana actualicé el proyecto a la última versión de Unity para intentar solucionar algunos bugs. Al actualizar, los shaders que había creado con Shader Forge dejarón de funcionar bien y tuve que rehacerlos con Amplify Shader (muy recomendado), ya que Shader Forge ya no tiene soporte. Ahora los shaders tienen mucha mejor pinta. Los shaders de los planetas también han sido actualizados. En general ahora todo se ve aún mejor. Pongo algunas capturas de la última versión.
  49. 3 points
    Hace mucho que no subo nada, por sugerencia de hammer he añadido profundidad de campo y control fácil, espero que así quede un poco mejor.
  50. 3 points
    El Water4 si pones unos pocos va bien, pero llega un momento que pones uno mas y se va todo al carajo xD, y para conseguir llenar la playa son unos cuantos.Ahora que casi ya doy por medio acabado el shader del rio me pongo con el del mar a ver. Me alegro por las mejoras pero alfinal del video que has puesto ,cuando te acercas a la mesa, se puede ver que la camara sigue temblando un poco. Y bueno sobre el shader, pos me ha costado un horror,el shader ahora mismo lo miro y se me hace muy sencillo xD, pero los primeros dias que no me aclaraba con nada y con un follon en la cabeza de narices lo pase hasta mal,hacia tiempo que no me sentia tan encallado,apunto de tirar la toalla en algun momento. Pero bueno ahora se me esta despertando el sexto chackra y ya empiezo a pillarle el rollo,aun me quedan cosas que se me hacen un poco ...,abstractas, y otras que necesito organizar en mi cabeza XD. Eso si nunca habia programado nada de shaders,ni en C, y tengo que decir que,despues del primer infierno, he aprendido un monton sobre todo el processo de renderizado. Dejo unas fotillos de mi primer shader,como un hijo vaya xD,aun falta unirlo con el de debajo del agua,aunque si tu personaje no va a meterse en ella ya lo hare cuando acabe. El "displacement" alfinal lo he hecho con una textura perlin noise animada, tiene para controlar el fresnel , la "transparencia" ,el color de refraccion, el color del agua y el color del fresnel. Esta hecho con surface shader en standardSpecular,asi que saca los reflejos con un reflection probe, aqui me parece que no escogi bien, quiza consuma menos calcular el reflejo con una camara como siempre,pero bueno, novatadas xD @francoe1 Pues no he sabido hacer lo de los borders, solo se me ocurre hacerlo con shaders si le pinto a la maya unos ColorVertexs,como hiciste tu para unir los vertices del borde con la maya statica. Acabada la cascada y el rio, solo queda el oceano y ya estara hecho lo que veia mas dificil, entonces acabare el terrain y te lo pasare para que puedas ir haciendo, lo demas,plantas ,arboles, lo dejare para el final que se pueden cambiar,actualizar facilmente. Por cierto @leocub58 y @ iRobb Ejem, pues yo no lo he encontrado xD xD lo que si vi es que habia salido justo a finales de febrero la edicion del libro nueva para la version 5. Tendre que buscar mas a fondo. Ala pues todo el tocho que he escrito xD. Saludos a todos. lml Dejo fotillos espero no ocupen mucho xD
×
×
  • Create New...