Noticias

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

Editor de escenas

Iniciado por juguefre, Febrero 27, 2018, 03:40:27 AM

Tema anterior - Siguiente tema
Hola a todos,
 
Es posible usar Unity como un editor de escenarios, configurar todo, instancias, materiales, texturas, luces, etc y una vez el escenario este terminado usar un script que exporte toda esta configuración?
 
Ejemplo: tengo todos los assets en sus correspondientes carpetas bien organizados, una vez he terminado de organizar la escena en unity exporto todos los datos a un archivo de texto y luego uso este archivo de texto en otro engine/programa para reconstruir la misma escena.
 
Para mi suena posible pero no soy programador, yo se que puedo exportar escenas completas de maya usando phyton y luego se importan a un engine y funcionan perfecto, lo que no se es si se puede hacer desde unity (pero debería poderse).
 
El punto es que estoy en fase experimental usando un entorno de desarrollo que no tiene un editor de niveles y si pudiera usar unity como editor de niveles me quitaría UNA TONELADA de trabajo de encima.


Gracias por cualquier ayuda que me puedan brindar.

Yo pienso que seria imposible no creo que a los de unity les haga gracia que se pueda hacer eso.

Por supuesto, totalmente posible, podés hacer tu propio formato incluso. La tarea principal sería Guardar y Cargar (voy a nombrar Unreal, pero debería ser igual para cualquier programa):
 
Guardar:
 


  1.    recorrer cada gameObject,


  2.    encontrar su transform y guardar los datos (dos vector3 un quaternion)


  3.    encontrar su meshRenderer -> MeshFiler -> Mesh (o datos crudos, podría ser vertices, indices, normales, uvs etc... o simplemente una referencia al asset importado en Unity, ej el FBX, por supuesto esta ultima es la más comoda y quizás la mejor, vas a necesitar importarlo en Unreal)


  4.    encontrar su material, te interesa colores y texturas, fijate como se llaman esas propiedades(botón derecho sobre el nombre del mat en el inspector--> Select Shader)


  5.    quizás sea buena idea guardar info de los colliders, casi seguro la vas a necesitar.


  6.    ...


El tema va a estar en como guardas los datos, para poder leerlos luego, por ej con un JSON (podría ser cualquier cosa) podés guardar un arreglo de gameObject en donde dentro de cada elemento tengas lo ya mencionado... o podrías inventar el ".juguefre" con la forma que se te ocurra, claro que luego debés de crear un parser para poder leer tu propio formato. Podés también encriptarlo con alguna llave o ID, meterle un header con metadata(casi todos los formatos tienen uno), y guardarlo en formato binario (no un texto), todavía para protegerlo más y más. Aunque para fines practicos te diría que vayas por el JSON o xml.
 
Cargar:
 
Si estás en Unreal tenés que leer y aplicar todo esto al mundo Unreal, (si estás en tu Editor X lo mismo para el editor X), pero el formato guardado es siempre igual, lo más general posible, quizás no te interesa guardar los datos del "soft factor" del material de la particula, ya que puede que ni siquiera lo utilices en Unreal, o puede que si, seas algo creativo y lo mapees a algo totalmente diferente, puede que en Unreal quizás sea la propiedad "ParticleContactSmooth"...que se yo. cuando digo mapear va en nombre y por supuesto en funcionalidad, si en Unity va de 0 a 1, y en unreal el efecto se da alrevés de 2 a -2 tenés que realizar la conversión apropiada.
 
Un escenario diferente puede ser que estés haciendo un conversor de "Unity A Unreal", entonces en el mismo formato imponés/mapeas lo específico de Unreal si lo quisieras, pero si querés mantenerlo generico solo considerás lo reutilizable, Transforms, Meshes y materiales son vitales.
 
pero si, totalmente posible
 
Saludos

Febrero 27, 2018, 05:56:25 AM #3 Ultima modificación: Febrero 27, 2018, 05:58:21 AM por juguefre
@lightbug muchas gracias por confirmar que si se puede, entonces inicialmente necesito lograr las cosas mas básicas:


Luces (de pronto ni las voy a usar pero es mejor dejar abierta la posibilidad)
 
Meshes (translate,rotate,scale), el truco aquí seria que el entorno de desarrollo no usa ningún tipo conocido de formatos 3D PERO si convierto los modelos 3D al formato compatible y uso EXACTAMENTE el mismo nombre solo seria cuestión de editar el archivo para que queden con la extensión de formato adecuado (incluso hasta se podría programar para que el exporter lo haga por default).
 
Materiales y texturas, no hay mucho que explicar aquí solo donde están asignados y el tipo de render.
 
COLLIDERS super importante, también usa un formato no muy común pero debería poder exportar también (translate,rotate,scale) de acuerdo a como estén en unity y por supuesto usar el mismo nombre del collider usado en unity pero con la extensión de formato correcto.
 
Esto tan sencillo me va a dar unos buenos dolores de cabeza pero cuando quede hecho voy a poder avanzar muchísimo mas rápido.
 
JAJA me falto lo mas importante INSTANCIAS, debo poder exportar cuales son instancias.
 
@brok no veo razón para que esto le cause molestia a los de unity, unity no compila para la plataforma a la que le voy a desarrollar, si se mira bien lo que hago es dar un poquito mas de compatibilidad a unity con plataformas anteriormente inaccesibles, el compilado si toca en el entorno de desarrollo por que con unity no se puede y debe ser una verdadera pesadilla lograr eso (que unity compile para una plataforma que no esta incluida).

Febrero 27, 2018, 08:15:47 AM #4 Ultima modificación: Febrero 27, 2018, 08:16:23 AM por lightbug
hey de nada! tampoco que te lo diga significa que este confirmado  , solo se que es posible pasar de A a B, de B a C  y de C a D, el problema en conjunto puede que se resuelva de algún modo más efectivo, pero es solo una idea. Quizás ya exista un asset que haga exactamente todo esto, el unico trabajo que tenés que hacer es la parte del importer.
 
Cita de: juguefre date=1519707385Esto tan sencillo me va a dar unos buenos dolores de cabeza
   


No se si será tan sencillo, osea en teoría es fácil, pero hasta tener todo a punto caramelo va a ser algo complicadito, ya te vas a dar cuenta, pero nada que no salga después de algunas cervezas encima.
 
Cita de: juguefre date=1519707385Meshes (translate,rotate,scale), el truco aquí seria que el entorno de desarrollo no usa ningún tipo conocido de formatos 3D PERO si convierto los modelos 3D al formato compatible y uso EXACTAMENTE el mismo nombre solo seria cuestión de editar el archivo para que queden con la extensión de formato adecuado (incluso hasta se podría programar para que el exporter lo haga por default).
   


no usa FBX, u obj? si fuera así en el mismo exporter le podés especificar la ruta del proyecto convertido (ej "C:\ProyectosCovertidos\Proyecto1") y que te copie todos los archivos involucrados a ese destino o a uno quizás más apropiado (ej "C:\ProyectosCovertidos\Proyecto1\Resources\3D") ... cuando cargas los datos (con el "importer" del lado del programa destino) le pasas la ruta maestra y ya sabría de todos los archivos y/o recursos involucrados. Lo mismo se me ocurre para materiales, texturas, y demás.
 
Cita de: juguefre date=1519707385COLLIDERS super importante, también usa un formato no muy común pero debería poder exportar también (translate,rotate,scale) de acuerdo a como estén en unity y por supuesto usar el mismo nombre del collider usado en unity pero con la extensión de formato correcto.
   


Lo unico que te interesa de los colliders es su forma y/o su mesh, ya que la rotacion, escala y posicion en el mundo es calculada relativa al transform, (lo mismo le pasa al meshRenderer) entonces -> Si estás usando todo en meshCollider (y no formas básicas) podés usar la misma info de la Mesh (del MeshFilter) y pasarla como la Mesh del Meshcollider, el resultado es el mismo, salvo que tengas en principio una mesh super detallada para el render y una version no detalla para el collider,  yo solía usar esto, le ponía siempre el collider del LOD3 (el menos detallado), mientras que el MeshRender respondia al LOD normalmente ).
 
Escribiendo esto me acordé, los LODs, si estás usando un LODGroup tenés que pasar todo también, referencias a las meshes, características del LOD... aunque si tu programa destino no lo soporta dejalos.
 
Si tenés triggers activados y/o colliders de formas básicas vas a tener que guardar necesariamente la info.
 
Cita de: juguefre date=1519707385JAJA me falto lo mas importante INSTANCIAS, debo poder exportar cuales son instancias.
   


instancias?

Cita de: lightbug date=1519715747instancias?


Modelos instanciados.

Ejemplo tengo 15 sillas en el escenario, no se carga sino 1 silla a la memoria y las otras 14 son copias de la que esta cargada (instancias), o no se llama instancia a un modelo instanciado?????

Cita de: juguefre date=1519716256Modelos instanciados.

      Ejemplo tengo 15 sillas en el escenario, no se carga sino 1 silla a la memoria y las otras 14 son copias de la que esta cargada (instancias), o no se llama instancia a un modelo instanciado?????
   


Ah claro si si, todo lo que maneje recursos podés simplemente verificar que no haya duplicados.

Etiquetas: