Exemplo n.º 1
0
        private static void ReloadPrefabData()
        {
            string serialized = EditorPrefs.GetString("PrefabSandbox._data");

            if (serialized.IsNullOrEmpty())
            {
                return;
            }

            var deserializedData = JsonUtility.FromJson <PrefabSandboxData>(serialized);

            if (deserializedData.prefabAsset == null)
            {
                return;
            }

            var prefabInstance = GameObject.Find(deserializedData.prefabAsset.name);

            if (prefabInstance == null)
            {
                return;
            }

            sandboxScene_        = EditorSceneManager.GetActiveScene();
            data_                = deserializedData;
            data_.prefabInstance = prefabInstance;

            ReloadValidator();
        }
Exemplo n.º 2
0
		public static bool OpenPrefab(GameObject prefab, PrefabSandboxSetupCompleteCallback callback) {
			string assetPath = AssetDatabase.GetAssetPath(prefab);
			string guid = AssetDatabase.AssetPathToGUID(assetPath);

			bool alreadyEditing = (_data != null && _data.PrefabGuid == guid);
			_setupCompletionCallback = callback;

			if (prefab != null && assetPath != null && PathUtil.IsPrefab(assetPath) && !alreadyEditing) {
				_data = new PrefabSandboxData();
				_data.PrefabGuid = guid;
				_data.PrefabPath = assetPath;
				_data.PrefabAsset = prefab;

				PrefabSandbox.SetupSandbox();
				return true;
			} else {
				if (_setupCompletionCallback != null) {
					_setupCompletionCallback(success: false);
				}
				return false;
			}
		}
Exemplo n.º 3
0
		protected static void ReturnToPreviousScene() {
			if (_data == null) {
				return;
			}

			PrefabSandbox.ClearAllGameObjectsInSandbox();
			PrefabSandbox.SaveScene();

			EditorApplication.OpenScene(_data.PreviousScene);
			_data = null;
		}
Exemplo n.º 4
0
        public static bool OpenPrefab(GameObject prefab)
        {
            if (prefab == null)
            {
                Debug.LogError("Can't OpenPrefab in Prefab Sandbox: Prefab argument is null!");
                return(false);
            }

            string assetPath = AssetDatabase.GetAssetPath(prefab);

            if (assetPath.IsNullOrEmpty())
            {
                Debug.LogError("Can't OpenPrefab in Prefab Sandbox: Failed to get AssetPath!");
                return(false);
            }

            if (!PathUtil.IsPrefab(assetPath))
            {
                Debug.LogError("Can't OpenPrefab in Prefab Sandbox: AssetPath is not a prefab!");
                return(false);
            }

            string guid = AssetDatabase.AssetPathToGUID(assetPath);

            // NOTE (darren): before checking if already editing
            // check if we're not in the sandbox scene (if so, cleanup)
            if (EditorSceneManager.GetActiveScene() != sandboxScene_)
            {
                Cleanup();
            }

            bool alreadyEditing = (data_ != null && data_.prefabGuid == guid);

            if (alreadyEditing)
            {
                Debug.LogError("Can't OpenPrefab in Prefab Sandbox: already editing a prefab!");
                return(false);
            }

            Scene  oldScene     = EditorSceneManager.GetActiveScene();
            string oldScenePath = oldScene.path;

            if (oldScene == sandboxScene_)
            {
                oldScenePath = data_.oldScenePath;
            }
            else
            {
                if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
                {
                    return(false);
                }
            }

            data_              = new PrefabSandboxData();
            data_.prefabGuid   = guid;
            data_.prefabPath   = assetPath;
            data_.prefabAsset  = prefab;
            data_.oldScenePath = oldScenePath;

            SavePrefabData();
            SetupSandbox();
            return(true);
        }
Exemplo n.º 5
0
 private static void ClearPrefabData()
 {
     data_ = null;
     EditorPrefs.DeleteKey("PrefabSandbox._data");
 }