首页 >Unity3D频道 >【Unity3D拓展编辑器】 > Unity3D研究院编辑器之打开unity不可识别的文件(十三)
2015
10-28

Unity3D研究院编辑器之打开unity不可识别的文件(十三)

有些特殊后缀名的文件在unity里是不可识别的。如下图所示,这里我把文本的后缀改成了*.xx 这样unity就不认识了。那么双击就没反应了,我想做的就是在双击此类文件的时候指定一个应用程序打开它。

QQ20151028221136
代码中我指定了用sublime来打开后缀是.xx的文件。

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;

public class MyAssetHandler
{

    [OnOpenAssetAttribute(1)]
    public static bool step1(int instanceID, int line)
    {
       //string name = EditorUtility.InstanceIDToObject(instanceID).name;
       // Debug.Log("Open Asset step: 1 (" + name + ")");
        return false; // we did not handle the open
    }

    // step2 has an attribute with index 2, so will be called after step1
    [OnOpenAssetAttribute(2)]
    public static bool step2(int instanceID, int line)
    {

        string path = AssetDatabase.GetAssetPath(EditorUtility.InstanceIDToObject(instanceID));
        string name = Application.dataPath + "/" + path.Replace("Assets/", "");


        if (name.EndsWith(".xx"))
        {
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.FileName = "D:/Program Files/Sublime Text 3/sublime_text.exe";
            startInfo.Arguments = name;
            process.StartInfo = startInfo;
            process.Start();
            return true;
        }
       // Debug.Log("Open Asset step: 2 (" + name + ")");
        return false; // we did not handle the open
    }
}

这样就OK啦。我在双击的时候sublime就打开啦。

QQ20151028221513

 

如果想直接定位在某一行,比如lua文件的某一行。 Windows下可以直接设置VS打开,但是MAC下没有, 不过可以传入文件路径 和文件的 行数直接定位。

	static bool OpenFileAtLineExternal(string fileName, int line)
	{
		#if UNITY_EDITOR_OSX 
		string sublimePath = @"/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl";
		if(File.Exists(sublimePath)){
			System.Diagnostics.Process proc = new System.Diagnostics.Process();
			proc.StartInfo.FileName =sublimePath;
			proc.StartInfo.Arguments = string.Format("{0}:{1}:0",fileName,line);
			proc.Start();
			return true;
		}else{
			return InternalEditorUtility.OpenFileAtLineExternal(fileName, line);
		}
		#else
		return InternalEditorUtility.OpenFileAtLineExternal(fileName, line);
		#endif
	}

 

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院编辑器之打开unity不可识别的文件(十三)》有 9 条评论

  1. 冀成尧说:

    momo大,在您回复刘剑寒时提到空的step1是在双击前被调用,step2是在双击后被调用,似乎不太对……从https://docs.unity3d.com/ScriptReference/Callbacks.OnOpenAssetAttribute.html 这篇5.5的文档来看,这个[OnOpenAssetAttribute()]()里的参数似乎只是说明了他的执行顺序。

  2. 刘剑寒说:

    似乎在另外一个地方建立了一个同名文件

  3. 刘剑寒说:

    打开的文件都变成空的了

  4. 刘剑寒说:

    为什么要有个空的Step1

  5. c6u2说:

    [鼓掌]这个太好用了,有在MAC下测试过没[挤眼]

留下一个回复

你的email不会被公开。 必填项已用 * 标注。