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(); }
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; } }
protected static void ReturnToPreviousScene() { if (_data == null) { return; } PrefabSandbox.ClearAllGameObjectsInSandbox(); PrefabSandbox.SaveScene(); EditorApplication.OpenScene(_data.PreviousScene); _data = null; }
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); }
private static void ClearPrefabData() { data_ = null; EditorPrefs.DeleteKey("PrefabSandbox._data"); }