Exemple #1
0
        /// <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();
        }
Exemple #2
0
        /// <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);
        }