Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: biztor en Abril 28, 2016, 01:18:52 PM

Título: Unas dudas sobre instanciar prefabs/Intanciar clases
Publicado por: biztor en Abril 28, 2016, 01:18:52 PM
Buenas, tengo unas dudas, sobre cual es la mejor manera de proceder.Objetivo: Crear en escena un GameObject, con sus propiedades y funciones, y que otros GameObjects puedan interactuar con el, accediendo a sus propiedades etc.- Creo una Clase sin heredar de Mono, con sus propiedades, su constructor y sus funciones o métodos. En el constructor se le pasa un Gameobject, pasa usarlo en un Instantiate en una función dentro de la clase ( Void Crear() por ejemplo), para que esta clase tenga un Gameobject asociado, con su sprite y demás, para que se vea en escena.Bien, luego en tiempo de ejecución, cuando el jugador crea este objeto, el GameController de turno, creara un objeto de esta clase, pasando los constructores, se generara la instancia. La duda aquí es, Ese GameObject en escena que se ha creado, no tiene un script con las propiedades de ese objeto, sino que estan en el Gameobject que tiene el Script GameController, Con lo que otros objetos no pueden interaccionar con lo que se acaba de crear, no es asi?- La otra forma seria, hacer un prefab, crear un script para ese prefab, y cuando el jugador quiera crear ese objeto, se instancia directamente ese prefab. Con esto desarrollado, cual es la forma de proceder? para que casos es mejor crear un objeto dinamicamente? como puedo en el segundo caso, pasarle unos parámetros al prefab cuando se va a construir, para no tener que hacer varios prefab del mismo tipo, pero con distintas propiedades?Un saludo.
Título: Unas dudas sobre instanciar prefabs/Intanciar clases
Publicado por: pioj en Abril 28, 2016, 01:39:36 PM
¿Te has leído el manual? http://docs.unity3d.com/ScriptReference/GameObject.AddComponent.html (http://docs.unity3d.com/ScriptReference/GameObject.AddComponent.html)
Título: Unas dudas sobre instanciar prefabs/Intanciar clases
Publicado por: biztor en Abril 28, 2016, 02:30:57 PM
[quote author=pioj" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35760" data-ipsquote-contentcommentid="130352">¿Te has leído el manual?  Título: Unas dudas sobre instanciar prefabs/Intanciar clases
Publicado por: Arthure en Abril 28, 2016, 02:55:30 PM
Cita de: biztor date=1461842332" data-ipsquote="" data-cite="biztor" class="ipsQuoteCon esto desarrollado, cual es la forma de proceder? para que casos es mejor crear un objeto dinamicamente?
Cual de las dos maneras es mejor tendria una opinion muy subjetivo ... hay que tener en cuenta que las diferencias entre programacion orientada a objetos (mas cercano al primer caso) y programacion orientada a componentes (mas cercano al segundo caso) es tan delicada que pende de un hilo; tanto es asi, que una persona que lleve años trabajando con programacion orientada a objetos, podria trabajar perfectamente desde el primer dia con un software enfocado a la programacion orientada a componentes.Por lo tanto, depende de tu recorrido personal ... aunque yo sin duda me quedaria con la primera opcion puesto que bajo mi punto de vista tiene muchas ventajas y ningun inconveniente, por ejemplo puedes hacer una coleccion dentro del GameController de turno como dices y almacenar ahi todas las instancias de esa clase desde las que controlar todos sus aspectos aunque haya aspectos que dependan de un script y aspectos que dependan de otro script.Sin mencionar la desventaja cuando utilizas un prefab ... y es que cuando todas las instancias vinculadas a un prefab siempre sean iguales, el prefab esta genial, pero cuando sean distintas de poco te sirven porque despues de instanciar el prefab debes cambiar todo manualmente y esto aun se enreda mas cuando pueden cambiar atributos del prefab localizados en distintos scripts del mismo.
Cita de: biztor date=1461846657" data-ipsquote="" data-cite="biztor" class="ipsQuotepero no seria mejor, hacer un prefab con un script, y dentro un método para construirlo?por ejemplo un void Crear(int propiedad1, float propiedad2) y entonces en tiempo de ejecucion:- instanciar objeto x.- x.crear(propiedad1,propiedad2)
Tengo que corregir mi respuesta anterior por haberla entendido mal, si a lo que te referias era a hacer una simple funcion que cambiara una serie de atributos (variables) con una simple ejecucion, no tiene ventajas ni desventajas ... en todo caso la ventaja es que te quedara el codigo mas claro, que tambien es bueno para ti mismo a la hora de trabajar pero tampoco tendras mas beneficios que ese.
Título: Unas dudas sobre instanciar prefabs/Intanciar clases
Publicado por: biztor en Abril 28, 2016, 03:23:15 PM
[quote author=Arthure" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35760" data-ipsquote-contentcommentid="130354 date=1461848130]Cual de las dos maneras es mejor tendria una opinion muy subjetivo ... hay que tener en cuenta que las diferencias entre programacion orientada a objetos (mas cercano al primer caso) y programacion orientada a componentes (mas cercano al segundo caso) es tan delicada que pende de un hilo; tanto es asi, que una persona que lleve años trabajando con programacion orientada a objetos, podria trabajar perfectamente desde el primer dia con un software enfocado a la programacion orientada a componentes.Por lo tanto, depende de tu recorrido personal ... aunque yo sin duda me quedaria con la primera opcion puesto que bajo mi punto de vista tiene muchas ventajas y ningun inconveniente, por ejemplo puedes hacer una coleccion dentro del GameController de turno como dices y almacenar ahi todas las instancias de esa clase desde las que controlar todos sus aspectos aunque haya aspectos que dependan de un script y aspectos que dependan de otro script.Sin mencionar la desventaja cuando utilizas un prefab ... y es que cuando todas las instancias vinculadas a un prefab siempre sean iguales, el prefab esta genial, pero cuando sean distintas de poco te sirven porque despues de instanciar el prefab debes cambiar todo manualmente y esto aun se enreda mas cuando pueden cambiar atributos del prefab localizados en distintos scripts del mismo.Tengo que corregir mi respuesta anterior por haberla entendido mal, si a lo que te referias era a hacer una simple funcion que cambiara una serie de atributos (variables) con una simple ejecucion, no tiene ventajas ni desventajas ... en todo caso la ventaja es que te quedara el codigo mas claro, que tambien es bueno para ti mismo a la hora de trabajar pero tampoco tendras mas beneficios que ese.[/quote]si por ejemplo, tienes que crear unidades, que se moverán, detectaran enemigos etc. No es mejor crear un prefab?  Es que es lo que dices, veo el funcionamiento orientado a componentes, pero no se como hacerlo orientado a objetos o cual es mejor.Crear la instancia de la clase, añadirle un collider, un gameobject, instanciar este en escena para que interactúe con los demás... Y este objeto solo existiría en un script, por eso no lo veo, o se me escapa algo. Para cosas que no necesitan estar en escena y hacer cálculos, si veo útil el crear cuando haga falta el objeto. A ver si me puedes esclarecer un poco mas, muchas gracias.
Título: Unas dudas sobre instanciar prefabs/Intanciar clases
Publicado por: biztor en Abril 28, 2016, 06:32:14 PM
Vale, creo que se como solucionar esto, usando los dos modos. Por si alguien le interesa.- Se crean las clases que nos interesen.- Se crea el prefab con los elementos que necesitamos. Se le pone un script.- El script tendrá una variable donde alojara el objeto que va a ser ese prefab, y también un método para crear ese objeto, los argumentos del método serán los que se usaran en el constructor de la instancia de esa clase, - Luego la instancia de esa clase, se guarda en la variable del Script. Desde fuera, se instancia el prefab, se coje el componente del script y se llama a su metodo , aqui es donde le pasamos los parametros, y se crea. Este gameobject ya puede interaccionar con otros, ya que para acceder a sus propiedades se accederia al Script del GameObject y luego a la variable donde esta el objeto creado(la clase que creamos) y así accederíamos a sus propiedades.