/// <summary> /// 删除Asset /// </summary> /// <param name="groupAsset"></param> public static void DeleteGroupAsset(MapGroupAsset groupAsset) { //先卸载所有已经存在场上的Group? //可能会有多余场景残留? //姑且先解绑prefab foreach (MapGroup group in MapSystem.groupList) { if (group != null && group.groupName == groupAsset.groupName) { PrefabUtility.DisconnectPrefabInstance(group.gameObject); group.dirty = true; //转移,删除场景 if (group.transform.parent == null) { Scene toDelete = group.gameObject.scene; group.transform.SetParent(MapSystem.mapSystemComponent.transform); EditorSceneManager.CloseScene(toDelete, true); } } } //取消注册 MapGroupAssets.Remove(groupAsset); //删除文件夹 AssetDatabase.DeleteAsset(AssetPath + groupAsset.groupName + ".asset"); //AssetDatabase.DeleteAsset(AssetPath + groupAsset.groupName); AssetDatabase.MoveAssetToTrash(AssetPath + groupAsset.groupName); EditorUtility.SetDirty(EditorMatrix.Prefs); AssetDatabase.SaveAssets(); }
/// <summary> /// 创建Asset,请调用前确保没有重名Asset /// </summary> public static void CreateGroupAsset(MapGroup group) { string groupName = group.groupName; string path = AssetPath + groupName + "/" + groupName; int index = group.index; //创建Asset MapGroupAsset asset = ScriptableObject.CreateInstance <MapGroupAsset>(); asset.groupName = groupName; AssetDatabase.CreateFolder("Assets/Scenes/GroupAssets", groupName); //初始化 group.transform.position = Vector3.zero; group.index = -1; group.transform.rotation = Quaternion.identity; bool isRootOfScene = group.transform.parent == null; group.transform.SetParent(null); //绑定Prefab asset.groupPrefab = PrefabUtility.CreatePrefab(path + ".prefab", group.gameObject, ReplacePrefabOptions.ConnectToPrefab); //创建场景 Scene activeScene = EditorSceneManager.GetActiveScene(); Scene scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive); EditorSceneManager.SetActiveScene(activeScene); Scene oldScene = group.gameObject.scene; EditorSceneManager.MoveGameObjectToScene(group.gameObject, scene); if (isRootOfScene) { EditorSceneManager.CloseScene(oldScene, true); } //保存场景 //这里path的命名不是很懂,scene居然不能直接改名? { EditorSceneManager.SaveScene(scene, path + "0.unity"); group.transform.rotation = Quaternion.Euler(0, -MapSystem.AnglePerGroup, 0); PrefabUtility.RecordPrefabInstancePropertyModifications(group.transform); EditorSceneManager.SaveScene(scene, path + "1.unity"); group.transform.rotation = Quaternion.Euler(0, -MapSystem.AnglePerGroup * 2, 0); PrefabUtility.RecordPrefabInstancePropertyModifications(group.transform); EditorSceneManager.SaveScene(scene, path + "2.unity"); } //重新载入 EditorSceneManager.CloseScene(scene, true); LoadGroupDirect(asset, index); //保存 AssetDatabase.CreateAsset(asset, AssetPath + groupName + ".asset"); MapGroupAssets.Add(asset); EditorUtility.SetDirty(EditorMatrix.Prefs); }