ðŸ’Ĩ PatrÃģn FACTORY method 🧠 | PATRONES de DISEÑO para UNITY

āđāļŠāļĢāđŒ
āļāļąāļ‡
  • āđ€āļœāļĒāđāļžāļĢāđˆāđ€āļĄāļ·āđˆāļ­ 25 āļĄ.āļ„. 2025

āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™ • 57

  • @ThepowerupsLearning
    @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    âĪïļ Curso de Patrones de diseÃąo para VIDEOJUEGOS: bit.ly/3k38KE1
    ðŸ”ĩ Discord: discord.gg/KWABp4BfN4
    ðŸ•đ Blog: thepowerups-learning.com/
    👆👆👆👆👆👆👆👆👆👆

  • @pabloverapeiro503
    @pabloverapeiro503 3 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    Muchas gracias por el vídeo, me han entrado ganas de saber mÃĄs sobre como funciona :) En el blog tambiÃĐn estÃĄ muy bien explicado. Viendo esto me he dado cuenta de que estoy haciendo crímenes de guerra en mi cÃģdigo.

  • @matiasdure5490
    @matiasdure5490 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Estuvo muy buena la explicaciÃģn! Subscripto👌🏞

  • @sahitokun
    @sahitokun 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    por fin una explicaciÃģn sencilla, concreta. ÂĄÂĄÂĄÂĄGracias!!!!👍

  • @joelpascual3702
    @joelpascual3702 3 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    Y en el config. la funciÃģn de Create, si quitas el Instantiate, como es que puede crear el powerup con la ID? Es de background? Es por lo que hay en el condicional? De donde saca la variable powerup que devuelve con el return? 12:59

  •  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Este patrÃģn me ha encantado. Sí, es realmente Útil. ÂĄGracias!

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +3

      Yo creo que es de los que mÃĄs utilizo 😄

  • @Javier-uh7mb
    @Javier-uh7mb 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Muy bueno, Dani, muchas gracias.

  • @andersencastaneda6080
    @andersencastaneda6080 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Buen video, interesante patron. Por cierto, al final instanciaste el DrunkPowerUp pero con el id de Attack.

  • @adriancorbalan
    @adriancorbalan 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Muy bueno! Ya te tenía fichado de algÚn video pero gran explicaciÃģn. Ahora tambiÃĐn sÃĐ que estaba usandolo sin saber con alguna modificaciÃģn extraÃąa jeje

    • @ThepowerupsLearning
      @ThepowerupsLearning  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Suele pasar con los patrones, algunos los aplicamos por intuiciÃģn 😆

  • @ezequielignaciodelafuente5501
    @ezequielignaciodelafuente5501 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Buenas, estoy pensando en preparar un Trabajo final Integrador sobre Unity para la universidad y tus videos me estan ayudando mucho.

    • @ThepowerupsLearning
      @ThepowerupsLearning  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Me alegro mucho de que te estÃĐn ayudando, Ezequiel 😁.
      ÂŋSobre quÃĐ es el trabajo?

    • @ezequielignaciodelafuente5501
      @ezequielignaciodelafuente5501 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      @@ThepowerupsLearning Todavía lo estoy pensando, pero la idea es que se trate de como desarrollar un proyecto en unity.
      Aplicando patrones de diseÃąo y de arquitectura, ademÃĄs de buenas prÃĄcticas.
      Igual me falta dos aÃąos para terminar la licenciatura.
      Esto lo haría, porque al hacer varios proyectos chiquitos con unity, me doy cuenta lo necesario de aplicar todo esto y las ventajas que te da.

    • @ThepowerupsLearning
      @ThepowerupsLearning  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      ÂĄMe parece genial! Mucha falta nos hace aplicar buenas prÃĄcticas y no reinventar la rueda 🙂

  • @hernanalfaro3949
    @hernanalfaro3949 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    en el minuto 18:20 porque haces Instantiate(_powerUpConfiguration)?
    el factory te pide un objeto del mismo tipo que _powerUpConfiguration, funcionaria si directamente le pasas _powerUpConfiguration, en ves de hacer el Instantiate?
    porque segun tengo entendido, con el CreateAsset ya creas una instancia en Assets

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      ÂĄHola HernÃĄn! CreateAsset es para crear el asset en tiempo de editor, no en play mode. Lo estoy instanciando porque así se llamarÃĄ su Awake, de otra forma lo que tenemos es una referencia al ScriptableObject que tenemos en el editor y no se llama a su Awake.

  • @joelpascual3702
    @joelpascual3702 2 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    Singleton sale a cuenta con este tipo de clases de la factoría abstracta? Estoy intentando ver como puedo usarlos ambos de forma coherente, a fín de entender lo que hago.

  • @lopendex
    @lopendex āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    puedo aplicar este patron para instanciar personajes ?

  • @sergiocm9646
    @sergiocm9646 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    Buenas, explicareis tambiÃĐn como utilizar este patrÃģn con Zenject? Utilizando sus herramientas propias?
    Âŋa quien no le he pasado que ha implementado este tipo de logica sin tener en cuenta este patrÃģn (y lo q se lia si no) y con esta forma se vuelve tan simple

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

      ÂĄHola! Zenject da para una serie entera, sí que me gustaría hacer algo pero de momento no se cuando serÃĄ.

    • @sergiocm9646
      @sergiocm9646 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      @@ThepowerupsLearning Way, hace tiempo hice una factoría con Zenject pero me gustaría ver como lo haríais vosotros y así comparar.
      Habra que seguir los vídeos hasta que salgan :)

  • @pistoleta
    @pistoleta 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Brutal 👏👏👏

  • @francoramos5669
    @francoramos5669 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Hola Dani! He encontrado tu canal y la verdad es que todo el contenido estÃĄ genial :D, te hago una consulta, buscar el ID con el create con string, no consumiría mas memoria que usar un id int? Osea, se podria usar int en vez de string?

    • @ThepowerupsLearning
      @ThepowerupsLearning  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Hola! La comparaciÃģn de un int es mucho mÃĄs rÃĄpida qie la de un string, pero muchas veces no vale la pena el sacrificio ya que un string nos da mucha mÃĄs info que un int.
      Veras que en mis vídeos nunca busco la optimizaciÃģn de esos detalles ya que no van a marcar una diferencia en el proyecto, y premio la legibilidad y mantenibilidad sobre la optimizaciÃģn.
      Te recomiendo que eches un vistazo a este vídeo: th-cam.com/video/rbPyHyCH_QQ/w-d-xo.html

    • @francoramos5669
      @francoramos5669 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      @@ThepowerupsLearning muchas gracias! Lo verÃĐ!! Genio!

  • @davidguerrero7244
    @davidguerrero7244 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Hola Dani! Excelente explicaciÃģn! Una pregunta: ÂŋComo se gestionaría la creaciÃģn de Powerups si cada uno necesitara distintos parÃĄmetros para su creaciÃģn?

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Hola David! Para gestionar distintos parÃĄmetros podrías combinar el Factory Method con el PatrÃģn Builder. Lo que harías es que la Factoría devolvería un Builder y a este le podrías pasar los parÃĄmetros que necesites. En este vídeo tienes un ejemplo de cÃģmo aplicar el Builder: th-cam.com/video/PiWhKl0gxTM/w-d-xo.html

  • @kokebond
    @kokebond 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Hola, me parece super bueno tus videos.
    Duda, realice esta forma con objetos 3D y al momento de invocarlos, al igual que tu, lo instancia muchas veces, como puede solucionar este tema?
    AdemÃĄs, seria bueno que al llamar otro objeto, se elimine el objeto anterior.

    • @ThepowerupsLearning
      @ThepowerupsLearning  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Hola! Revisa que estÃĄ accionando la creaciÃģn y que no se llame varias veces. Lo de eliminar al anterioe ya es un comportamiento específico, no es responsabilidad de este patrÃģn

    • @kokebond
      @kokebond 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      @@ThepowerupsLearning De acuerdo, gracias.

  • @devgrids5455
    @devgrids5455 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    buen video, una consulta que IDE usas?

    • @ThepowerupsLearning
      @ThepowerupsLearning  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Utilizo Jetbrains Rider, el mejor editor para Unity y Unreal 🙂

    • @devgrids5455
      @devgrids5455 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      @@ThepowerupsLearning gracias genio

  • @VictorMartinez-gn5fk
    @VictorMartinez-gn5fk 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Increible, sin palabras 👍

  • @aesirndend
    @aesirndend 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Muy buenos videos, muy interesantes
    Como se llama ese IDE?

    • @ThepowerupsLearning
      @ThepowerupsLearning  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Gracias! Utilizo Jetbrains Rider, para mí el mejor IDE para trabajar con Unity y Unreal 🙂

  • @ricardodelarosa6708
    @ricardodelarosa6708 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Este patrÃģn ha conseguido que tenga un cÃģdigo mucho mÃĄs mantenible pero tengo una duda, o mÃĄs bien una inquietud: Utilizar strings para los id me da la sensaciÃģn que puede explotarnos tarde o temprano, creo que es propenso a erratas y, si luego cambiamos el id por alguna razÃģn, tendríamos que buscar donde se estÃĄ usando ese ID.
    He empleado un Enums para indicar el tipo de "PowerUp", pero creo que estaría incumpliendo Open/Close porque si quiero crear uno nuevo, tengo que irme a la clase y aÃąadir un valor mÃĄs al enum. Cabe destacar que este enum solo lo uso en la factoría para identificar el tipo, y como la factoría emplea listas y diccionarios, no tengo if/else con el enum.

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      ÂĄHola Ricardo!
      Como dices, al utilizar la enum no estÃĄs permitiendo que tu sistema escale sin modificarlo. Si te preocupa escribir mal la ID, o tener que buscar todas las IDs cuando lo tengas que cambiar, podrías hacerte alguna pequeÃąa tool, o atributo, que te valide las IDs.
      Hace un tiempo vi una charla de la Unite donde utilizaban los ScriptableObject para evitar este mismo problema. Lo que tenían era un SO con la ID (string), y donde tenían que utilizar la ID en lugar poner el string arrastraban el SO. Esto te permite centralizar las IDs en un Único sitio.
      Espero que te haya ayudado la respuesta, un saludo!

    • @ricardodelarosa6708
      @ricardodelarosa6708 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      @@ThepowerupsLearning Entiendo entiendo. Una tool a lo mejor es un poco excesivo pero es cierto que no hay muchas mÃĄs opciones.
      Con respecto a la charla, creo que se de cual estÃĄs hablando, la recuerdo, probarÃĐ a utlizar ScriptableObjects. Para quien le interese, es muy buena charla de como se pueden usar los SO para otras cosas aparte de guardar datos bÃĄsicos. Aquí va el link: th-cam.com/video/raQ3iHhE_Kk/w-d-xo.html (habla de Enums en 45:22)

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Esa es la charla! Muchas gracias por compartirla! 😁

  • @cbr9731
    @cbr9731 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Talvez no entendí bien, pero con los prefabs ya estÃĄn creadas las instancias de los diferentes powerup, y lo que se estÃĄ creando son instancias de los prefabs no realmente las instancias de las clases de los power up. Sería genial un ejemplo de creaciÃģn de instancias de clase sin utilizar prefabs, para los casos donde las instancias de clases no son componentes en el editor .

    • @ThepowerupsLearning
      @ThepowerupsLearning  3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Hola! Las insgancias no estÃĄn creadas, lo que tenemos es un prototipo que es el prefab, y creamoa instancias con ese prototipo.
      Para clases puras el concepto es el mismo pero cambias el instantiate por el new MiClase

  • @VictorMartinez-gn5fk
    @VictorMartinez-gn5fk 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Duda: Âŋel naming convention que utilizas de dÃģnde sale?

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Es el de C# pero puede que yo utilice alguna variante como _ para las privadas

  • @rubenquintanilla3810
    @rubenquintanilla3810 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    La verdad me confundio mucho la interfaz de Unity, pues vengo de Unreal y C++.
    Sin embargo logre entender el uml y la logica que intenta resolver este patron.
    Gracias.

    • @El_Facheras
      @El_Facheras āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Tío quÃĐdate en Unreal, Unity es una mierda a comparaciÃģn, en Unity casi siempre hay algo roto, cosa que los que conozco que estÃĄn en Unreal no tienen tantos problemas, si no fuera por que me fui a Unity en un principio...ahora mismo estaría con Unreal.

    • @rubenquintanilla3810
      @rubenquintanilla3810 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      @@El_Facheras gracias por su consenso.
      Tampoco pude usarlo porque exige mínimo Windows 8.1
      Pasa que la mayoría de las ofertas laborales estÃĄn en unity. Pero es verdad que cuando hay dudas y problemas con los errores, casi nadie en la comunidad sabe arreglarlos.
      Pero como contra hacer un apk para Android con unreal 4 es casi imposible. Las soluciones son rebuscadas y ninguna me funciono.

  • @pradita218
    @pradita218 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Una duda, por que haces todo privado? que ventajas tiene?

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +3

      Lo hago para respetar el principio de encapsulamiento. Cada objeto es dueÃąo de su estado y nadie externo debería acceder a el y poder modificarlo, salvo que es objeto publique funciones o propiedades para hacerlo. es.wikipedia.org/wiki/Encapsulamiento_(inform%C3%A1tica)

  • @javierherasalcuaz
    @javierherasalcuaz 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Gran vídeo! Por fin tengo algo de tiempo, así que los fines de semana te estarÃĐ viendo y pensando en ti :P
    Disculpa mi ignorancia pero te lanzo un par de dudas:
    Por lo que comentas del principio de responsabilidad Única. Para combinar object pooling con factory ambas deben ser clases específicas entiendo(yo mezclaba todo) Pero ahí quien debe mandar al factory crear? la misma clase que gestiona el pool? o debería ser otra clase específica? y, en tal caso, quien le pasaría los objetos creados al pool?
    Disculpa si parezco retarded, pero mi mente estÃĄ explotando y no entiendo hasta que punto realmente cada clase debe tener una responsabilidad Única.
    Y continÚo xD...
    Si necesitamos otro tipo de objetos a instanciar, por ejemplo npcs o proyectiles, incluiríamos todos en una misma clase factory o crearíamos la propia para cada uno? porque entiendo que para cada tipo de objeto que debemos crear debe tener su propio spawner.
    Un saludo y ya siento ser tan pesado!

    • @ThepowerupsLearning
      @ThepowerupsLearning  4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      ÂĄHola! Gracias 😍
      Empiezo por la Última que es la mÃĄs fÃĄcil de contestar xD.
      - Cada tipo de objetos debería de tener su factoría, así no mezclamos peras con manzanas. Pero tambiÃĐn puedes aolicar el Absttact Factory (enlace en la descripciÃģn) y tendrías una fabrica para toda una familia de objetos (que tengan relaciÃģn).
      - Yo haría una Pool generica y así la puedes reciclar en todas las factorias.
      Si tu Pool tiene mÃĐtodos para registrar prefab, crear, reciclar objeto, etc. la Factoría puede hacer de intermediario, todos hablan con el Factory y este delega algunas cosas a la Pool. En este caso yo haría una factoría que fuese clase abstracta para reciclar toda esa lÃģgica comÚn que vas a tener en todas las Factory.
      TambiÃĐn te dirÃĐ que no necesitas llevarlo al extremo, una Pool como tal ya estÃĄ actuando de Factory (aunque no le pongamos ese nombre y tambiÃĐn haga el reciclado). Lo importante es que los consumidores no hagan el Instantiate ni se tengan que preocupar por el prefab ni nada.
      Espero haberme explicado bien, que es mucho texto para tan poco espacio, jeje.
      ÂĄUn saludo!

    • @javierherasalcuaz
      @javierherasalcuaz 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      @@ThepowerupsLearning Te has explicado genial, muchas gracias! Voy a ponerme a aplicar todo para ir asimilÃĄndolo :P

  • @CritickalTvRandom
    @CritickalTvRandom 4 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    Muy bueno el vídeo, ÂŋPero quÃĐ necesidad de decir todo en inglÃĐs?