āļāļīāļāđāļāļāđāļĢāļĨāļĨāđāļēāļāļĨāļēāļĒāđāļāđāļāļ āļĢāļĢāļĒāļēāļāļāļāļĨāļļāļāļŠāļļāļāļŦāļĨāđāļāļŦāļĨāļąāļāļāļēāļāļāļ·āļāđāļĢāđāļĄāļāļāļīāļāļāļąāđāļ āđāļĄāđāļĢāļđāđāļ§āđāļēāđāļāļāđāļāđāļāļāļāļąāļāļĄāļŦāļēāđāļĻāļĢāļĐāļāļĩ
1:32:40
âĪïļ Curso de Patrones de diseÃąo para VIDEOJUEGOS: bit.ly/3k38KE1
ðĩ Discord: discord.gg/KWABp4BfN4
ðđ Blog: thepowerups-learning.com/
ðððððððððð
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.
Estuvo muy buena la explicaciÃģn! Subscriptoððž
por fin una explicaciÃģn sencilla, concreta. ÂĄÂĄÂĄÂĄGracias!!!!ð
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
Este patrÃģn me ha encantado. SÃ, es realmente Útil. ÂĄGracias!
Yo creo que es de los que mÃĄs utilizo ð
Muy bueno, Dani, muchas gracias.
Un placer! ð
Buen video, interesante patron. Por cierto, al final instanciaste el DrunkPowerUp pero con el id de Attack.
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
Suele pasar con los patrones, algunos los aplicamos por intuiciÃģn ð
Buenas, estoy pensando en preparar un Trabajo final Integrador sobre Unity para la universidad y tus videos me estan ayudando mucho.
Me alegro mucho de que te estÃĐn ayudando, Ezequiel ð.
ÂŋSobre quÃĐ es el trabajo?
@@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.
ÂĄMe parece genial! Mucha falta nos hace aplicar buenas prÃĄcticas y no reinventar la rueda ð
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
ÂĄ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.
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.
puedo aplicar este patron para instanciar personajes ?
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
ÂĄHola! Zenject da para una serie entera, sà que me gustarÃa hacer algo pero de momento no se cuando serÃĄ.
@@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 :)
Brutal ððð
ÂĄGracias!
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?
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
@@ThepowerupsLearning muchas gracias! Lo verÃĐ!! Genio!
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?
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
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.
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
@@ThepowerupsLearning De acuerdo, gracias.
buen video, una consulta que IDE usas?
Utilizo Jetbrains Rider, el mejor editor para Unity y Unreal ð
@@ThepowerupsLearning gracias genio
Increible, sin palabras ð
ÂĄGracias!
Muy buenos videos, muy interesantes
Como se llama ese IDE?
Gracias! Utilizo Jetbrains Rider, para mà el mejor IDE para trabajar con Unity y Unreal ð
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.
ÂĄ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!
@@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)
Esa es la charla! Muchas gracias por compartirla! ð
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 .
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
Duda: Âŋel naming convention que utilizas de dÃģnde sale?
Es el de C# pero puede que yo utilice alguna variante como _ para las privadas
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.
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.
@@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.
Una duda, por que haces todo privado? que ventajas tiene?
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)
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!
ÂĄ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!
@@ThepowerupsLearning Te has explicado genial, muchas gracias! Voy a ponerme a aplicar todo para ir asimilÃĄndolo :P
Muy bueno el vÃdeo, ÂŋPero quÃĐ necesidad de decir todo en inglÃĐs?