unity编辑器学习,建立本身的窗口

又是一个体力活,资源搬家的。具体的任务我就不透漏了,反正是底层的资管管理之类的东东。编辑器

为了简化操做,我仍是坚持写了一个插件,而后感受作个本身的小窗口也不错,就写了个小小的编辑器插件。spa

OK,这个小窗口完成的功能很简单,就是移动资源到某一文件夹的。好了,代码分享以下,插件

看效果的话,直接放到项目文件里面重启unity就好了。代码很简单,注释就不写了:code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEngine;
using System.IO;
public class OneKeyMove : EditorWindow
{
    public ResPath resPath;
    void Start(){
        if(resPath==null){
            resPath = new ResPath();
        }
    
    }
    [MenuItem("MyUtil/一键移动")]
    public static void Init()
    {
       
        if (Resources.FindObjectsOfTypeAll<OneKeyMove>().Length == 0)
        {
            var win = ScriptableObject.CreateInstance<OneKeyMove>();
            win.title = "一键移动";
            win.Show();
        }
    }
    public void OnGUI()
    {
        if (resPath == null)
        {
            resPath = new ResPath();
        }
        EditorGUILayout.LabelField("移动文件", EditorStyles.boldLabel);
        EditorGUILayout.Space();
        GUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("当前文件", GUILayout.Width(80));
        Rect firstRect = EditorGUILayout.GetControlRect(GUILayout.Width(200));
        resPath._FirstFile = EditorGUI.TextField(firstRect, resPath._FirstFile);
        if ((Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragExited) && firstRect.Contains(Event.current.mousePosition))
        {
            if (DragAndDrop.paths != null && DragAndDrop.paths.Length > 0)
            {
                string sfxPath = DragAndDrop.paths[0];
                if (!string.IsNullOrEmpty(sfxPath) && Event.current.type == EventType.DragUpdated)
                {
                    DragAndDrop.AcceptDrag();
                    resPath._FirstFile = sfxPath;
                }
            }
        }
        GUILayout.EndHorizontal();
        EditorGUILayout.Space();
        GUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("目标", GUILayout.Width(80));
        Rect secondRect = EditorGUILayout.GetControlRect(GUILayout.Width(200));
        resPath._SecondFile = EditorGUI.TextField(secondRect, resPath._SecondFile);
        if ((Event.current.type == EventType.DragUpdated || Event.current.type == EventType.DragExited) && secondRect.Contains(Event.current.mousePosition))
        {
            if (DragAndDrop.paths != null && DragAndDrop.paths.Length > 0)
            {
                string sfxPath = DragAndDrop.paths[0];
                if (!string.IsNullOrEmpty(sfxPath) && Event.current.type == EventType.DragUpdated)
                {
                    DragAndDrop.AcceptDrag();
                    resPath._SecondFile = sfxPath;
                }
            }
        }
        GUILayout.EndHorizontal();
        EditorGUILayout.Space();
        if (GUILayout.Button("一键移动"))
        {
            string resName = resPath._FirstFile.Remove(0, resPath._FirstFile.LastIndexOf('/') + 1);
            Debug.Log(resName);

           
            string targetPath = resPath._SecondFile + "/layout/" + resName;
            string realPath = Application.dataPath.Substring(0, Application.dataPath.LastIndexOf('/'))+"/"+resPath._SecondFile + "/layout";
            if (!Directory.Exists(realPath))
            {
                Directory.CreateDirectory(realPath);
            }
            AssetDatabase.Refresh();
            Debug.Log(targetPath);
            AssetDatabase.MoveAsset(resPath._FirstFile, targetPath);
        }
        EditorGUILayout.Space();
        
    }
    
}
[Serializable]
public class ResPath {
    public string _FirstFile="";
    public string _SecondFile="";
}
相关文章
相关标签/搜索