【Unity编辑器】拓展Project视图

这篇具有很好参考价值的文章主要介绍了【Unity编辑器】拓展Project视图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、拓展右键菜单

2、创建一个菜单

3、拓展布局

4、监听事件


首先创建一个Editor文件夹,此文件夹可以作为多个目录的子文件夹存在,这样开发者就可以按照功能来划分,将不同功能的编辑代码放在不同的Editor目录下。

【Unity编辑器】拓展Project视图

如果属于编辑模式下的代码,需要放在Editor文件夹下;如果属于运行代码,放在非Editor的文件夹即可

1、拓展右键菜单

在Editor文件夹下创建一个代码

using UnityEngine;
using UnityEditor;

public class Script_03_01 : MonoBehaviour
{
    [MenuItem("Assets/My Tools/Tools 1" , false , 2)]	//自定义菜单的参数需要在MenuItem方法中写入显示的菜单路径。如果菜单条比较多,可以在第三个参数处输入表示排序的整数,数值越小,它的排序越靠前
    static void MyTools1()
    {    
        Debug.Log(Selection.activeObject.name);    //打印选中的游戏对象
    }

    [MenuItem("Assets/My Tools/Tools 2" , false , 1)]
    static void MyTools2()
    {
        Debug.Log(Selection.activeObject.name);
    }
}

【Unity编辑器】拓展Project视图

 【Unity编辑器】拓展Project视图

2、创建一个菜单

在Editor下创建一个编辑代码

using UnityEngine;
using UnityEditor;

public class Script拓展Project : MonoBehaviour
{
    [MenuItem("Assets/Create/My Create/Cube" , false , 2)]
    static void CreateCube()
    {
        GameObject.CreatePrimitive(PrimitiveType.Cube);	//创建方形
    }

    [MenuItem("Assets/Create/My Create/Sphere" , false ,1)]
    static void CreateSphere()
    {
        GameObject.CreatePrimitive(PrimitiveType.Sphere);	//创建球形
    }
}

【Unity编辑器】拓展Project视图

 

拓展菜单的关键就是找到正确的菜单路径,通过“/”符号将它们拼合而成GameObject.CreatePrimitive()方法用于创建Unity的基础模型体

3、拓展布局

添加一个click按钮,点击后程序会自动在Console窗口中打印选中的资源名

using UnityEditor;
using UnityEngine;

public class S_拓展布局 : MonoBehaviour
{
    [InitializeOnLoadMethod]
    static void InitializeOnLoadMethod()
    {
        EditorApplication.projectWindowItemOnGUI = delegate (string guid, Rect selectionRect)	//(project窗口中每个可见列表项的OnGUI事件的委托)
        {
            //在project视图中选择一个资源
            if (Selection.activeObject && guid == AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(Selection.activeObject)))
            {
                //设置拓展按钮区域
                float width = 10f;
                selectionRect.x += (selectionRect.width - width);
                selectionRect.y += 2f;
                selectionRect.width = width;
                GUI.color = Color.red;

                //点击事件
                if (GUI.Button(selectionRect, "click"))
                {
                    Debug.LogFormat("click : {0}", Selection.activeObject.name);
                }

                GUI.color = Color.white;
            }
        };
    }
}

点击后的效果 

【Unity编辑器】拓展Project视图

在方法前面添加[InitializeOnLoadMethod]表示此方法会在C#代码每次编译完后首先调用。

监听EditorApplication.projectWindowItemOnGUI委托,即可使用GUI方法来绘制自定义的UI元素

4、监听事件

Project资源比较多,如果不好好规划,资源就会很凌乱。这时就要借助程序来管理资源,可以通过监听资源的创建、删除、移动和保存等事件来实现。

例如:将某个文件移动到错误的目录下,此时就可以监听资源移动事件,程序判断资源的原始位置以及将要移动的位置是否合法,从而决定是否能阻止本次移动

首先需要继承UnityEditor.AssetModificationProcessor,接着重写监听资源创建、删除、保存和移动的方法文章来源地址https://www.toymoban.com/news/detail-433785.html

using UnityEditor;
using UnityEngine;

public class S_监听事件 : UnityEditor.AssetModificationProcessor
{
    [InitializeOnLoadMethod]
    static void InitializeOnLoadMethod()
    {
        //全局监听Project视图下的资源是否发送变化(添加、删除和移动)
        EditorApplication.projectWindowChanged = delegate ()
        {
            Debug.Log("change");
        };
    }

    //监听“双击鼠标左键,打开资源”事件
    public static bool IsOpenForEdit(string assetPath , out string message)
    {
        message = null;
        Debug.LogFormat("assetPath : {0}", assetPath);
        //true表示该资源可以打开,false表示不允许在Unity中打开该资源
        return true;
    }

    
    //监听“资源即将被创建”事件
    public static void OnWillCreateAsset(string path)
    {
        Debug.LogFormat("path:{0}" , path);
    }

    //监听“资源即将被保存”事件
    public static string[] OnWillSaveAssets(string[] paths)
    {
        if(paths != null)
        {
            Debug.LogFormat("path:{0}" , string .Join(",", paths));
        }
        return paths;
    }

    //监听“资源即将被移动”事件
    public static AssetMoveResult OnWillMoveAsset(string oldpath , string newPath)
    {
        Debug.LogFormat("from:{0} to: {1}" , oldpath, newPath);
        //AssetMoveResult.DidMove表示该资源可以移动
        return AssetMoveResult.DidMove;
    }

    //监听“资源即将被删除”事件
    public static AssetDeleteResult OnWillDeleteAsset(string assetpath, RemoveAssetOptions options)
    {
        Debug.LogFormat("delete:{0}", assetpath);
        //AssetDeleteResult.DidDelete表示该资源可以被删除
        return AssetDeleteResult.DidDelete;
    }
}

到了这里,关于【Unity编辑器】拓展Project视图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity编辑器扩展-第二集-按钮排序/分组/放入右键菜单

    第一集链接:Unity编辑器扩展-第一集-在菜单栏加入自己的按钮_菌菌巧乐兹的博客-CSDN博客 一、本节目标+效果展示 1.按钮排序 变成 2.按钮分组 仔细看,有个灰色的杠杠 3.放入右键菜单 4.皮一下  二、按钮排序具体流程 第一集讲,如果想放入标签主要的代码是  但是这行代码

    2024年02月14日
    浏览(49)
  • Unity编辑器拓展——Editor模式下屏幕坐标转换为世界坐标

    发会牢骚,最近一直在做Unity的编辑器拓展,其中难的地方不少,但不至于到看不懂的地步,可一做到关于坐标转换的内容时把我弄不会了。 这个不查不知道,一查吓一跳,Unity的坐标系非常多,有世界坐标,屏幕坐标,局部坐标,视窗坐标等等,而且每一个都是不一样的坐

    2024年02月03日
    浏览(47)
  • Unity3d C#利用Editor编辑器拓展实现配置UI背景样式一键设置UI背景样式功能(含源码)

    在开发UI滚动列表的时候,经常会有每项的背景图不统一的情况,会间隔重复的情况居多。这种情况下,手动去设置间隔一行的背景图或者颜色是比较麻烦的。在此背景下,笔者尝试写个小工具,在搭建UI时配置一下循环背景的样式,可以通过一键点击后设置UI背景的样式,省

    2024年02月03日
    浏览(50)
  • UE5.1编辑器拓展【三、脚本化资产行为,删除无引用资产】

    目录  需要考虑的问题 重定向的修复函数 代码: 删除无引用资产 代码 需要添加的头文件和模块 在我们删除资产的时候,会发现,有些资产在删除的时候会出现有被什么什么引用,还有的是没有被引用。 而我们如果直接选择一片去进行删除的话,那么会导致看到很多有引用

    2024年02月07日
    浏览(56)
  • UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,高效复制多个同样的资产】

    目录 ​​​​​​​ 插件制作 添加新的类:AssetActionUtility 添加新的模块:EditorScriptingUtilities 路径了解 添加debug的头文件 代码【debug.h】内涵注释: 写函数 .h文件 .cpp文件 首先第一步是做一个插件: 因为是用于编辑器的,所以在模块中我们需要进行更改: 将类型改为 Edit

    2024年02月07日
    浏览(45)
  • 在线json格式化编辑器--在线查看json解析视图并按节点排序,查看,编辑,并可导入导出json

    在线JSON编辑器--视图查看器节点筛选节点编辑插入json导入导出

    2024年04月22日
    浏览(42)
  • 【Unity编辑器扩展】 | 编辑器扩展入门基础

    前言 当谈到游戏开发工具,Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境,使他们能够创建令人惊叹的游戏和交互式体验。 然而,Unity编辑器本身也是可以扩展和定制的,这为开发者提供了进一步提升工作流程和增强功能的机会。 在Unity 编辑器

    2024年02月10日
    浏览(80)
  • Unity编辑器扩展 | 编辑器扩展基础入门

    前言 当谈到游戏开发工具,Unity编辑器是一个备受赞誉的平台。它为开发者提供了一个强大且灵活的环境,使他们能够创建令人惊叹的游戏和交互式体验。 然而,Unity编辑器本身也是可以扩展和定制的,这为开发者提供了进一步提升工作流程和增强功能的机会。 在Unity 编辑器

    2024年02月10日
    浏览(71)
  • Unity 可视化节点编辑器(GraphView、编辑器扩展)

      前几天把导师的项目打包发布交了一稿,这半个星期除了再把项目缝缝补补外(说实话项目做到后边实在有些无聊,都是些琐碎的东西而且自己也学不到什么,纯粹是 浪费 消磨时间)无聊逛Unity商店发现了个有意思的东西,说实话一开始我以为只是单纯绘制的2D动画:

    2024年02月12日
    浏览(59)
  • UE5.1编辑器拓展【二、脚本化资产行为,快速更改资产名字,1.直接添加前缀或后缀2.通过资产类判断添加修改前缀】

    目录 了解相关的函数 第一种做法:自定义添加选择资产的前缀或后缀 代码 效果 第二种做法:通过映射来获取资产类型添加前缀和修改前缀 映射代码 代码 效果 在之前一章中,我们创建了插件,用来扩展编辑器的使用: UE5.1编辑器拓展【一、脚本化资产行为,通知,弹窗,

    2024年02月07日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包