• unity编辑器学习,创建自己的窗口


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

    为了简化操作,我还是坚持写了一个插件,然后感觉做个自己的小窗口也不错,就写了个小小的编辑器插件。

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

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

    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="";
    }
  • 相关阅读:
    20级训练赛Round #5
    【Java】equals 和 == 的区别
    [apue] linux 文件访问权限那些事儿
    用 shell 脚本制造连接频繁中断的场景
    用 shell 脚本做 tcp 协议模拟
    c++ 11 是如何简化你的数据库访问接口的
    使用 shell 脚本自动对比两个安装目录并生成差异补丁包
    Minecraft类游戏地形生成机制
    Aery的UE4 C++游戏开发之旅(5)字符&字符串
    基于随机定位的地图信息获取方式
  • 原文地址:https://www.cnblogs.com/jqg-aliang/p/4885429.html
Copyright © 2020-2023  润新知