Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: ecko en Diciembre 13, 2016, 12:06:28 PM

Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 13, 2016, 12:06:28 PM
Buenas, estoy creando una ventana que muestra el equipamiento de mi jugador la cual muestra una copia de mi personaje con los objetos equipados en dicho personaje, pero tengo una gran duda a la hora de realizarlo, resulta que creo una UI para los botones necesarios (hasta aquí todo bien) pero luego quiero insertar el objeto 3d de mi personaje dentro de la UI pero no hay manera de insertarlo a no ser que cree dicho objeto en la escena y lo coloque manualmente en la posición donde se encuentra la UI (siendo independientes la UI con el objeto 3d) quería saber si hay manera de insertar objetos 3d desde la UI o si la manera correcta es como lo estoy haciendo (UI + objeto 3D independientes), aquí dejo una imagen de mi ejemplo, gracias.
 (//<fileStore.core_Attachment>/monthly_2016_12/perfil.png.099118225513ba9f3b03d1e3d5d2e8fd.png)
Título: Creando UI con objeto 3D
Publicado por: Caesar en Diciembre 13, 2016, 01:05:55 PM
Lo que planteas no es posible hasta donde pude entender, pero para lo que quieres hacer "Camera Render" es la pista que te doy, básicamente es poner frente a una cámara los objetos 3D (dicha cámara no es la principal ni se renderiza en la escena), pero lo que capta esta cámara se pasa a un elemento que es tratado como imagen y puedes usarlo en los componentes del UI como tal, esto se utiliza para hacer espejos, minimapas, televisores, etc en fin lo que tu imaginación pueda idear, solo busca un poco del tema o si necesitas mas ayuda vuelve a comentar 
Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 13, 2016, 01:41:29 PM
Gracias por la info, tengo que hacerlo de forma independiente ya que si mi personaje realiza una animación esta animación no debe reflejarse en la ventana UI del perfil d emi personaje.
 
He pensado lo siguiente, creo un duplicado del mesh de mi personaje y lo coloco en la escena pero en un lugar no visible por el usuario y a este mesh le coloco una cámara secundaria y que se muestre dicha cámara dentro de la UI del perfil de mi personaje (para el perfil de mi personaje creo que así no habría problemas).

Para mostrar el perfil de un oponente creo una copia del mesh de dicho oponente en la escena en un lugar no visible también y esta a su vez que cree también los objetos que tenga equipados y le asocio otra cámara y esta que se muestre en a UI del perfil del oponente, pero si este oponente se desequipa un objeto debo de actualizar dicho cambio en el perfil de oponente y ahí es donde creo que puedo tener problemas, alguna solución? puedo hacer una copia del mesh del oponente dentro del método update () para que se esté refrescando continuamente o gastaría mucho recurso?
Título: Creando UI con objeto 3D
Publicado por: musaranya en Diciembre 13, 2016, 01:52:03 PM
Mi UI está hecha toda a base de objetos 3D, lo que hago es tener una cámara sólo para renderizar la UI (filtrar por Layer y decirle que sólo muestre objetos de esta layer). Luego a esa cámara le pongo como hijos los objetos que forman parte de la UI (los pongo en la Layer correspondiente) y ya está. Si son Quads para mostrar texto hay que ponerlos bastante pegados a la cámara, si son objetos pues a la distancia que quieras
Título: Creando UI con objeto 3D
Publicado por: lightbug en Diciembre 13, 2016, 01:54:34 PM
Hola, si tu personaje es unico lo que podes hacer es crear una escena a parte con su camara (incluso podes poner mas de una), encargada de representar la UI con las cosas 3D que tenga. Te aseguras de ordenar correscamente la Depth de cada una, por ej el orden que yo haria seria:
 
Escena 1:
 
- Gameplay--> main camera (primera)
 
Escena 2:
 
- UI solamente botones, scrollview, etc ---> camara UI (segunda)
 
- 3D de UI (tercera)
 
 
 
Acordate que si usas multiples camaras tenes que poner "dont clear" para que la que sigue en orden no borre lo de la primera. Te conviene tener ordenado por capas cada cosa , ya tenes una por default que se llama UI, podes agregar otra para el 3D, "3D UI".
 
Entonces para la primer camara seleccionas que utilice todas las capas menos las que ocupan la segunda y la tercera. Lo mismo con las otras excluyendose entre si.
 
Y si tenes que usar modelos independientes, por eso usas otra escena por motivos de orden mas que nada.
 
Otra cosita esto se usa para multiples escenas, si probas solamente la escena 2 por si sola tenes que limpiar el fondo de la segunda camara si no es un desastre jaja
Título: Creando UI con objeto 3D
Publicado por: Caesar en Diciembre 13, 2016, 09:16:02 PM
Cita de: ecko date=1481632889Gracias por la info, tengo que hacerlo de forma independiente ya que si mi personaje realiza una animación esta animación no debe reflejarse en la ventana UI del perfil d emi personaje.
   
   
      He pensado lo siguiente, creo un duplicado del mesh de mi personaje y lo coloco en la escena pero en un lugar no visible por el usuario y a este mesh le coloco una cámara secundaria y que se muestre dicha cámara dentro de la UI del perfil de mi personaje (para el perfil de mi personaje creo que así no habría problemas).

      Para mostrar el perfil de un oponente creo una copia del mesh de dicho oponente en la escena en un lugar no visible también y esta a su vez que cree también los objetos que tenga equipados y le asocio otra cámara y esta que se muestre en a UI del perfil del oponente, pero si este oponente se desequipa un objeto debo de actualizar dicho cambio en el perfil de oponente y ahí es donde creo que puedo tener problemas, alguna solución? puedo hacer una copia del mesh del oponente dentro del método update () para que se esté refrescando continuamente o gastaría mucho recurso?
   


Como dices "si este oponente se desequipa un objeto" obviamente estamos hablando de un juego tipo Multiplayer (MMO), el tema esta que en estos juegos en tiempo real uno puede ver estos cambios en los personajes, es decir; tu estando al lado de otro personaje cuando este se desequipa algo, tu notas que se ha sacado la ropa o cambia esta, y esto se debe a la estructura del servidor y como actualiza los datos en tiempo real, entonces hacer que esto también se vea en tu ventana de "Inspect" ya no es tan complicado, obviamente hay un vinculo entre el personaje original, y el que has creado fuera de "Camaras", 
 
 
 
 
Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 14, 2016, 06:13:54 PM
Buenas, primero agradeceros vuestras respuestas que son de gran ayuda, a ver si puedo tenerlo un poco mas claro, he creado una segunda cámara que está enfocando a una copia de mi jugador pero como hago para mostrar la reproducción de esta cámara en la UI?
Título: Creando UI con objeto 3D
Publicado por: lightbug en Diciembre 14, 2016, 06:29:25 PM
Seguro te referis a un RenderTarget, no se si es especificamente lo que necesitas ya que podrias renderizar la UI encima del modelo 3D pero si queres tener mas control necesitas crear una Render Texture, asignarle la camara que muestra a tu objeto UI 3D y asignar dicha Render Texture a un objeto de la escena. Fijate aca:
 
https://docs.unity3d.com/Manual/class-RenderTexture.html (https://docs.unity3d.com/Manual/class-RenderTexture.html)
Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 14, 2016, 07:17:35 PM
Buenas lightbug, si lo hice como comentas pero el problema lo tengo que no puedo asociar el Render Texture dentro de un Canvas..., sólo me deja usarlo en GUI Texture pero claro el GUI Texture no em deja usarlo en la UI :S no sé que hacer :(
Título: Creando UI con objeto 3D
Publicado por: Caesar en Diciembre 14, 2016, 07:39:20 PM
Tienes que usar la UI imagenRaw algo asi era no recuerdo fijate y pasas la voz
Título: Creando UI con objeto 3D
Publicado por: lightbug en Diciembre 14, 2016, 07:40:37 PM
No lo coloques en un objeto de la UI (ya que no se puede), proba colocalo en un plano o una caja, que pertenesca a la capa de la UI.
Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 14, 2016, 07:42:03 PM
mil gracias señores, use rawimagen y funciona perfecto!
Título: Creando UI con objeto 3D
Publicado por: lightbug en Diciembre 14, 2016, 07:42:05 PM
Cita de: Caesar date=1481740760Tienes que usar la UI imagenRaw algo asi era no recuerdo fijate y pasas la voz
   


Tenes razon mira aca lo hace asi:
 
http://answers.unity3d.com/questions/844742/render-texture-in-ui.html (http://answers.unity3d.com/questions/844742/render-texture-in-ui.html)
Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 15, 2016, 04:01:04 PM
Una última duda, resulta que los objetos 3D son pisados por la UI, es decir que se quedan por debajo de los componentes UI, como puedo hacer que un objeto 3D quede por encima de la UI?, gracias!
Título: Creando UI con objeto 3D
Publicado por: lightbug en Diciembre 15, 2016, 04:21:20 PM
Cita de: ecko date=1481814064Una última duda, resulta que los objetos 3D son pisados por la UI, es decir que se quedan por debajo de los componentes UI, como puedo hacer que un objeto 3D quede por encima de la UI?, gracias!
   


Por eso te decia del orden de renderizado de las camaras, fijate que en el canvas lo que este mas abajo tiene prioridad pone el rendertarger (ImageRaw) mas abajo.
 
MIra lo hice medio asi nomas pero es la idea:
 

 
Fiajte que tengo tres camaras, cada una tiene:
 
* Main Camera:
 
- es la principal tag = maincamera
 
- culling mask = Todo - UI - GUI3D
 
- depth = -1 (el default, mas grande tiene prioridad)
 
* UI Camera:
 
- culling mask = Solo UI
 
- depth = 0
 
* GUI 3D:
 
- culling mask = solo GUI3D
 
- depth = -14 (cosa que cualquier camara la pise por las dudas, aunque tiene un target texture)
 
- Target Texture = render texture que cree (lo que ve la camara va a parar a esta textura)
 
- LA render texture se coloca en UI (lo renderiza la "UI camera"), acordate de poner abajo en el orden esta textura para que queda por encima de cualquier UI (si es lo que deseas)
 
 
 
Saludos
 
 
Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 15, 2016, 04:53:01 PM
Gracias por la info, pero tengo un problemilla, resulta que la UI la tengo creado en la misma cámara que tengo el objeto 3D que quiero que quede por encima de dicha UI, no hay manera de hacerlo con la misma cámara?
Título: Creando UI con objeto 3D
Publicado por: lightbug en Diciembre 15, 2016, 05:09:04 PM
Cita de: ecko date=1481817181Gracias por la info, pero tengo un problemilla, resulta que la UI la tengo creado en la misma cámara que tengo el objeto 3D que quiero que quede por encima de dicha UI, no hay manera de hacerlo con la misma cámara?
   


Es bastante feo asi porque la camara esa se tiene que dedicar a enfocar el objeto 3d ya que tiene un target texture y tenes que diferenciarlos bien. Dependiendo de como queres que se represente ese objeto 3d podes o no necesitar en Render Texture, como te puse en otro post mas arriba. Si queres mayor control, ya sea para encuadrar el objeto GUI3D en un lugar determinado ,etc si necesitas el rendertexture.
 
Por que no creas otra camara dedicada al UI?
Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 15, 2016, 05:22:51 PM
Te comento un poco, tengo un inventario 3D ya creado (Un baul 3d) y este al pinchar y arrastrar se mueve donde tenga la posición del ratón, entonces necesito que siempre quede por encima de la UI, la cual dicha UI esta compuesta por botones y el Objeto 3D (Duplicado de mi personaje),  hice un render texture con el objeto 3d de mi personaje con una nueva cámara y esta nueva cámara la asocié a la UI que la veo desde la cámara principal, que tengo que hacer, crearme otra cámara para mi inventario y que esta siempre quede por encima de la cámara principal?
 
 
 
Si creo otra cámara para la UI y le doy una capa inferior al main cámara se verá todo lo del main cámara por encima de la nueva cámara dedicada a la UI? porque si es así no me valdría ya que el terreno, personaje y demás deben de quedar por debajo, sólo debe quedar por encima el objeto Inventario que esta visto desde la cámara principal.
Título: Creando UI con objeto 3D
Publicado por: lightbug en Diciembre 15, 2016, 05:46:44 PM



   
      hice un render texture con el objeto 3d de mi personaje con una nueva cámara y esta nueva cámara la asocié a la UI que la veo desde la cámara principal,
   

[/quote]
 
La camara que enfoca al objeto 3D solo tiene que generar el RenderTexture y nada mas, ponela en una capa aparte para hacer culling luego (es decir que las demas camaras la filtren) no la asocies a nada. Los modelos de los objetos 3D que representas estan en esta capa, ya que no queres que ni la camara de la UI y la camara principal los enfoquen. Por eso te decia de usar distintas escenas para mantener el orden.
 
Cada camara funciona asi, primero limpia la pantalla (con el clear) luego renderiza lo que le pones en la culling mask,mediante la depth se determina el orden en que sucede lo anterior. Es engañoso a lo primero pero una vez que lo manejas podes hacer muchisimas cosas.
 
Tu canvas de la UI tiene que tener asociada la camara UI que tengas (Screen Space - Camera), y tiene que estar en la capa UI (creo que Unity lo pone por default).
 
En definitiva lo que tenes que hacer es jugar con depth para indicar el orden. Podes tener escenas completas en 3D encima de la UI si lo desearas.
 
 
Título: Creando UI con objeto 3D
Publicado por: Caesar en Diciembre 15, 2016, 06:20:17 PM
Vamos mas despacio que casi no entiendo que rollo es ahora, primero para mencionar lo anterior; tienes una "Main Camera" con el elemento depth con el valor mas alto, esta cámara es la que va renderizar el contenido de las UI en un Canvas (ej: ventanas "bag", "character", "Inspect", etc). Hay otra cámara con un depth cuyo valor es menor al anterior por lo tanto no se ve en la ventana "Game" del Unity, y en esta muestras un objeto 3d copia de tu personaje y cuyo rendertexture se lo has puesto en una rawimage UI para que esto solo se vea en tu ventana "character",  (este objeto 3d no se ve sino mediante una imagen podemos ver a ese objeto como si fuera una "trasnmicion" pero esto es ya una imagen).
 
Tu debes de administrar las diferentes Objetos dentro del Canvas para que estos se vean como las ventanas que quieres lograr en tu proyecto.
 
No entiendo porque dices que tienes q crearte otra cámara para tu inventario, si tu nunca creaste una cámara para la ventana donde muestras el objeto 3D, creaste la cámara para el objeto mas no para la UI que muestra la imagen del objeto; entonces no vas a crear "otra cámara" para tu ventana inventario porque no creaste ninguna cámara para ninguna UI, lo que tienes que crear son mas UI dentro de tu Canvas.
Título: Creando UI con objeto 3D
Publicado por: ecko en Diciembre 19, 2016, 06:23:19 PM
Gracias por vuestras respuestas, he logrado aprender bastante el manejo de las cámaras gracias a vosotros y he logrado solucionar el problema, gracias de corazón :)