Jump to content

Pere

Registrados
  • Content Count

    128
  • Joined

  • Last visited

  • Days Won

    24

Everything posted by Pere

  1. Bueno, Después del curso de Introducción a los ML-Agents: He empezado otro que trata temas más en profundidad, pero no me atrevo a llamar avanzado. No tan solo intentare tocar cosas nuevas sinó tocar mas en profundidad algunas de las vistas en el curso de iniciación, como la configuración del fichero .yaml y su importancia. Por ahora cuenta tan solo con lecciones: La importancia del fichero .yaml. En este explico como afectan las modificaciones del fichero de configuración al proceso de aprendizaje de los ML-Agents, intentado explicar para que se usa cada uno de los parámetros del fichero, pero dando más una explicación practica, que teórica, aunque sin dejar todo del lado esta segunda. La intención ha sido coger un proyecto sencillo y modificar el proceso de aprendizaje usando tan solo la configuración de este fichero, sin modificar el script o los permisos / castigos que recibe el agente. Usando Imitation Learning en un proyecto sencillo. Con el mismo proyecto, con un fichero .yaml ya optimizado en el apartado anterior, vemos cómo afecta el uso de Imitation Learning en el proceso de aprendizaje. Se da una explicación de lo que es el Imitation Learning y se explica cómo usarlo, crear los ficheros .demo y modificar de nuevo el .yaml para que acepte los ficheros creados como entrada. No todas las lecciones van a tener vídeo, y posiblemente la explicación de texto sea bastante más importante que en el primer curso. El primer vídeo es el que acompaña a la lección de Imitatión Learning: El proyecto esta disponible en la página del curso: https://cursos.uadla.com/curso/curso-intermedio-de-ml-agents/lecciones/imitation-learning/ No creo que consiga un ritmo de publicación de lecciones muy grande, ya que cada tema lleva mucho tiempo. Cada modificación del script, de los premios, del fichero .yaml necesita de un proceso de aprendizaje para ver como afectan las modificaciones, algunos se pueden descartar en los primeros minutos, pero otros necesitan de un tiempo de ejecución nada despreciable. Para crear estas dos lecciones habré ejecutado entre 100 y 150 procesos de aprendizaje, que posiblemente sumen más de 80 horas, tan solo para poder ver cómo cuadrar la teoría con la practica. Los ML-Agents son un mundo que esta casi más cerca del Machine Learning que del desarrollo de juegos, pero creo que ya podemos usarlo para crear NPC's que aparezcan en nuestros juegos.... o bueno, en vuestros juego, por que yo si estudio y hago vídeos no hago juegos 😞
  2. Pere

    Curso de MLAgents

    Bueno.... empiezo con el curso intermedio de ML-Agents https://cursos.uadla.com/curso/curso-intermedio-de-ml-agents/lecciones/la-importancia-del-fichero-yaml/ Esta vez sin vídeo, destripando el fichero de configuración .yaml. Vemos como con el mismo código y tan solo variando los parámetros del motor de Machine Learning obtenemos curvas de aprendizaje totalmente diferentes, y como cada curva aunque parezca que obtienen un mismo resultado, producen agentes que son igual de efectivos, pero que actúan de formas muy diferentes.
  3. Pere

    Curso de MLAgents

    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.
  4. Pere

    Curso de MLAgents

    Muchísimas gracias a ti! Seguiste el curso por la web? O YouTube?
  5. Pere

    Curso de MLAgents

    Dura un poquitín menos 🙂 La verdad es són 9 vídeo de menos de 10 minutos.... osea que no llega a las dos horas de contenidp, y si se quiere seguir los proyectos y crear los ejemplos yo creo que en un dia se puede hacer el curso entero.... o bueno, eso he intentado.
  6. Pere

    Curso de MLAgents

    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. Hola Chime! Veo que estas empezando el canal, pero que videos mas buenos! De verdad, muy bien hechos, me encanta la edición. Me acabo de suscribir 🙂 i a esperar que vayas creando contenido!
  8. eiiii zeetlabs, justamente tengo un tutorial de como hacer un infinite runner, y en el segundo vídeo lo explico. Te lo intento explicar un poco aqui también: He creado un array de Vector2, como variable de la clase, pero que se pueda informar desde el editor. En este array informo las posiciones posibles. Despues en la funcion de movimiento, cuando pulsan una tecla utilizo algo parecido a: transform.position = Vector2.Movetowards(posicionactual, posicion a la que quiere ir, velocidad) Igualmente acabo de hacer una WEB que esta en pruebas, con el curso completo y tuenes el codigo del script utilizado, te dejo la URL: https://cursos.uadla.com/curso/como-crear-un-infinite-runner-2d-con-unity/lecciones/creando-el-protagonista-con-gimp-para-unity/ Por cierto, que el cursos es totalmente gratuito, hice la WEB por que seguirlo con listas de youtube es caotico y no tenia nunca claro como mostrar los scripts. Yo creo que la solución te puede cuadrar mucho, bueno, yo he acabado usando ese script y ese tipo de movimiento en unos cuantos Infinitte Runners que he hecho. Saludos!!!!
  9. Nada de cutre, estas soluciones sencillas que cumplen su objetivo lo que son es Brillantes!!!!! A mi me encantan!
  10. 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.
  11. Ei, yo me vi en las mismas hace poco y acabe creando un script configurable para dialogos, muy sencillo de configurar. Se basa en un array de frases, cada frase es de un struct definido que he llamado _sentence. Cada _sentence esta compuesta por el texto, el personaje al que pertenece y si tiene que activar o desactivar el bocadillo que rodea al texto. Puedes tener multiples NPC's cada uno con frases diferentes, bocadillos o no, y activarlos o desactivarlos en la frase que quieras.... la verdad es que se me hace complicado de explicar como es y como funciona, casi que lo mejor es que le des un vistazo al vídeo que te dejo al final. El script vendría a ser este: public class DialogManager : MonoBehaviour { /* * El _dialogBox es opcional, es una caja * que rodea al texto, el script solo * la activa y desactiva. */ [System.Serializable] public struct _dialogBox { public int _character; //Personaje al que pertenece. public GameObject _box; //Objeto a activar / desacticar } /* * _sentence. El dialogo se construye en base a un array * de esta estructura */ [System.Serializable] public struct _sentence { public int _character; //Caracter al que pertence la frase. public string _2say; //Lo que tiene que decir. public bool _active; //Indica si se tiene que activar el marco de dialogo. public bool _deactive; //Se desactivara el marco de dialogo en la siguiente frase. } public TextMeshPro[] _textContainers; //Array de TextMeshPro en los que se muestra el texto public _sentence[] _sentences; //Array de frases que diran nuestros protagonistas public _dialogBox[] _dialogBoxes; //El marco que puede mostrarse rodeando las frases. [SerializeField] private float _speedWrite; //Tiempo que pasa entre que se escribe una letra y la otra. //private bool _enableDisableBox = false; private int _index = 0; //Contador interno para saber por que frase vamos. private void Start() { CleanText(); //Limpiamos el texto que se pueda encontrar en los textmeshpro if (_sentences[_index]._active == true) { //En el caso de que la primera frase lo indique activamos el dialogbox. EnableDisableBox(true); } //Empezamos la conversacion. StartCoroutine(Talk()); } private void Update() { if (Input.GetMouseButtonDown(0)) { /*En el caso de que se detecte una pulsacion de mouse se continua el dialogo. */ ContinueDialog(); } } public void CleanText() { //Eliminamos el texto de todos los TextMeshPro for (int i = 0; i < _textContainers.Length; i++) { _textContainers.text = ""; } } /* * Esta funcion se ejecuta en paralelo. * Escribe las frases letra por letra. * */ IEnumerator Talk() { //Elimina el texto previo. _textContainers[_sentences[_index]._character].text = ""; foreach (char letra in _sentences[_index]._2say.ToCharArray()) { //Suma cada letra al TextMeshPro _textContainers[_sentences[_index]._character].text += letra; //La funcion se espera el tiempo indicado. yield return new WaitForSeconds(_speedWrite); } } /* * Activa o desactiva el elemento que puede contener el texto * y que se lo indicamos en el editor * */ public void EnableDisableBox(bool enable) { _dialogBoxes[_sentences[_index]._character]._box.SetActive(enable); } /* * Continua con la siguente frase del dialogo */ public void ContinueDialog() { if (_sentences[_index]._deactive == true) { //Si la frase anterios tenia que ser desactivada llamamos a //la funcion que desactiva su globo EnableDisableBox(false); } //Aumentamos en 1 el _index con lo que pasamos a la siguiente frase. _index += 1; //Comprobamos que tenemos otra sentencia que escribir if (_index < _sentences.Length) { if (_sentences[_index]._active == true) { //Si es necesario activamos su dialog box EnableDisableBox(true); } StartCoroutine(Talk()); } else { //si es la ultima frase, limpiamos el texto. CleanText(); } } } Si has empezado a usar Fungus esto te va a parecer del paleolitico y super simple, pero como ejemplo de como crearlo no esta mal del todo.
  12. Hola, Os dejo un par de vídeos sobre como implementar un sistema de navegación Point & click con navmesh, en el primero se configura el sistema y veamos un solo agente. En el segundo se crean dos tipos de terreno diferentes y dos agentes que responden de forma diferente al terreno. Son muy sencillos y cortos, espero que le puedan servir a alguien 🙂 Saludos.
  13. dios, que currada de canal! Tienes toda mi admiración y mi suscripción.
  14. WTF! Genius! A ver si encuentro un poquitín de tiempo para jugar con tu inventazo!
  15. Pere

    [GAME] SOULBOUND

    A mi tambien me ha recordado un poco a Liombo. Me encanta! Felicidades.
  16. Pere

    ANSWERED spawner

    Me alegro que te funcionase. No se si entiendo bien el problema del prefab y el player pre-informado porque no nunca he intentado nada parecido. Pero al crear el prefab no puedes asignarle un objeto en concreto dentro del juego, sino una plantilla. A ver si me explico..... no le puedes asignar tu player, sino decirle que contendrá un objeto de tipo player, pero no es el que tu tienes en la pantalla.
  17. Pere

    ANSWERED spawner

    Puedes coger el transform del Player en la función Start del Lizard. El codigo vendria a ser algo así: ElPlayer = GameObject.FindGameObjectWithTag("Player"); Por otro lado, al hacer el spawn con el Instantiate usas muchos recorsos, que si solo instancias un par de objetos no pasa nada, pero como te pongas a spawnear por decenas.... quizás sí que se nota en el rendimiento, lo mejor es trabajar siempre con objetos cacheados. Te dejo un vídeo, donde explico como hacer un spawn, y da la posibilidad de trabajar con objetos cacheados, el código del script tambien está disponible en esta dirección http://martra.uadla.com/2020/01/23/creacion-de-un-spawner-para-unity/, puedes usarlo como plantilla para tu spawn. Espero que te sirva de algo!
  18. Pere

    [GAME] Way Home - 2D

    bueno, No he modificado la dificultad todavia, pero si que he modificado la linea de fin del segundo nivel, ya que podia pasar como le ha pasado a @zelleGames, que no conseguia pasar al acercarse a la luz.
  19. Pere

    [GAME] Way Home - 2D

    Pues seguramente tienes toda la razon! Mi familia me dice justamente lo mismo. Y mira que lo rebaje un poco.... antes era peor! Lo del segundo nivel no lo tengo del todo claro, por que al llegar a la luz tendrías que haber pasado de nivel, bueno, realmente tienes que ir un poro mas alla de la luz, modificare el collider que lo detecta y lo acercare un poco mas. Mil gracias por probarlo y por los comentarios, fijo que encuengtro un momento para modificarlo. Muchas gracias por los comentarios y por jugar! Lo de la primera fase muy dificil veo que es algo que todos estais deacuerdo. La segunda.... no se si queda claro nada, pero como es un sueño, era más o menos buscado, que te encuentra ahi en medio sin saber bien que tienes que hacer, te matan, pero no pasa nada, continua todo igual. La tercera es todavía mas rara 🙂 Pero no se si alguin ha conseguido acabar la segunda. Voy a ver si funciona el final de la segunda, que ahora, por otro comentario, no lo tengo claro.
  20. Pere

    [GAME] Way Home - 2D

    Gracias!! A mi la ambientación tambíen me gusta 🙂
  21. Pere

    [GAME] Way Home - 2D

    Si 🙂 Bueno, la verdad es que siempre es una sensación agridulce publicar algo.... Lo de la falta de tiempo, es desesperante.... sobretodo porque creo que se te alargan los plazos de entrega... juegos que se podrian hacer en una semana se convierten en meses.... Pero ehhhh!!!! Que es una afición, y estoy muy contento de este juego. De los tres o cuatro que tengo, creo que esta entre los dos mejores 🙂.... Gracias por jugarlo! Estaré encantado de recibir los comentarios.
  22. Pere

    [GAME] Way Home - 2D

    Bueno..... Digamos que ya está publicado 🙂 Como mínimo el primer nivel, con modificaciones, y un par de mini niveles mas con alguna pantalla intermedia. Al final me ha pasado lo de siempre, falta de tiempo y pérdida de interés paulatina..... Lo podeis encontrar en kongregate, itch.io gamejolt y newgrounds. Por ahora, solo en versión WEB.... y seguramente se quede así.
  23. Pere

    [GAME] Way Home - 2D

    Nuevo devlog :-) En esta ocasión he acabado una de las pesadillas que tendrá Mini en el segundo nivel. El ambiente es quizas menos oscuro, pero mas difuminado, las lineas no son tan rectas y hay mucho mas humo.... es un sueño. Cuesta saber que esta pasando, incluso cual es el objetivo.
  24. pues proyectazo! Y no desfallezcas, yo tengo dos niñas y alguna horita a la semana voy encontrando. Se trata de adaptar tamaño de proyectos y expectativas.
  25. Pere

    [GAME] FPS Online

    pues como ejercicio esta bien :-) PEro como dicen los compis, tenemos esa sensación de proyecto de ejemplo que hacemos todos al empezar con Unity 3D. Pero todos hemos pasado por aqui! Animo y a por mas.
×
×
  • Create New...