使用Sublime Text 写Shader
想要用VS写C#,但是不想用VS写Shader,感觉不好用。
目标: 双击xxx.shader打开Sublime Text。
首先安装SublimeText,然后设置环境变量。
首先把下面的脚本放到Assets里的任意’Editor’文件夹里。
/*
* SublimeOpen.cs
*
*/
using UnityEngine;
using UnityEditor;
using System;
public class SublimeOpen
{
//用于打开 Unity 中某个资源的回调属性(例如,双击 Project Browser 中的某个资源时会触发回调)。
//将此属性添加至某个静态方法后,系统会在 Unity 即将打开资源时调用该方法。该方法应有以下签名之一:
//static bool OnOpenAsset(int instanceID, int line)
//static bool OnOpenAsset(int instanceID, int line, int column)
//如果处理了资源打开操作,则返回 true,如果资源应该由外部工具打开,则返回 false。
//OnOpenAssetAttribute 具有提供回调中的顺序索引的选项,
//从 0 开始。如果您有多个 OnOpenAssetAttribute 回调并想以特定顺序调用它们,此选项将非常有用。系统将从零开始按顺序调用回调。
//[Unity 2020.3.8]
//Unity的示例从1开始,我尝试后仍旧会由VS打开,改由从0开始,就可以了。
[UnityEditor.Callbacks.OnOpenAsset(0)]
public static bool step1(int instanceID, int line)
{
return false;
}
[UnityEditor.Callbacks.OnOpenAsset(1)]
public static bool step2(int instanceID, int line)
{
string strFilePath = AssetDatabase.GetAssetPath(EditorUtility.InstanceIDToObject(instanceID));
string strFileName = System.IO.Directory.GetParent(Application.dataPath) + "/" + strFilePath;
if (strFileName.EndsWith(".shader"))
{
//我们通过环境变量访问Sublime Text
string strSublimeTextPath = Environment.GetEnvironmentVariable("SublimeText_Path");
if (strSublimeTextPath != null && strSublimeTextPath.Length > 0)
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = strSublimeTextPath;
startInfo.Arguments = "\"" + strFileName + "\"";
Debug.Log(startInfo.FileName + " \t " + startInfo.Arguments);
process.StartInfo = startInfo;
process.Start();
return true;
}
else
{
Debug.Log("Not Found Enviroment Variable 'SublimeText_Path'.");
return false;
}
}
return false;
}
}
下载插件: SublimeText & Unity Shader
首选项 -> 浏览插件目录
解压到这个目录下。
修改Unity内置文件引用路径:
重启SublimeText。
如果shader文件没有高亮,可以尝试关掉再打开。