框架上传
This commit is contained in:
@@ -0,0 +1,204 @@
|
||||
// /****************************************************
|
||||
// 文件:ScriptableObjectCreator.cs
|
||||
// 作者:张铮
|
||||
// 邮箱:834207172@qq.com
|
||||
// 日期:2022/3/7 18:24:58
|
||||
// 功能:
|
||||
// *****************************************************/
|
||||
//
|
||||
// using System;
|
||||
// using System.Collections.Generic;
|
||||
// using System.IO;
|
||||
// using System.Linq;
|
||||
// using EditorFramework;
|
||||
// using Sirenix.OdinInspector.Editor;
|
||||
// using Sirenix.Utilities;
|
||||
// using Sirenix.Utilities.Editor;
|
||||
// using UnityEditor;
|
||||
// using UnityEngine;
|
||||
// using WVDFramework;
|
||||
//
|
||||
// public class ScriptableObjectCreator : OdinMenuEditorWindow
|
||||
// {
|
||||
// [MenuItem("Utility/ScriptObject/创建",false,2)]
|
||||
// //[MenuItem("Assets/Create Scriptable Object", priority = -1000)]
|
||||
// private static void ShowDialog()
|
||||
// {
|
||||
// var path = "Assets";
|
||||
// var obj = Selection.activeObject; //当前鼠标选中的 Object
|
||||
// if (obj && AssetDatabase.Contains(obj))
|
||||
// {
|
||||
// path = AssetDatabase.GetAssetPath(obj);
|
||||
// if (!Directory.Exists(path)) //主要用来判断所选的是文件还是文件夹
|
||||
// {
|
||||
// path = Path.GetDirectoryName(path); //如果是文件则获取对应文件夹的全名称
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// //设置窗口对应属性
|
||||
// var window = CreateInstance<ScriptableObjectCreator>();
|
||||
// window.position = GUIHelper.GetEditorWindowRect().AlignCenter(800, 500); //设置窗口的宽和高
|
||||
// window.titleContent = new GUIContent(path);
|
||||
// window.targetFolder = path.Trim('/'); //避免出现 / 造成路径不对
|
||||
// window.ShowUtility();
|
||||
// }
|
||||
//
|
||||
// /// <summary>
|
||||
// /// 获取继承 ScriptableObject 且不是Editor相关的所有自定义类(也就是自己编写的类)
|
||||
// /// </summary>
|
||||
// private static HashSet<Type> scriptableObjectTypes = AssemblyUtilities.GetTypes(AssemblyTypeFlags.CustomTypes)
|
||||
// .Where(t =>
|
||||
// t.IsClass &&
|
||||
// typeof(ScriptableObject).IsAssignableFrom(t) &&
|
||||
// !typeof(EditorWindow).IsAssignableFrom(t) &&
|
||||
// !typeof(Editor).IsAssignableFrom(t) && t.GetCustomAttribute<ScriptableObjectEditorAttribute>() != null)
|
||||
// .ToHashSet();
|
||||
// /// <summary>
|
||||
// /// 选中的 ScriptableObject(等待创建)
|
||||
// /// </summary>
|
||||
// private ScriptableObject previewObject;
|
||||
//
|
||||
// /// <summary>
|
||||
// /// 创建 ScriptableObject 时文件存储的目标文件夹
|
||||
// /// </summary>
|
||||
// private string targetFolder;
|
||||
//
|
||||
// private Vector2 scroll;
|
||||
//
|
||||
// private Type SelectedType
|
||||
// {
|
||||
// get
|
||||
// {
|
||||
// var m = MenuTree.Selection.LastOrDefault(); //因为可以多选,所以返回选中的是一个列表,这里返回的是列表的最后一个Object
|
||||
// return m == null ? null : m.Value as Type;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// protected override OdinMenuTree BuildMenuTree()
|
||||
// {
|
||||
// mFolderField = new FolderField();
|
||||
// OdinMenuTree tree = new OdinMenuTree(false); //不支持多选
|
||||
// MenuWidth = 300; //菜单的宽度
|
||||
// WindowPadding = Vector4.zero;
|
||||
// tree.Config.DrawSearchToolbar = true; //开启搜索状态
|
||||
// tree.DefaultMenuStyle = OdinMenuStyle.TreeViewStyle; //菜单设置成树形模式
|
||||
// //筛选所有非抽象的类 并获取对应的路径
|
||||
// tree.AddRange(scriptableObjectTypes.Where(x => !x.IsAbstract), GetMenuPathForType).AddThumbnailIcons();
|
||||
// tree.SortMenuItemsByName();
|
||||
// tree.Selection.SelectionConfirmed += x =>
|
||||
// {
|
||||
// Debug.Log($"双击确认并创建:{x}");
|
||||
// this.CreateAsset();
|
||||
// };
|
||||
// tree.Selection.SelectionChanged += e =>
|
||||
// {
|
||||
// //每当选择发生更改时发生进行回调2次,一次SelectionCleared 一次是ItemAdded
|
||||
// if (this.previewObject && !AssetDatabase.Contains(this.previewObject))
|
||||
// {
|
||||
// DestroyImmediate(previewObject);
|
||||
// }
|
||||
//
|
||||
// if (e != SelectionChangedType.ItemAdded)
|
||||
// {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// var t = SelectedType;
|
||||
// if (t != null && !t.IsAbstract)
|
||||
// {
|
||||
// previewObject = CreateInstance(t) as ScriptableObject;
|
||||
// }
|
||||
// };
|
||||
// return tree;
|
||||
// }
|
||||
//
|
||||
// private string GetMenuPathForType(Type t)
|
||||
// {
|
||||
// if (t != null && scriptableObjectTypes.Contains(t))
|
||||
// {
|
||||
// var name = t.Name.Split('`').First()
|
||||
// .SplitPascalCase(); //主要是为了去除泛型相关 例如:Sirenix.Utilities.GlobalConfig`1[Sirenix.Serialization.GlobalSerializationConfig]
|
||||
// return GetMenuPathForType(t.BaseType) + "/" + name;
|
||||
// }
|
||||
//
|
||||
// return "";
|
||||
// }
|
||||
//
|
||||
// protected override IEnumerable<object> GetTargets()
|
||||
// {
|
||||
// yield return previewObject;
|
||||
// }
|
||||
//
|
||||
// private FolderField mFolderField;
|
||||
//
|
||||
// // private void OnEnable()
|
||||
// // {
|
||||
// // mFolderField = new FolderField();
|
||||
// // }
|
||||
//
|
||||
// private string filename = default;
|
||||
//
|
||||
// protected override void DrawEditor(int index)
|
||||
// {
|
||||
// //scroll 内容滑动条的XY坐标
|
||||
// scroll = GUILayout.BeginScrollView(scroll);
|
||||
// {
|
||||
// base.DrawEditor(index);
|
||||
// }
|
||||
// GUILayout.EndScrollView();
|
||||
//
|
||||
// if (this.previewObject)
|
||||
// {
|
||||
// GUILayout.FlexibleSpace(); //插入一个空隙
|
||||
// SirenixEditorGUI.HorizontalLineSeparator(5); //插入一个水平分割线
|
||||
// GUILayout.BeginHorizontal();
|
||||
// {
|
||||
// GUILayout.Label("选择要创建到的路径");
|
||||
// var rect = EditorGUILayout.GetControlRect(GUILayoutOptions.Height(20));
|
||||
// mFolderField.OnGUI(rect);
|
||||
// }
|
||||
// GUILayout.EndHorizontal();
|
||||
// SirenixEditorGUI.HorizontalLineSeparator(5); //插入一个水平分割线
|
||||
// GUILayout.BeginHorizontal();
|
||||
// {
|
||||
// GUILayout.Label("请输入要创建的文件名字");
|
||||
// filename = GUILayout.TextField(filename);
|
||||
// GUILayout.Label(".asset", GUILayout.MaxWidth(40));
|
||||
// }
|
||||
// GUILayout.EndHorizontal();
|
||||
//
|
||||
// SirenixEditorGUI.HorizontalLineSeparator(5); //插入一个水平分割线
|
||||
// if (GUILayout.Button("Create Asset", GUILayoutOptions.Height(30)))
|
||||
// {
|
||||
// if (mFolderField.Path == "Assets")
|
||||
// {
|
||||
// if (EditorUtility.DisplayDialog("创建", ".asset文件创建在Assets目录下,是否确定创建", "是", "否")) //显示对话框
|
||||
// {
|
||||
// CreateAsset();
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// CreateAsset();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void CreateAsset()
|
||||
// {
|
||||
// if (previewObject)
|
||||
// {
|
||||
// if (filename == default)
|
||||
// filename = MenuTree.Selection.First().Name.Replace(" ","");
|
||||
// var dest = mFolderField.Path + filename + ".asset";
|
||||
// dest = AssetDatabase.GenerateUniqueAssetPath(dest); //创建唯一路径 重名后缀 +1
|
||||
// Debug.Log($"要创建的为{previewObject}");
|
||||
// AssetDatabase.CreateAsset(previewObject, dest);
|
||||
// AssetDatabase.SaveAssets();
|
||||
// AssetDatabase.Refresh();
|
||||
// Selection.activeObject = previewObject;
|
||||
// EditorApplication.delayCall += Close; //如不需要创建后自动关闭可将本行注释
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
Reference in New Issue
Block a user