首先,在Project窗口创建名为"Editer"的文件夹,用于存放unity扩展编辑器的代码。
Project视图右键弹出的菜单,就是点击Assets菜单栏弹出的菜单。
简单创建一个菜单
代码:
using UnityEditor;
using UnityEngine;
public class Project : MonoBehaviour
{
[UnityEditor.MenuItem("Assets/Test1")]
static void Test1()
{
Debug.Log(" test project test1 ");
}
}
效果:
按钮-删除文件(夹)
代码:
using UnityEditor;
using UnityEngine;
public class Project : MonoBehaviour
{
[InitializeOnLoadMethod]//初始化
static void InitializeOnLoad()
{
EditorApplication.projectWindowItemOnGUI += (guid, rect) =>
{
//GUI.Button(new Rect(100, 100, 100, 100), "Test1");
if (Selection.activeObject != null)
{
//资源有GUID,全局唯一标识。
string active_guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(Selection.activeObject));
if (active_guid == guid && !string.IsNullOrEmpty(active_guid))
{
rect.x = rect.width - 100;
rect.width = 100;
if (GUI.Button(rect, "delete"))//如果点击按钮
{
//删除资源,不会放到回收站
AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(Selection.activeObject));
//Debug.Log(" 删除文件: " + AssetDatabase.GetAssetPath(Selection.activeObject));
}
}
}
};
}
}
效果:
注:点击delete按钮,会删除当前选中的文件(夹)
创建资源 时执行的事件
public static void OnWillCreateAsset(string path)
{
Debug.LogFormat("创建资源:{0}",path);
}
保存资源 时执行的事件
public static string[] OnWillSaveAssets(string[] paths)
{
for (int i = 0; i < paths.Length; i++)
{
Debug.LogFormat("保存资源:{0}", paths[i]);
}
return paths;
}
移动资源 时执行的事件
public static AssetMoveResult OnWillMoveAsset(string oldPath,string newPath)
{
Debug.LogFormat("移动资源:从{0}移动到{1}", oldPath, newPath);
return AssetMoveResult.DidNotMove;
}
删除资源 时执行的事件
public static AssetDeleteResult OnWillDeleteAsset(string path,RemoveAssetOptions options)
{
Debug.LogFormat("删除资源 : {0} Option : {1}", path, options);
return AssetDeleteResult.DidNotDelete;//可以删除
}
资源发生改变 时执行的事件
//InitializeOnLoad是Unity引擎提供的一种特性,可以在编辑器启动时或脚本重新编译后自动执行指定的操作。
[InitializeOnLoadMethod]
static void InitOnLoad()
{
EditorApplication.projectChanged += () => {
Debug.Log(" Asset Change! ");
};
}
EditorApplication.projectChanged 是一个事件,当项目中的资源发生变化时会触发此事件。
+= 操作符用于添加事件处理程序。在这个例子中,当项目资源发生变化时,会执行括号内的匿名函数。
匿名函数内部调用了 Debug.Log(“Asset Change!”);,这将输出一条包含“Asset Change!”字符串的日志信息到Unity编辑器的控制台。