Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Creando UI con objeto 3D

Iniciado por ecko, Diciembre 13, 2016, 12:06:28 PM

Tema anterior - Siguiente tema
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.

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 

Diciembre 13, 2016, 01:41:29 PM #2 Ultima modificación: Diciembre 13, 2016, 01:43:31 PM por ecko
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?

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

Diciembre 13, 2016, 01:54:34 PM #4 Ultima modificación: Diciembre 13, 2016, 01:59:21 PM por lightbug
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

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", 
 
 
 
 

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?

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

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 :(

Tienes que usar la UI imagenRaw algo asi era no recuerdo fijate y pasas la voz

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.

mil gracias señores, use rawimagen y funciona perfecto!

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

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!

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
 
 

Etiquetas: