Jump to content

Pere

Registrados
  • Content Count

    126
  • Joined

  • Last visited

  • Days Won

    22

Pere last won the day on August 19

Pere had the most liked content!

Community Reputation

93 Excellent

1 Follower

About Pere

  • Rank
    Asiduo

Profile Information

  • Especialidad
    Coder

Recent Profile Visitors

915 profile views
  1. 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.
  2. Pere

    Curso de MLAgents

    Muchísimas gracias a ti! Seguiste el curso por la web? O YouTube?
  3. 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.
  4. 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.
  5. 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!
  6. 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!!!!
  7. Nada de cutre, estas soluciones sencillas que cumplen su objetivo lo que son es Brillantes!!!!! A mi me encantan!
  8. 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.
  9. 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.
  10. 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.
  11. dios, que currada de canal! Tienes toda mi admiración y mi suscripción.
  12. WTF! Genius! A ver si encuentro un poquitín de tiempo para jugar con tu inventazo!
  13. Pere

    [GAME] SOULBOUND

    A mi tambien me ha recordado un poco a Liombo. Me encanta! Felicidades.
  14. 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.
  15. 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!
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...