代码控制 Inspector 视图的锁定

25 篇文章 1 订阅
14 篇文章 0 订阅

当我们写编辑器自定义工具的时候,会发现一些 Unity 编辑器中已在的按钮、菜单项并没有开放访问权限,而我们的工具又需要调用这些按钮、菜单的功能。怎么办呢?下面我们就以调用 Inspector 的锁定功能为例,利用反射来实现。

文章的内容也是提供一种思路,当碰到类似情况时,自己也可以按下面流程尝试

关于 Inspector 的锁定功能点这里查看

先看下最终效果

首先我们需要下载 dll 反编译工具 dnspy,在 这篇文章 里有介绍。直接从 GitHub 上下载,解压使用免安装

准备好了之后,打开 dnSpy, 找到 UnityEditor.dll 拖进 dnSpy 窗口,为了方便查看代码,我们把反编的代码导出工程。

UnityEditor.dll 路径是 Unity 安装目录\Editor\2019.3.0f3(我用的是这个版本)\Editor\Data\Managed\下

导出后会自动生成.sln 文件

双击.sln 打开工程,因为我们要找的是小锁子位于 Inspector 视图当中,所以我们搜索一下 Inspector 来确定接口位于哪个类里面

图中 InspectorWindow.cs 便是目标类。搜索一下关键词 “Lock”, 发现有个叫 isLock 的属性,这个属性就是控制小锁子的属性。

  • 我用的是 Unity 2019.3.0,早一些的版本中的类名和属性名可能不相同,需要自己判定。比如 Unity 2018 中的类名是 Inspector.cs
  • 至于怎么找对应的接口或属性,终极大法: 连猜带蒙

找到了对应的属性,我们就开始写代码来实现调用了,由于 InspectorWindow.cs 有访问权限限制,所以我们用反射来调用并修改


代码很简单,贴出来

using UnityEditor;
using System;
public class TestLock : Editor
{
    protected static bool isLock;

    //添加菜单项
    [MenuItem("Tools/Test Lock")]
    static void Lock()
    {
        Type t = typeof(EditorWindow).Assembly.GetType("UnityEditor.InspectorWindow");
        var window = EditorWindow.GetWindow(t);

        isLock = !isLock;
        t.GetProperty("isLocked").SetValue(window, isLock);
    }
}



欢迎关注公众号,定期分享Unity的实用技巧~~
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Si3是脚本,着色器和文本资源的高级IDE,无缝集成在Unity Editor中。 Si3为C#脚本提供了上下文敏感的自动完成功能,并提供了丰富的附加工具,键绑定和鼠标处理功能。 Si3会让你大吃一惊 - 就这么快! Si3具有定制的高级C#解析和代码分析引擎!由于其新颖的代码分析方法(.Net的反射和增量语法和语义分析技术的混合),Si3可以轻松胜过任何其他IDE(是的,包括Visual Studio!)......文件立即打开!代码更改会立即反映在其内部数据结构,解析树和带有符号表的类型模型中。然后,更改会立即反映到您的所有脚本中...... 您将享受前所未有的Unity! 现在使用Si3在Unity中进行编程是一种非常流畅,流畅和愉快的体验。 =)程序员最终可以专注于他们的任务,而不是等待(有时还在战斗)外部IDE运行,加载正确的脚本,或跳转到正确的行。 主要特点: - C#,a.k.a intellisense的自动代码完成 - 可自定义的代码片段 - Unity魔术方法的代码生成器 - 自动关闭支架 - 自动缩进 - 自动保存和重新加载 - 快速检查静态场和属性 - 检查MonoBehaviour油田和物业 - 轻松执行无参数静态方法 - 每个资产无限制且独立的撤消和重做缓冲区 - 快速调用堆栈导航到控制台日志条目 - 代码符号和#region导航 - 转到定义 - Unity脚本参考 - .Net符号的MSDN参考 - 光标历史导航 - 搜索/快速搜索/在文件中查找 - 语义和语法突出显示 - 错误突出显示 - 读/写参考突出显示 - 匹配括号突出显示 - 版本控制(包括P4Connect)集成 - 多个精心挑选的字体和颜色主题 - 包括完整的源代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值