Noticias

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

Prefabs en el inspector, varias escenas

Iniciado por blackverde, Agosto 24, 2016, 07:43:20 PM

Tema anterior - Siguiente tema
Hola que tal, no sabia como describir el titutulo, pero bueno vamos al tema.
 
Imaginaos mi Personaje( ahora lo llamaremos Pj para abreviar) el cual tiene un script el cual controla animacion final, controles, salto...  Creo varios atributos publicos de tipo gameObject para interactuar con ellos, los arrastro de la escena al inspector del Pj y luego en la siguiente escena aunque guarde el prefab, ese gameobject esta vacio porque ese objeto no corresponde a esa escena.
 
Esto para una escena esta muy bien, el problema esta a la hora de hacer muchas pantallas, se hace un poco engorroso asignar al Pj todos los objetos interactuables al inspector.
 
Yo y mi cabeza inquieta habia pensado estas posibles soluciones
 
1) Usar una sola escena y llamar a cada pantalla via json/xml esta solución me gusta mucho, pero no se si sera innecesaria ya que a lo mejor hago algo mal y las escenas de por si son Yaml
 
2) Crear Gameobject staticos, esta solución no me convence porque estarian presentes esos objetos en memoria durante todo el juego
 
3) asignar un script a cada objeto, esto tiene una contra, imaginaos que mi pj cuando llega a la meta hace una animacion que hago yo por pasos en mi script. Cuando llega al paso 3, la meta se anima tambien, si hiciese esto en 2 scripts tendria la animacion del prota separada en varios scripts y por lo tanto para modificar algo para otros programadores se hace un poco engorroso e incomprensible.
 
Un saludo y Gracias por todo

Agosto 24, 2016, 08:58:06 PM #1 Ultima modificación: Agosto 24, 2016, 09:03:04 PM por hammer
Pues hay muchas maneras de hacerlo, es mas un tema de como quieras organizarlo todo y del tipo de juego,por eso no te puedo recomendar nada especifico
 
1.-Yo he usado este metodo un par de veces,una escena vacia con los gameObjects basicos y luego mediante script instanciaba lo que necesitaba, es buen metodo si tienes agun editor de niveles o si los niveles se generan aleatoriamente,por ejempl, puedes asignarle al prefab que tenga el script  una lista de prefabs,en vez de gameobjects de la escena, y luego los instancias a tu gusto
 
2.-Un gameobject estatico no es un gameObject global, un gameobject static simplemente ayuda al editor a saber que esos gameobjects no se van a mover lo que ayuda a la hora de renderizar y tal,pero al cambiar de escena se borraran como cualquier otro gameobject,aunque le asignaras alguna classe global,static, serian borrados, tendrias que ponerles un DontDestroyOnLoad para que no se destruyeran al cambiar de nivel,pero como bien dices entonces seria un gasto de recursos inecesario.
 
3.- Bueno siempre puedes ir comprobando estados para saber si lanzar la animacion o si ya esta lanzada.
 
Tambien podrias utilizar FindGameObjectWithTag o FindGameObjectType cuando haya cambiado la escena para encontrar los gameobjects que necesites y asignarlos al script que lo necesite

Cuales serian esos objetos que metes en tu prefab por ej?
 
Para calmar mis demonios internos yo lo que hago es tener un solo player, un prefab, tratar de evitar toda variable publica en lo posible (me gusta tener todo codificado y prolijo asi cuando pongo el player en otro lado funciona todo igual), si lo que cargas en las variables publicas son objetos "assets" (no de escena) deberian quedar intactos cuando colocas el prefab en otra escena.

Etiquetas: