Unity编辑器拓展--Project拓展

Unity编辑器拓展--Project拓展

前言

我们都知道在Unity的工程中,Project里放的都是我们项目的资源。当我们鼠标点击右键的时候会弹出一个菜单:
在这里插入图片描述
如果我们想对这些内容进行拓展里拓展应该怎么拓展呢?
这里我做了一些总结。

Project视图

我们新建一个脚本用来控制Project的拓展:
在这里插入图片描述
在这里插入图片描述
其实我们细心的点发现这个Project的视图其实和我们顶部的Assets菜单栏弹出的内容是一致的,所以我们对Project内容的拓展就是对Assets菜单栏进行拓展。结合前面第一节我们知道只需要将根目录改一下就可以了。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class TestProject : MonoBehaviour
{
    [MenuItem("Assets/Test1")]
    static void Test1() 
    {
    }
}

在这里插入图片描述
这里具体我们不多做介绍,可以看第一节
我们如果需要点击时出现自定义的button时也可以实现:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class TestProject : MonoBehaviour
{
    [MenuItem("Assets/Test1")]
    static void Test1() 
    {
        //EditorApplication.projectWindowItemOnGUI是打开选项时就会调用
        EditorApplication.projectWindowItemOnGUI += (guid, rect) =>
        {
            ///捕获列表参数说明
            ///1.文件的唯一标识码 2.
            ///用GUI绘制一个按钮
            GUI.Button(new Rect(100, 100, 100, 100),"Test1");
        };
    }
    //下面是加载的时候就会调用,两者根据需求来做
    [InitializeOnLoadMethod]
    static void InitializeOnload() 
    {
        EditorApplication.projectWindowItemOnGUI += (guid, rect) =>
        {
            ///捕获列表参数说明
            ///1.文件的唯一标识码 2.
            ///用GUI绘制一个按钮
            GUI.Button(new Rect(100, 100, 100, 100), "Test1");
        };
    }
}

效果如下:
在这里插入图片描述
如果我们想点击脚本后出现一个删除按钮,然后删除相应的预制体:
在这里插入图片描述
那么这么一个功能应该怎么做呢?具体如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class TestProject : MonoBehaviour
{
    [MenuItem("Assets/Test1")]
    static void Test1()
    {
        
    }
    //下面是加载的时候就会调用,两者根据需求来做
    [InitializeOnLoadMethod]
    static void InitializeOnload()
    {
        EditorApplication.projectWindowItemOnGUI += (guid, rect) =>
        {

            if(Selection.activeObject != null) 
            {
                //获取当前选择的对象guid
                string m_guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(Selection.activeObject));
                if (m_guid == guid) 
                {
                    rect.x = rect.width - 100;
                    rect.width = 100;
                    if (GUI.Button(rect, "Test1")) 
                    {
                        //删除
                        AssetDatabase.DeleteAsset(AssetDatabase.GetAssetPath(Selection.activeObject));
                        Debug.Log("删除当前对象" + AssetDatabase.GetAssetPath(Selection.activeObject));
                    }

                }
            }
            /捕获列表参数说明
            /1.文件的唯一标识码 2.
            /用GUI绘制一个按钮
            //GUI.Button(new Rect(100, 100, 100, 100), "Test1");
        };
    }
}

在这里插入图片描述

在这里插入图片描述

Project事件监听

新建一个脚本TestProjectEvent来控制事件的监听
在这里插入图片描述
这里我们不再继承Unity中的MonoBehaviour类,而是改为继承UnityEditor.AssetModificationProcessor这样子的一个类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestProjectEvent : UnityEditor.AssetModificationProcessor
{
}
  1. 监听文件创建
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestProjectEvent : UnityEditor.AssetModificationProcessor
{
    //创建资源之前调用的
    public static void OnWillCreateAsset(string path) 
    {
        //path是我们将要创建资源的一个路径
        Debug.LogFormat("创建资源{0}",path);
    }
}

我们来拖动一张图片来试一下效果:
在这里插入图片描述
2. 监听文件保存

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestProjectEvent : UnityEditor.AssetModificationProcessor
{
   [InitializeOnLoadMethod]
   static void InitOnLoad()
   {
       //资源发生改变调用
       EditorApplication.projectChanged += () =>
       {
           Debug.Log("资源发生了改变");
       };
   }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT学徒.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值