unity笔记-unity扩展编辑器-Project视图

首先,在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编辑器的控制台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值