找回密码
 立即注册
查看: 562|回复: 1

unity 脚本小工具

[复制链接]
发表于 2021-12-12 16:00 | 显示全部楼层 |阅读模式
2021.12.10   又是沉迷编辑器工具的一天
小工具 A
起因:
项目比较大了以后,编辑器就很卡。此时不小心拖拽了一个文件夹,而且还松手了,瞬间移动到了另一个目录下。顿时想死的心都有了,好在高版本提供了对文件夹移动的undo回滚。but,but,but,一但移动的是脚本文件,那可就惨咯。直接编译,如果报错还好。不用卡很久。要是编译通过。可以打开网站冲浪了。
最近发现一个类 UnityEditor.AssetModificationProcessor ,只用到其中一个函数。
OnWillMoveAsset Unity 即将在磁盘上移动资源时会调用此方法。
大致功能为,移动 cs脚本时,目标路径不一致,弹出提示。
public class CustomAssetModificationProcessor : UnityEditor.AssetModificationProcessor
{
    private static AssetMoveResult OnWillMoveAsset(string sourcePath, string destinationPath)
    {
        AssetMoveResult assetMoveResult = AssetMoveResult.DidNotMove;

        bool isTip = false;
        if (AssetDatabase.IsValidFolder(sourcePath))
        {
            isTip = AssetDatabase.FindAssets("t:Script", new string[] { sourcePath }).Length != 0;
        }
        else
        {
            if (sourcePath.EndsWith(".cs"))
            {
                //只是改了文件名
                if (Directory.GetParent(sourcePath).FullName != Directory.GetParent(destinationPath).FullName)
                {
                    isTip = true;
                }
            }
        }

        if (isTip)
        {
            if (EditorUtility.DisplayDialog("Move Scirpts Tip", $"Source path exist Scripts. Do you want move?\n\nSource path: {sourcePath}\nDestination path: {destinationPath}", "Yes Move", "No"
                , DialogOptOutDecisionType.ForThisSession, "Move Scirpts Tip") == false)
            {
                assetMoveResult = AssetMoveResult.FailedMove;
            }
        }

        return assetMoveResult;
    }
}
小工具 B
强迫症,属实受不了默认创建的Mono脚本末尾有个换行。写个工具,替换引擎安装路径下的 .cs.txt 模板文件,
也提供还原功能,破坏和拆解我全都要。
[MenuItem("ToolKit/Other/RemoveScriptTemplatesEndWrap")]
public static void RemoveScriptTemplatesEndWrap()
{
    if (Application.platform == RuntimePlatform.WindowsEditor)
    {
        string path = Directory.GetParent(Process.GetCurrentProcess().MainModule.FileName).FullName + @"\Data\Resources\ScriptTemplates";
        var files = Directory.GetFiles(path, "*.txt");

        var sourceBackupPath = path + "/SourceBackup";

        var crlf = "\n";
        foreach (var file in files)
        {
            var content = File.ReadAllText(file);
            if (content.EndsWith(crlf))
            {
                if (Directory.Exists(sourceBackupPath) == false)
                {
                    UnityEngine.Debug.Log("创建源备份文件夹");
                    Directory.CreateDirectory(sourceBackupPath);
                }

                File.Move(file, sourceBackupPath + "/" + Path.GetFileName(file));
                content = content.Remove(content.Length - 4, 4);
                File.WriteAllText(file, content);

                UnityEngine.Debug.Log("已移除脚本模板末尾的换行符,路径:" + file);
            }
        }
    }
}

[MenuItem("ToolKit/Other/ReductionRemoveScriptTemplatesEndWrap")]
public static void ReductionRemoveScriptTemplatesEndWrap()
{
    if (Application.platform == RuntimePlatform.WindowsEditor)
    {
        string path = Directory.GetParent(Process.GetCurrentProcess().MainModule.FileName).FullName + @"\Data\Resources\ScriptTemplates";
        var sourceBackupPath = path + "/SourceBackup";

        if (Directory.Exists(sourceBackupPath))
        {
            var files = Directory.GetFiles(sourceBackupPath, "*.txt");

            foreach (var file in files)
            {
                var lastPath = path + "/" + Path.GetFileName(file);
                File.Delete(lastPath);
                File.Move(file, lastPath);
                UnityEngine.Debug.Log("已还原脚本模板末尾的换行符,路径:" + file);
            }

            if (Directory.GetFiles(sourceBackupPath).Length == 0)
            {
                Directory.Delete(sourceBackupPath);
                UnityEngine.Debug.Log("删除源备份文件夹");
            }
        }
    }
}
发表于 2021-12-12 16:09 | 显示全部楼层
谢谢分享
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-23 01:40 , Processed in 0.064081 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表