Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 06/23/2020 in Posts

  1. 5 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.
  2. 5 points
    Finalmente, liberamos la herramienta! pueden acceder a ella totalmente gratis! http://www.modelatorsystem.com
  3. 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]
  4. 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.
  5. 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!
  6. 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.
  7. 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...
  8. 3 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 Notion. Espacio todo en uno para productividad (Tablero Kanban, wiki, notas rápidas...): https://www.notion.so/ Adobe Color. Elección de colores: complementariedad, análogos...: https://color.adobe.com/es/create/color-wheel GifCam. Programita para crear Gifs: http://blog.bahraniapps.com/gifcam/
  9. 3 points
    Yo sinceramente creo que un foro es muchísimo mejor para tratar dudas, todo queda mejor organizado y no se pierde entre tanto mensaje. Lo bueno que sí le veo es quizás la inmediatez de las respuestas. En lugar de tener tantos discords, telegrams e historias deberíamos de intentar aunarlos todos aquí. Suerte con el Discord!
  10. 3 points
    Buenos días compañeros!!, por fin he solucionado mis problemas con el Animator, aunque no del todo, pero quiero dejar aquí la solución para que no le pase a nadie mas. Unity tiene un orden de transiciones, pero ese orden al menos en la versión 4.7.2 que es la que uso yo, no funciona correctamente hasta que no aprendes a utilizar "Atomic", que es una casilla que por defecto viene marcada, pero que al desmarcarla significa "NO PASAR A ESTA ANIMACIÓN SI ANTES ESTÁ EJECUTANDOSE OTRA QUE ESTÉ PRIMERO EN EL ORDEN DE TRANSICIONES". Quiere decir, que si le damos a correr y a saltar al mismo tiempo, Unity podría intentar hacer la animación de correr y después la de saltar creando una pose extraña, mientras que si destildamos la casilla Atomic y colocamos en la lista de transiciones la pose de saltar en primer lugar, Unity antes de iniciar la animación de correr iniciará la de saltar porque tiene prioridad. Esto me ha solucionado el 90% de los errores de animación, pero aún hay otros como que por ejemplo esté realizando una transición y quieras interrumpirla, que creo que lo voy a tener que hacer con programación, porque esta versión de Unity no tiene el Has Exit Time. Saludos.
  11. 3 points
    Todo eso me suena a que no estás haciendo 2 cosas: Seteando la prioridad de las transiciones, Selecciona un estado y fijate que en el inspector te figuran en order, de arriba (más prioridad) a abajo (menos). Configurando la fuente de interrupción de cada estado (https://docs.unity3d.com/Manual/class-Transition.html#TransitionInterruption), ya que se puede dar que una transición esté pasando, pero un estado (el actual o el siguente) tenga una transición valida al mismo tiempo. Respecto a 2, esto dice la doc: Value Function None Don’t add any more transitions. Current State Queue the transitions from the current state. Next State Queue the transitions from the next state. Current State then Next State Queue the transitions from the current state, then queue the ones from the next state. Next State then Current State Queue the transitions from the next state, then queue the ones from the current state. Ejemplo de un personaje que está en el estado "caida" y pasa a "suelo" al caer (isGrounded = true). En plena transición le das a la tecla de salto, es decir, deberías pasar de "suelo" a "salto". Volviendo al isGrounded = true, un trigger se llama, ahora está en plena transicion a "suelo". Vamos a suponer que todavía no estás en "suelo" (que es el proximo estado, el "next"), entonces sigues en "caida" (el actual o "current"), por lo que si presionas la tecla de salto no pasa nada (a nivel animación, probablemente el objeto físico salte, eso no nos importa de momento). La cosa que la animación no cambia, todo termina en "suelo" eventualmente. Si configuras que la fuente de interrupción sea "Next", lo que va a pasar es lo siguiente: Hay una transición que require accionarse ya mismo ("suelo -> salto" dió válida) Dicha transición pertenece al estado siguiente "suelo" (next). Recordar que los estados contienen a las transiciones si tienen su cola (no su punta). En este caso suelo contiene "suelo -> salto", salto tendrá "salto -> caida", caida tendra "caida -> suelo" , y así... El estado actual (caida) tiene como fuente de interrupción el estado Next ("suelo", quien contiene la transición a salto y encima es válida) El sistema suma dos más dos y termina interrumpiendo la transición actual de inmediato, en base a la "interruption source" de arriba. Todo esto no hubiera terminado bien si tuvieras current como fuente de interrupción. Si no estás seguro metele "Current state then next state". Documentación. Como dijiste, esas son las dos más usadas, Play reproduce de una, Crossfade te da una transición de donde estés hacia el estado target. Pasa que eso es muy confuso, que pasa si estás saltando (que se yo, 100 metros en el aire) y a los 3 segundos (llegaste al pico) no presionas nada? tenés que andar leyendo el estado actual, y en base a eso determinar si das Play/Crossfade a X animación... terminas creandote la misma herramienta dentro del código. Creeme que yo vengo puteando con Mecanim desde hace años, y todos los problemas (excepto los más estúpidos y fáciles de solucionar) tienen su vuelta. Te recomiendo lo de las prioridades y las fuentes de interrupciones.
  12. 3 points
    tienes que buscar un poco antes de preguntar, probar si puedes hacerlo mínimo 2 días y sino preguntas, tu pregunta esta en el manual lee un poco. URL: https://docs.unity3d.com/ScriptReference/Rigidbody-isKinematic.html Controla si la física afecta al cuerpo rígido. Si isKinematic está activado, las fuerzas, colisiones o articulaciones ya no afectarán al cuerpo rígido. El cuerpo rígido estará bajo control total de animación o control de script cambiando transform.position. Los cuerpos cinemáticos también afectan el movimiento de otros cuerpos rígidos a través de colisiones o articulaciones. Eg. puede conectar un cuerpo rígido cinemático a un cuerpo rígido normal con una articulación y el cuerpo rígido se restringirá con el movimiento del cuerpo cinemático. Los rigidbodies cinemáticos también son particularmente útiles para hacer personajes que normalmente son impulsados por una animación, pero en ciertos eventos se pueden convertir rápidamente en un ragdoll estableciendo isKinematic a false. using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { public Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } // Let the rigidbody take control and detect collisions. void EnableRagdoll() { rb.isKinematic = false; rb.detectCollisions = true; } // Let animation control the rigidbody and ignore collisions. void DisableRagdoll() { rb.isKinematic = true; rb.detectCollisions = false; } } este es un ejemplo básico solo para la colisión y estado muerto del enemigo, si quieres chocar al enemigo y que las físicas interactúe con el enemigo muerto tienes que hacer un Ragdoll del enemigo para desactivar la animación del enemigo y que cuando tenga 0 de vida se caiga y lo puedas mover cuando colisionas con el. public void Ejemplo(float amount) { if (health < 5) //este valor depende de cuanto daño le haces al enemigo., lo que dice es si vida es menor a 5 pasa a estado de muerte. { muerte(); } } void muerte() { Destroy(GetComponent<NavMeshAgent>()); // aca se desactiva la inteligencia Artificial. anim.enabled = false; //aca desactiva la animacion quedando solo el Ragdoll. } sino sabes que es un Ragdoll acá te dejo un link :"" https://www.youtube.com/watch?v=DInV-jHm9rk&t=1s¨
  13. 3 points
    necesito ayuda! no se si esto funcionara foreach (User _user in UnitySpainUserList) { _user.addMessage("felices fiestas"); }
  14. 3 points
    Hola! @Megadok para hacer ese uso es muy simple. Lo enums son tratados no solo con los nombre que les des(espada, arco,etc) sino que por defecto tiene un index asociado comenzando desde 0. Por lo que si queres que tu variable _arma sea igual a lanza por ejmplo solo tendrías que castear el tipo armas delante del index correspondiente a lanza(que sería 2). Te dejo un ejemplo. public enum armas { espada, //0 arco, //1 lanza, //2 hacha //3 } public armas _armas; private void Start() { //el casteo se hace poniendo entre parentesis el tipo que te interesa obtener _armas = (armas)1; //esto hara que _armas sea "arco" } //Con tu codigo seria asi string[] r = System.Enum.GetNames(typeof(armas)); for(int i=0;i<r.Lenght;i++){ _armas = (armas)i; }
  15. 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; } }
  16. 3 points
    hola a todos. acabo de subir un nuevo trailer a Youtube
  17. 3 points
    Acabo de subir el siguiente capitulo: Lógica y ciclos. En este video vemos la sentencia if, junto con else. Ademas vemos el ciclo for y el ciclo while. Y por ultimo vemos las sentencias continue y break para ciclos Edit: No quería spamear mucho el post así que agrego el siguiente episodio aqui. En este cuarto capitulo vemos varias cosas: Función Update, Físicas de Unity, Input del jugador, la función GetComponent, framerate-independence y como detectar colisiones entre objetos.
  18. 3 points
    si es el angulo z el que quieres comprobar en vez de "transform.forward.z" pon "transform.right.y"
  19. 3 points
    La Persistencia Cuántica de Bits o PCB. Es algo muy típico. 😂
  20. 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.
  21. 2 points
    ¡Hola! He pensado que podría ser interesante ir poniendo aquí los avances que voy haciendo en la preparación de nuestro siguiente proyecto. He comenzado un devlog (con idea de que sea semanal o por lo menos quincenal). Espero que os guste y me hagáis llegar vuestros comentarios. No estaba seguro de su publicar aquí o en proyectos, si algún amable admin quiere recolocarlo al sitio apropiado lo agradezco 😅 https://oniria.world/2021/03/15/devlog-1-avances-con-el-oniria-engine/
  22. 2 points
    Tan solo haz un endpoint en php para que te liste la información en formato JSON mediante una url. En unity lees el JSON mediante la URL y creas las clases que necesites para transformar el JSON a un objeto de c#. Es algo muy sencillo pero necesitas tener conocimientos web.
  23. 2 points
    Update #2 - Añadio enemy Spider. - Añadido Tank Spider. - Añadido Bong Spider. - Añadido boss #2. - Fixed Spawner bullet . - Mejora en la interfaz.
  24. 2 points
    Felicidades, nos cuentas como te va
  25. 2 points
    Suerte y ha ganar dinerito xD
  26. 2 points
    Pos diria que este efecto lo puedes conseguir con shaders que usen el "Stencil Buffer", en youtube hay tutos.
  27. 2 points
    Le pones por encima un raw image con una textura que sean divisiones y le modificas el tileX para el numero de divisiones que quieres
  28. 2 points
    Perdón por responder tan tarde! No, no es requerido, las referencias a componentes se buscan automaticamente. La estructura que yo propongo es una estructura óptima, es decir que puedes hacer varias cosas interesantes separando la parte visual de la parte física (collider + rigidbody). Lo que sí o sí es requerido es que todo lo relacionado al personaje esté contenido dentro de un "root" u objeto maestro (padre). No, de hecho CCP no hace referencia a los huesos de ninguna manera. En la "Demo" mi personaje es un humanoide, gracias a esto puedo usar el avatar que Unity ofrece para acceder a los IK (por ejemplo). Por ejemplo (estado LadderClimbing ) public override void UpdateIK( int layerIndex ) { if( !useIKOffsetValues ) return; UpdateIKElement( AvatarIKGoal.LeftFoot , leftFootOffset ); UpdateIKElement( AvatarIKGoal.RightFoot , rightFootOffset ); UpdateIKElement( AvatarIKGoal.LeftHand , leftHandOffset ); UpdateIKElement( AvatarIKGoal.RightHand , rightHandOffset ); } void UpdateIKElement( AvatarIKGoal avatarIKGoal , Vector3 offset ) { CharacterStateController.Animator.SetIKPositionWeight( avatarIKGoal , 0f ); Vector3 originalRightFootPosition = CharacterStateController.Animator.GetIKPosition( avatarIKGoal ); CharacterStateController.Animator.SetIKPositionWeight( avatarIKGoal , 1f ); CharacterStateController.Animator.SetIKPosition( avatarIKGoal , originalRightFootPosition + offset ); } Ahora mismo el método usado para movimiento es muy pero muy simple, un MoveTowards que modifica la velocidad linealmente con el tiempo. El base speed limit indica el target del MoveTowards (función de Vector3) del walk (no de run). Este valor será el valor final de velocidad obtenido, es decir que técnicamente no es posible, ya que mayor límite de velocidad + aceleración implica obtener una velocidad mayor. Ya que es un MoveTowards (incluso si fuese un Lerp), quizás lo que más te importe a la hora de modificarlo es su "t factor" (el tercer argumento de este método). Si tienes el control de "t" entonces puedes controlar la velocidad como quieras, independientemente de sus límites. En mi caso uso acceleration/deceleration como variables "t". Jugar entre los valores de velocidad y los umbrales (threshold) del animator es fundamental. Quizás tratar de cubrir varios tipos de movimiento (parada, arranque suave, trote, correr, etc) todos al mismo tiempo (usando una simple funcion lineal) no sea una buena solución en tu caso. Si realismo en las animaciones es lo que necesitas se pueden hacer dos cosas: Mejorar el script de movimiento. Meter curvas para lograr un movimiento menos lineal y más personalizable es algo que voy a introducir en 2.0.0. Ya esto pasa por el lado de la implementación de la lógica (por parte del usuario) y escapa al alcance del asset. De todas formas siempre trato de meter este tipo de cosas, de manera de facilitar un poco la parte del gameplay. Usar root motion, piensa en GTA 4/5 por ejemplo. No hay scripts ni nada de eso, el clip contiene la información de movimiento y solamente se lee el input del player. Con 1.3.3 puedes usar root motion para planar velocity y seguir usando la gravedad de NormalMovement.
  29. 2 points
    Gracias francoe1 Les comparto un pequeño video para ver de que va el juego
  30. 2 points
    hola, he visto este "trailer" de un proyecto que esta en kickStarter me parece una pasada y una locura. solo queria compartirlo porque me ha alucinado. os dejo tambien el enlace de kickStarter por si teneis mas curiosidad, salen mas cosas ahi. https://www.kickstarter.com/projects/esbenkongorange/vokabulantis
  31. 2 points
    Y aquí vendría el artículo de esta semana. He estado liando con animaciones procedimentales. https://oniria.world/2021/03/22/devlog-2-animaciones-procedimentales/ ¿Sois de los que en español decís procedural o procedimental?
  32. 2 points
    Buenas tardes, como dice Francoe1 estás confundiendo términos o quizá los entiendes pero no del todo. Renderizar es dibujar en pantalla. Blender tiene su propio motor de renderizado y Unity tiene su propio motor de renderizado también, uno mas orientado a la renderización de video (como es el caso de Blender) y otra enfocada a la renderización en tiempo real. Cada motor tiene su propio sistema de iluminación, materiales y efectos por lo que a menudo lo que crees en programas como Blender se perderá al exportarlo a Unity quedando básicamente el modelado 3D con su texturizado UVW y las animaciones. Deberás de recrear tu escena lo mas parecida a como se vea en Blender pero desde Unity, creando materiales nuevos, iluminación, etc... En internet hay videos donde utilizan shaders para utilizar V-ray desde Unity, pero nunca lo he probado... Si alguien sabe mas del tema y puede ayudar que lo diga. Saludos.
  33. 2 points
    Hola, tienes que editar el sprite una vez lo has importado, al ser una imagen pixel tienes que decirle que no tenga compresión y sin filtro. En su inspector cambia la configuración, dile que en: [Compresión] - None Y en [Filter mode] - Point (no filter) Y aplica los cambios. Espero que te sirva, un saludo.
  34. 2 points
    Chequea el modificador decimate (creo que significa diezmar):
  35. 2 points
    Creo que no te responden porqué la pregunta es demasiado genérica y sin pistas más detalladas de lo que estás haciendo. Tal vez poniendo ejemplos del código y explicando qué haces puedas conseguir respuestas.
  36. 2 points
    @francoe1 si, tienes razon. es muy sencillo, ademas en los "i wanna be" los "rectangulos" son siempre del mismo tamaño asi que no haria falta tampoco usar los "bounds" de la camara... bastaria con saber cuanto mide el rectangulo y hacer unos sencillos calculos (usando la posicion del player) para saber en que rectangulo estas y colocar la camara en la posicion correspondiente. lo del box collider que dije antes fue lo primero que se me ocurrio. pero es mejor igual hacerlo "matematicamente"
  37. 2 points
    ¡Hola! Sé que debería pasarme por aquí más a menudo (no me regañéis ^^). Tenía pendiente presentar Oniria Crimes en Unity Spain desde hace tiempo. Ahora que ya está el juego terminado y solo estamos esperando a ultimar un par de post, creo que es el momento perfecto. Como podéis ver es un juego en isométrico y con una presentación muy basada en un formato visual novel, aunque la mecánica principal es la investigación a través de point&click. La mayoría de los objetos de los escenarios son interactivos (hay unos 50 por cada escenario). El modelado voxel lo hemos hecho con Magica Voxel. Deja la malla muy sucia así que después hay que hacer un pequeño proceso de limpieza. De todos modos casi todo es estático. La iluminación está hecha con lightmaps principalmente y una buena capa de post procesado. Para los textos hemos usado el plugin de ink (de inkle studios) que es un parseador bastante majo. Si queréis ver el trailer, está en la página de steam, que he enlazado al principio. Saldremos el 3 de diciembre para PC, Mac, Linux, consolas y móviles, y con traducción a 8 idiomas. Nuestro publisher es Badland. El tiempo de desarrollo ha sido año y medio, y son 6 casos de investigación y unas 12 cinemáticas. ¡Creo que eso es todo! La demo está gratuita en la página de steam, por lo que si os causa curiosidad, nos gustaría mucho que lo probáseis y nos diéseis vuestro feedback 😄 Si queréis preguntarnos cualquier cosa a mí o al equipo de desarrollo, estaremos encantados de responder. ¡Un abrazo!
  38. 2 points
    Lo bajé también, pinta muy lindo de momento. No he jugado mucho, solo 2 minutos (y sin querer salté la intro por apretar escape, pensando que me iba a llevar al menú xD). Feedback: La pantalla de configuración de Unity puede quedar algo meh, no se si es solo para la demo. Todo tiene un estética pixelada/voxelizada, incluso hasta para la fuente de texto, que es genial! Aquí, mi problema, en el menú principal las tres opciones que aparecen tiene una fuenta suavizada, cuando el resto del juego no. Se nota mucho si pasas de menú principal a settings. Hubiera preferido un "outline" para los objetos en vez de un "fill", pero bueno eso ya pasa por gustos/diseño (y quizás hasta por gameplay también, no lo se de momento). Digo esto porque si quiero saber (de forma visual) qué es lo que estoy tocando con el cursor debo salir del objeto. La música me encanta, acompaña muy bien. Los gráficos también muy bien logrados.
  39. 2 points
    gente para tu juego? gente que te ayude a hacer el juego? puede poner un post en "colaboraciones". o si tienes algo del juego que puedas mostrar tal vez podrias abrir un post en "proyectos" sobre tu juego, y ahi pedir colaboradores. gente para tu juego? gente que lo juege? para testearlo o darte feedback? postea el juego en "proyectos" gente para tu juego? NPCs que pueblen tu juego? prueba en el asset store
  40. 2 points
    Primero: no uses // para cada linea, si quieres comentar un un metodo u otro texto largo, usa /* .... */. Segundo: En respuesta a tu pregunta. Deberías manejar el inventario y pickup objects desde el jugador, porque si vas a implementarlos en cada objeto 'Item', que pasará cuando quieras instanciar 1K items en la escena?, Tendrás 1K scripts ejecutando funciones de eventos en cada frame innecesariamente?. Usa un único sistema que manejé los eventos de colisión, entonces, cuando tu jugador este cerca a un objeto, se active un método que verifique si hay o no, espacio en el inventario. Y cuándo digo "UN" es solo uno, en tu primer script hay un método (RecogerObjeto ()) que se activa cuando se cumple un if, Fatal! Que pasa si ese if nunca cambia de estado? Seguirías llamando el método una, otra y otra vez, usando innecesariamente la CPU. En su caso, usa los eventos de colisión para preguntar una vez si hay espacio en el inventario. Si la respuesta es falso, evita hacer una nueva llamada a la función, entonces cuando el usuario elimine un item de su inventario, lanza otra función que diga algo como "Inventario actualizado, realiza una llamada a los triggers a ver si hay items para recoger", esto sería un optimización drástica al la manera en que está planteada tu actual idea.
  41. 2 points
    en este foro obedecemos las leyes de la termodinamica!!!
  42. 2 points
    los sistemas de particulas tienen muchas variables diferentes y si simplemente añades el componente luego tendria que ajustar via script todas la variables para que las particulas sean como deseas... creo que es mejor que crees un Prefab.... creas un sistema de particulas, lo ajustas como quieres que sea, y creas un prefab (arrastras el objeto a donde los assets) luego en el script cuando quieras crearlo lo instancias (Instantiate(objeto, posicion, rotacion))
  43. 2 points
    Hola, se me ocurren dos formas: 1. Usando un evento de Unity. En cada botón tenés eventos disponibles, pero solamente on click (presionar primero, luego al soltar se dispara el evento). Podés implementar algunas interfaces útiles para estos casos como las "IPointerXXXXX". Vas a tener que implementar dos, IPointerUpHandler e IPointerDownHandler. En donde querés usar el estado del botón (usé el componente "Target", en tu caso será el que tenga que ser): class Target : Monobehaviour { bool pulsado = false; public void Pulsar( bool pulsado ) { this.pulsado = pulsado; } //... } Donde esté el elemento UI, agregás este componente (lo llamé "UIButton"): //... using UnityEngine.EventSystems; //<--- public class UIButton : MonoBehaviour , IPointerUpHandler , IPointerDownHandler { public Target target; public void OnPointerDown(PointerEventData eventData) { if( target == null ) return; target.Pulsar( true ); } public void OnPointerUp(PointerEventData eventData) { if( target == null ) return; target.Pulsar( false ); } } También lo podés hacer desde el inspector, con un evento público creo. 2. La otra forma es simular un input directamente usando el nuevo input system. Para esto vas a tener que instalar el paquete del InputSystem, crear las acciones correspondientes con sus bindings (conexión entre accion y dispositivo de entrada), y agregar donde tengas el elemento UI un componente que basicamente simula uno de estos bindings (perdón no me acuerdo su nombre). Luego en tu "Target" usas el estado de esta acción. Puede sonar a mucho de golpe, si estás familiarizado con el nuevo input system debería ser fácil.
  44. 2 points
    Hola, He incoporado un vídeo nuevo a la serie. En este entreno dos agentes a la misma vez, el segundo agente tienen unas pequeñas modificaciones que hacen que se dedique a empujar y molestar al player. Es decir, no tan solo intenta llegar al premio, sino que tambien intenta impedirle al player llegar. Me ha sido mucho mas facil entrenar a un segundo agente que crear la logica de programación de un NPC que se dedicase a lo mismo. Empiezo a verle cosilla a esto de los MLAgents.
  45. 2 points
    jejejeje el build de schrodinger: no sabes si funciona o no funciona hasta que le haces doble click al ejecutable.
  46. 2 points
    mmmmm, No uso un sprite mask, juego con el order in layer y el color de la camara. Mi camara tiene el color negro, y todos mis elementos son negros, menos la luz, que es blanca. La luz tiene un order in layer de 0, mientras que los elementos un order in layer de 1. Esto hace que la cuando coinciden la luz queda por debajo del elemento y así se puede ver. No sé si se entiende bien.... Pero se puede conseguir el efecto que quiere @nomoregames pero con un grave problema.... si sus elementos tienen varios colores no sirve. Muchas gracias @Igorpor poner un vídeo mío 🙂 Saludos.
  47. 2 points
    1.Definición de Object Un Object es una class herededa de Mono que contiene una serie de funciones y propiedades virtuales básicas. Todo el resto hereda de esta clase base. Cada Object es responsable de la inicialización/destrucción de sus Objects en jerarquía inferior. No está permitido desactivar ninguno de los Objects mediante enabled/SetActive. Esto es debido a que un gameobject vuelve a llamar a las funciones Awake/Start/OnDestroy cuando esto ocurre y no son acciones deseables. Todos los Objects contienen: - Funciones virtuales de inicialización/destrucción específicas (start y destroy). - Función virtual de enable que permite activar/desactivar los diferentes updates a través del Update Manager 2.Definición de los diferentes Objects (Managers, Controllers y Components) - Un Manager inicializa y gestiona el flujo entre Controllers. - Un Controller inicializa Managers y Components, la gestión de flujo entre Components y otros Managers y contiene lógica de proceso. - Un Component inicializa otros Components además de contener lógica de proceso. La diferencia entre un Controller y un Component es que el Controller permite la interacción entre diferentes Components a través de él. Si los Components son privados al Component no se requiere de un Controller. 3.Referencia entre Objects - Todo Object únicamente puede tener una y solo una referencia a otro Object. Como referencia se entiende referenciado en el editor o a través de GetComponent. Si hay más de un Controller que requiere acceder a un Component, se creará un Manager que gestione el acceso único al Controller que contiene ese Component. - Un Controller no puede acceder a otro Controller directamente. Debe hacerlo a través de su Manager. - Un Controller puede acceder a cualquiera de los Managers que tenga en su jerarquía superior. - Un Component no puede acceder directamente a otro Component que no se encuentre referenciado directamente. Debe hacerlo a través del Controller común. Si el Component pertenece a otro Controller ésto debe hacerse a través de un Manager. Esta circunstancia evidencia con total probabilidad un error de diseño. Para acceder a otros Components a través del Controller común o un Controller que acceda a un Manager se utilizan events específicos. 4.Scene Manager (SM) Gestiona la carga y descarga de scenes de manera async e inicializa el Main Manager que es buscado en tiempo real. 5.Main Manager (MM) Este Object es único por scene e inicializa todos los Managers de jerarquía superior. Es llamado en la carga de la scene por el Scene Manager. Contiene un start y destroy con delays a base de coroutines para permitir una inicialización sin bloqueos y de gestión de estados. 6.Update Manager (UM) El Update Manager es una class static y singleton. Permite el registro/deregistro de cualquier Object que tenga la interface iUpdatable en tiempo real. 7.Object Pool Manager (OPM) Este Manager permite la gestión de pooling de Objects que tengan el interface iObjectPool. El Manager no es global o static sino que se permiten múltiples instancias de OPM's para que puedan incluso integrarse en prefabs. Permite mantener un mínimo/máximo de Objects en pool y llama a unas funciones específicas de spawn y despawn. 8.Audio Manager (AM) Es una class singleton. Contiene una referencia al Audio Mixer único y a un Scriptable Object (SO) que contiene diferentes funciones y métodos para la gestión de audio. Desde el cambio de volumen en db's, la reproducción de audio vía streaming, events de cambios de estado en un audio o de multiidioma. Todos los audio sources tienen asignado un canal en el Audio Mixer.
  48. 2 points
    Por supuesto. Tengo estas dos simples funciones en el Scene Manager: private void memoryInfo(string process) { Debug.Log("memoryGC" + process); Debug.Log("memoryGC:RAMTotal " + cSystemIOMemory.RAMTotal); Debug.Log("memoryGC:RAMAlloc " + cSystemIOMemory.RAMAlloc); } public IEnumerator memoryGC(string process) { this.memoryInfo(process); yield return StartCoroutine(cSystemIOMemory.memoryGC()); this.memoryInfo(process); } Una vez se han inicializado todos los componentes desde el main, lo llamo así: this.StartCoroutine(this.sceneManager.memoryGC("_main:end")); Y me dará lo que actualmente llevo ocupado y lo que se ha liberado. cSystemIOMemory es una extensión y contiene ésto: public static class cSystemIOMemory { public static string RAMTotal { get { return (SystemInfo.systemMemorySize.ToString() + " MB"); } } public static string RAMAlloc { get { return ((Profiler.GetTotalAllocatedMemoryLong() / 1000000).ToString("0") + " MB"); } } public static IEnumerator memoryGC() { yield return Resources.UnloadUnusedAssets(); GC.Collect(); }
  49. 2 points
    Vale muchas gracias. Si, soy noob pero estoy aprendiendo mucho y me ayuda a desconectar de mis problemas 🥰
  50. 2 points
    😳 por favor, que alguien expulse a este señor de la comunidad 😂 yo tambien creo que una de las partes mas satisfactorias de la programacion es el solucionar problemas, el buscar la solucion, ...no buscarla en internet, sino comerte la cabeza y encontrar tu propia solucion... y darle al "play" y ver que funciona.... eso es lo mejor que hay. pero por otra parte tambien quiero terminar algo, para demostrarme a mi mismo que puedo terminarlo... aunque mientras vas avanzandolo (el proyecto) te va pareciendo cada vez menos atractivo... te va pareciendo muy pobre, con un arte bastante cutre.... y se te van quitando las ganas de continuarlo... pero aun asi voy a intentar acabarlos y publicarlos.... aunque sea gratis. es por ejemplo lo que me pasa con mi juego de naves 2d (star crash, hay un post en "proyectos") ...al principio lo empeze como un proyecto para crear mi propio "pathFinding" (que funcion muy bien, porcierto) hice un mapa que se generase proceduralmente (con cubos) y enemigos que patruyaban y si te veian te podian perseguir y buscar por el mapa... luego me puse a hacer que disparasen y les meti una imagenes de naves.... y dije: "ah, pues este juego puede estar guai asi, siendo una especie de shootem'up con exploracion y tal".... y segui avanzandolo, meti un monton de escenarios distintos (procedurales) meti skills y un menu donde conseguirlas y mejorarlas... hice mogollon de enemigos diferentes.... y parecia medio guai el juego... pero poco a poco me parecia que el aspecto grafico era bastante simplon... o que no tenia el suficiente atractivo.... pero como ya lo tenia muy avanzado pues dije: "venga, este hay que acabarlo" menu principal, sistema de guardar y cargar, un pequeño tutorial... pequeñas mejoras graficas... pero cada vez me parece mas soso... ademas a temporadas hago este y a temporadas hago otros... como tengo varios a medias pues puedo ir cambiando y asi no me "saturo" todo el rato con el mismo... .... y al final no se que queria decir... pero si... completar un proyecto se puede hacer largo, arduo, y desmotivador.... sobretodo si ves que no es muy bueno... o si lo comparas con juegos de exito (cosa que es un error) pero creo que el mero hecho de terminar un juego completo ya es en si un exito. por eso quiero empezar a acabar algunos proyectos. y valla parrafada mas larga he soltado...
×
×
  • Create New...