-集成到Unity Editor)
仍然是为了节省在不同编辑器之间切换带来的耗时和降低对思维流延续性的负面影响。所以在Unity编辑器内Project资源管理面板的右键菜单中集成了三种操作命令更新提交和查看日志。可以针对文件夹也可以针对单子个文件进行操作。当提交或者更新或者查看指定文件或者文件夹的日志时都需要先在Project面板中选中该指定的对象。具体实现步骤创建一个继承自Editor的类命名为比如:SvnHelper.cs将该类置于一个命名为Editor的文件夹目录下为SvnHelper编写具体的实现逻辑逻辑实现代码using System.Diagnostics; using System.IO; using UnityEditor; using UnityEngine; public class SvnHelper : Editor { [MenuItem (Assets/SVN 提交 Assets目录, false, 0)] private static void Commit_Assets () { RunCmd (TortoiseProc.exe, string.Format (/command:commit /path:\{0}\\{1}\ /closeonend:0, System.Environment.CurrentDirectory, Assets)); } [MenuItem (Assets/SVN 更新 Assets目录, false, 0)] private static void Update_Assets () { RunCmd (TortoiseProc.exe, string.Format (/command:update /path:\{0}\\{1}\ /closeonend:0, System.Environment.CurrentDirectory, Assets)); } [MenuItem (Assets/SVN 提交 选中的 File|Folder, false, 2)] private static bool Commit_FileOrFolder () { if (Selection.activeObject null) return false; else { RunCmd (TortoiseProc.exe, string.Format (/command:commit /path:\{0}\\{1}\ /closeonend:0, System.Environment.CurrentDirectory, AssetDatabase.GetAssetPath (Selection.activeObject))); return true; } } [MenuItem (Assets/SVN 更新 选中的 File|Folder, false, 2)] private static bool Update_FileOrFolder () { if (Selection.activeObject null) return false; else { RunCmd (TortoiseProc.exe, string.Format (/command:update /path:\{0}\\{1}\ /closeonend:0, System.Environment.CurrentDirectory, AssetDatabase.GetAssetPath (Selection.activeObject))); return true; } } [MenuItem (Assets/SVN 提交 Root, false, 4)] private static void Commit_Root () { RunCmd (TortoiseProc.exe, string.Format (/command:commit /path:\{0}\ /closeonend:0, System.Environment.CurrentDirectory)); } [MenuItem (Assets/SVN 更新 Root, false, 4)] private static void Update_Root () { RunCmd (TortoiseProc.exe, string.Format (/command:update /path:\{0}\ /closeonend:0, System.Environment.CurrentDirectory)); } static string SVN_BASE Application.dataPath.Replace (/, \\).Remove (Application.dataPath.Replace (/, \\).Length - 6, 6); [MenuItem (Assets/SVN Logs, false, 5)] public static void Logs () { RunCmd (TortoiseProc.exe, /command:log /path:\ SVN_BASE \); } [MenuItem (Assets/SVN LogFile, false, 5)] public static void LogFile () { RunCmd (TortoiseProc.exe, /command:log /path:\ System.Environment.CurrentDirectory \\ AssetDatabase.GetAssetPath (Selection.activeObject) \ /closeonend:0); } /// summary /// 运行外部程序 /// /summary /// param namecmdExe指定应用程序的完整路径如果该程序在系统环境变量中只需要填写对用的程序名称就可以/param /// param namecmdStr执行命令行参数/param private static bool RunCmd (string cmdExe, string cmdStr) { bool result false; try { using (Process myPro new Process ()) { //指定启动进程是调用的应用程序和命令行参数 ProcessStartInfo psi new ProcessStartInfo (cmdExe, cmdStr); myPro.StartInfo psi; myPro.Start (); // 是否加上这句话看个人需求。如果加上的话我们必须关掉弹出的SVN窗口才能继续操作。如果不加上则可以弹出SVN也可以继续修改unity项目。个人建议加上比较好 myPro.WaitForExit (); result true; } } catch { Debug.LogError (SvnHelper 执行外部程序出错); } return result; } }