自定义Unity资源文件打开方式

在用Unity写shader的时候突然想设置notepad++为默认打开方式所以就写了一个小插件,下载
效果像这样:
这里写图片描述
这里写图片描述

思路比较简单,用MenuItem,OnOpenAssetAttribute,XML来实现。

第一步:用MenuItem创建右键菜单

在Assets下新建一个名为tool的文件夹,在其中创建一个OpenFileWay.cs脚本

public class OpenFileWay : MonoBehaviour {
    [UnityEditor.MenuItem("Assets/OpenWay")]
    static void addOpenWay() {
        print("点击了右键菜单");
    }   
}

回到unity我们在project下右键,就会发现出现了一个名叫OpenWay的菜单,点击它会输出
这里写图片描述

第二步:获得选中文件的类型

public class OpenFileWay : MonoBehaviour {
    [UnityEditor.MenuItem("Assets/OpenWay")]
    static void addOpenWay() {
        //print("点击了右键菜单");
        Object obj = Selection.activeObject;//获得选中对象
        try{
            string fpath = AssetDatabase.GetAssetPath(obj);//获得Asset文件路径
            string suffix = getSuffix(fpath);
            print("路径:"+fpath);
            print("后缀:"+suffix);
        }
        catch { }
    }

    static string getSuffix(string path)
    {
        return path.Substring(path.IndexOf("."));//从"."开始向后截取,substring(start,length)
    }
}

为了避免因为选中文件夹而不能获得后缀,用try catch获得异常,且不做任何操作。
效果:
这里写图片描述

第三步:选择打开方式

这里我们使用OpenFileDialog来选择程序,使用它需要为unity添加Plugins–>System.Windows.Forms.dll。Targets .NET 3.5 在我传的里面有。

static string  selectApplication(){
        OpenFileDialog fileDialog = new OpenFileDialog();
        string str = "";
        fileDialog.Filter = "(.exe)|*.exe";
        fileDialog.InitialDirectory = "c:\\";
        fileDialog.RestoreDirectory = true;
        fileDialog.FilterIndex = 1;
        fileDialog.CheckFileExists = true;
        fileDialog.CheckPathExists = true;
        fileDialog.ShowHelp = true;
        if (fileDialog.ShowDialog() == DialogResult.OK)
        {
            str = fileDialog.FileName;
            str = System.IO.Path.GetDirectoryName(str) +"\\"+ System.IO.Path.GetFileName(str);
        }
        return str;
    }

第四步:实现对XML的增删改查

XML存储结构

<?xml version="1.0" encoding="gb2312"?>
<filemap>
  <file type=".shader">
    <suffix>.shader</suffix>
    <path>
    </path>
  </file>
  <file type=".txt">
    <suffix>.txt</suffix>
    <path>D:\notepad++\notepad++.exe</path>
  </file>
  <file type=".xml">
    <suffix>.xml</suffix>
    <path>D:\notepad++\notepad++.exe</path>
  </file>
</filemap>

这里用suffix保存后缀,虽然可以直接取属性type中的值,我还是觉得写成对美观整齐一些。path保存应用打开路径。

增删改查的具体讲解就不说了,包里面有源码,其他问题就百度=-=

第五步:用指定应用打开资源文件

string name = UnityEngine.Application.dataPath + "/../" + filePath;//获得要打开文件完整路径
            print(name);
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();//设置启动信息
            startInfo.FileName = applicationPath;//应用的路径
            startInfo.Arguments = name;
            process.StartInfo = startInfo;
            process.Start();

恢复unity默认打开方式

恢复默认打开方式就只需要删除XML中的对应记录就可以了

[UnityEditor.MenuItem("Assets/Restore Defaults OpenWay")]//添加右键菜单
    static void deleteOpenWay(){
        //print("恢复");
        //获得后缀和路径
        Object obj = Selection.activeObject;
        try{
            string fpath = AssetDatabase.GetAssetPath(obj);//获得Asset文件路径
            string suffix = getSuffix(fpath);
            deleteFromXml(suffix);
        }
        catch
        {

        }

    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值