Jump to content
lmml

Subscene DOTS iniciar vía código en Editor Mode

Recommended Posts

Buenas, escribo este post porque tengo un problema bastante especifico. Estoy realizando una serie de módulos para unity, los cuales corren algunas de sus funciones en el editor, ademas quiero que parte de los cálculos de estos sean realizados usando DOTS.

La cuestión es que necesito transformar una serie(lista) de gameobjects a entidades en el editor mode y NO EN RUNTIME, para ello me he hecho eco de la figura de la subscene que es una utilidad bastante nueva (https://github.com/starikcetin/Learning-Unity-ECS-2/tree/master/01 - Converting GameObjects to Entities/Assets/01.D - Sub Scene).

Ahora bien manualmente viene bastante bien explicado pero a la hora de hacerlo A TRAVÉS DE CÓDIGO es otro mundo.

He estado realizando pruebas y este es un ejemplo de codigo que he conseguido alcanzar, actualmente me peta unity cuando se realiza la instruccion de cerrar escena. Creo que es algun tipo de condicion de carrera pero no estoy muy al tanto del funcionamiento del scenemanager, si podeis echarme un cable, gracias

 

	Scene aux = EditorSceneManager.GetActiveScene();
        Debug.Log(AssetDatabase.GetAssetPath(Subscene));
        Scene aux2 = EditorSceneManager.OpenScene(AssetDatabase.GetAssetPath(Subscene),OpenSceneMode.Additive);
       
        EditorSceneManager.SaveScene(aux2);
        

        Debug.Log(aux2.name);
        EditorSceneManager.SetActiveScene(aux2);

        // GameObject a = new GameObject("SubsceneGameObject");
        // Undo.RegisterCreatedObjectUndo(a, "Created SubsceneGameObject");

        EditorSceneManager.SaveScene(aux2);
        SceneManager.SetActiveScene(aux);
        

        subsceneGameObject.GetComponent<SubScene>().SceneAsset = Subscene;

         //if (aux2 != null)
         //EditorSceneManager.CloseScene(aux2, true);

El codigo de arriba se realiza en OnValidate()

Ademas se cuenta con estas variables en la clase 

 [SerializeField]
    SceneAsset Subscene;

    [SerializeField]
    List<GameObject> gameObjects;

    [SerializeField]
    GameObject subsceneGameObject;

Recuerdo que esto simplemente es una prueba de concepto y que no tiene que ver con código con buena sintaxis 

Share this post


Link to post
Share on other sites

×
×
  • Create New...