基于Tortoise SVN的Unity的编辑器拓展
本次主要的内容如下
- MenuItem的应用
- Selection.assetGUIDs的使用
- 完整代码
MenuItem的应用
using System;
namespace UnityEditor
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public sealed class MenuItem : Attribute
{
public string menuItem;
public int priority;
public bool validate;
public MenuItem(string itemName);
public MenuItem(string itemName, bool isValidateFunction);
public MenuItem(string itemName, bool isValidateFunction, int priority);
}
}
可知MenuItem最多有三个参数:
- 参数一表示MenuItem所处的路径
- 参数二表示是否有验证方法
- 参数三表示MenuItem在整个Menu中所处的优先级
PS: MenuItem的具体使用网上有很多,在这里就不一一说明
Selection.assetGUIDs的使用
Returns the guids of the selected assets. —— [ Unity Manual ]
如介绍所指,这个API会返回当前编辑器里所选的资源的GUID数组,为什么用这个API而不用Selection.objects,因为Selection.objects里面并不包含文件夹的信息,如果是要对所选文件夹进行操作的话,需要调用Selection.assetGUIDs。
完整代码
using UnityEngine;
using UnityEditor;
public class SVN {
[MenuItem("Assets/Svn Commit")]
static void SvnCommit()
{
string path = "Assets";
string[] strs = Selection.assetGUIDs;
if (strs != null)
{
path = "\"";
for (int i = 0; i < strs.Length; i++)
{
if (i != 0)
path += "*";
path += AssetDatabase.GUIDToAssetPath(strs[i]);
if (AssetDatabase.GUIDToAssetPath(strs[i]) != "Assets")
path += "*" + AssetDatabase.GUIDToAssetPath(strs[i]) + ".meta";
}
path += "\"";
}
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "TortoiseProc.exe";
process.StartInfo.Arguments = "/command:commit /path:" + path;
process.Start();
}
[MenuItem("Assets/Svn Update")]
static void SvnUpdate()
{
string path = "Assets";
string[] strs = Selection.assetGUIDs;
if (strs != null)
{
path = "\"";
for (int i = 0; i < strs.Length; i++)
{
if (i != 0)
path += "*";
path += AssetDatabase.GUIDToAssetPath(strs[i]);
if (AssetDatabase.GUIDToAssetPath(strs[i]) != "Assets")
path += "*" + AssetDatabase.GUIDToAssetPath(strs[i]) + ".meta";
}
path += "\"";
}
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo.FileName = "TortoiseProc.exe";
process.StartInfo.Arguments = "/command:update /path:" + path;
process.Start();
}
}