Esempio n. 1
0
        /// <summary>
        /// Load a scene from JSON into the active scene
        /// </summary>
        /// <param name="json">JSON representation of this scene</param>
        /// <param name="assetPack">The AssetPack to be used for asset references</param>
        /// <param name="onAfterDeserialize">An action which will be invoked after deserialization before root objects are activated</param>
        /// <returns>The SerializationMetadata used to import this scene</returns>
        public static SerializationMetadata ImportScene(string json, AssetPack assetPack = null,
                                                        Action <List <GameObject> > onAfterDeserialize = null)
        {
            var metadata           = new SerializationMetadata(assetPack);
            var container          = new SceneContainer(SceneManager.GetActiveScene(), metadata, false);
            var sceneRoot          = new GameObject();
            var sceneRootTransform = sceneRoot.transform;

            container.SceneRootTransform = sceneRootTransform;

            // Set root inactive so that we can activate everything at once
            sceneRoot.SetActive(false);
            try
            {
                SerializationUtils.DeserializeScene(json, metadata, ref container);
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                container = null;
            }

            if (container != null)
            {
                k_Roots.Clear();
                foreach (Transform child in sceneRootTransform)
                {
                    k_Roots.Add(child.gameObject);
                }

                metadata.SetupSceneObjectMetadata(k_Roots);
                metadata.DoPostSerializationActions();

                onAfterDeserialize?.Invoke(k_Roots);

                foreach (var root in k_Roots)
                {
                    // Moving this root object out of its parent will activate all newly created GameObjects
                    root.transform.SetParent(null, false);
                }
            }

            UnityObjectUtils.Destroy(sceneRoot);
            return(metadata);
        }
Esempio n. 2
0
        /// <summary>
        /// Serialize a scene to Json
        /// Scene must be loaded and valid
        /// </summary>
        /// <param name="scene">The scene to serialize</param>
        /// <param name="assetPack">The asset pack used to store and retrieve assets</param>
        /// <returns>The serialized scene as a Json string</returns>
        public static string SerializeScene(Scene scene, AssetPack assetPack = null)
        {
            var metadata = new SerializationMetadata(assetPack);

            return(ToJson(new SceneContainer(scene, metadata), metadata));
        }
Esempio n. 3
0
 /// <summary>
 /// Create a new SerializationMetadata object for use in scene object serialization or deserialization
 /// </summary>
 /// <param name="assetPack">The AssetPack to use for asset references</param>
 public SerializationMetadata(AssetPack assetPack = null)
 {
     CurrentSerializationMetadata = this;
     m_AssetPack = assetPack;
 }