在用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
{
}
}