游戏需要增加几种启动模式,要在编辑器顶部Toolbar处增加几个按钮;进行下扩展。

这部分Unity没有直接提供接口,需通过反射实现。看了下有一个开源库:

https://github.com/marijnz/unity-toolbar-extender

(2022/12/25补充一个完成度更高的开源库:https://github.com/smkplus/CustomToolbar)

但感觉还要用到额外的库有点复杂,干脆都放在一个类里封装下(unity2021.x):

namespace Hont
{
using System;
using System.Reflection;
using UnityEngine;
using UnityEditor;
using UnityEngine.UIElements; [InitializeOnLoad]
public static class CruToolbar
{
private static readonly Type kToolbarType = typeof(Editor).Assembly.GetType("UnityEditor.Toolbar");
private static ScriptableObject sCurrentToolbar; static CruToolbar()
{
EditorApplication.update += OnUpdate;
} private static void OnUpdate()
{
if (sCurrentToolbar == null)
{
UnityEngine.Object[] toolbars = Resources.FindObjectsOfTypeAll(kToolbarType);
sCurrentToolbar = toolbars.Length > 0 ? (ScriptableObject)toolbars[0] : null;
if (sCurrentToolbar != null)
{
FieldInfo root = sCurrentToolbar.GetType().GetField("m_Root", BindingFlags.NonPublic | BindingFlags.Instance);
VisualElement concreteRoot = root.GetValue(sCurrentToolbar) as VisualElement; VisualElement toolbarZone = concreteRoot.Q("ToolbarZoneRightAlign");
VisualElement parent = new VisualElement()
{
style = {
flexGrow = 1,
flexDirection = FlexDirection.Row,
}
};
IMGUIContainer container = new IMGUIContainer();
container.onGUIHandler += OnGuiBody;
parent.Add(container);
toolbarZone.Add(parent);
}
}
} private static void OnGuiBody()
{
//自定义按钮加在此处
GUILayout.BeginHorizontal();
if (GUILayout.Button(new GUIContent("Full setup", EditorGUIUtility.FindTexture("PlayButton"))))
{
Debug.Log("Full setup");
}
if (GUILayout.Button(new GUIContent("Wram-up setup", EditorGUIUtility.FindTexture("PlayButton"))))
{
Debug.Log("Wram-up setup");
}
GUILayout.EndHorizontal();
}
}
}

效果:

扩展Unity编辑器顶部Toolbar,增加自定义按钮的更多相关文章

  1. Odoo8在TreeView左上角增加自定义按钮以及通过继承生成自定义的View_Mode

    今天有网友在问怎么在TreeView左上角增加一个自定义的按钮,在查询Odoo 自带的模块,发现在purchase_requisition中有使用,并且此模块还应用到了自定义View_Mode的情况, ...

  2. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox增加自定义按钮的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

  3. 学习OpenSeadragon之五(工具条toolbar与自定义按钮)

    OpenSeadragon简介:学习OpenSeadragon之一(一个显示多层图片的开源JS库) 一.工具条toolbar设置 OpenSeadragon为我们提供了现成的工具条toolBar,工具 ...

  4. unity 编辑器扩展简单入门

    unity 编辑器扩展简单入门 通过使用编辑器扩展,我们可以对一些机械的操作实现自动化,而不用使用额外的环境,将工具与开发环境融为一体:并且,编辑器扩展也提供GUI库,来实现可视化操作:编辑器扩展甚至 ...

  5. wordpress优化之结合prism.js为编辑器自定义按钮转化代码

    原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...

  6. Unity编辑器:自定义编辑器样式——GUIStyle

    通过GUIStyle,可以自定义Unity编辑器的样式. GUIStyle可以new一个全新的实例,这样,需要自己处理所有自己需要的效果. GUIStyle还可以基于已经存在的实例new一个新的实例, ...

  7. Unity场景道具模型拓展自定义编辑器

    (一)适用情况 当游戏主角进入特定的场景或者关卡,每个关卡需要加载不同位置的模型,道具等.这些信息需要先在unity编辑器里面配置好,一般由策划干这事,然后把这些位置道具信息保存在文件,当游戏主角进入 ...

  8. Unity编辑器扩展 Chapter7--使用ScriptableObject持久化存储数据

    Unity编辑器扩展 Chapter7--使用ScriptableObject持久化存储数据 unity unity Editor ScirptableObject  Unity编辑器扩展 Chapt ...

  9. Unity编辑器扩展chapter1

    Unity编辑器扩展chapter1 unity通过提供EditorScript API 的方式为我们提供了方便强大的编辑器扩展途径.学好这一部分可以使我们学会编写一些工具来提高效率,甚至可以自制一些 ...

  10. Nlog、Log4Net 的一个小扩展(增加自定义LEVEL)

    因公司ELK监控分析日志的需要,需要区分进程运行状态日志以及错误日志,以便能够根据日志级别(level)进行不同策略的预警,而现有的Nlog.Log4Net都没有Process这样的level,故针对 ...

随机推荐

  1. 新版本NOI Linux发布,支持VSCode,Code::Blocks开发C++!!!,内附下载地址。

    注意VSCODE 虽然有C艹插件,但是在第一次编译的时候必须要有网络,否则用不了 我推荐还是用CODE::BLOCKS 作者10月8日补充 有些省份已经开始强制在NOIP的比赛里使用NOI Linux ...

  2. Docker学习路线6:使用第三方镜像

    第三方镜像是在Docker Hub或其他容器注册表上提供的预构建Docker容器镜像.这些镜像由个人或组织创建和维护,可以作为您容器化应用程序的起点. 查找第三方镜像 Docker Hub 是最大和最 ...

  3. 千字干货分享:一文教你ABI增强分析,BI的未来就在这里!

    自2017年以来,智能概念开始出现,各类商业智能BI应用的使用门槛逐渐降低,商业智能BI制造商主要竞争增强分析的能力.<2020年Gartner分析与BI平台魔法象限报告>指出,2020年 ...

  4. CentOS-6.4启动盘制作过程

    目标机器:ThinkPad X230 (i5-3210, 4G DDR3, 500G 7200转),预装win 8 目标系统:CentOS-6.4-x86_64-bin-DVD1.iso 主要参考文章 ...

  5. setTimeout(fn, 0) // it works - JavaScript 事件循环 动画演示

    在前端代码中很经常看到使用 setTimeout(fn, 0),如下面代码所示,乍一看很多余,但是移除了可能会出现一些奇奇怪怪的问题.要解释这个就需要理解 事件循环(Event Loop),下面会通过 ...

  6. 【布局进阶】巧用 :has & drop-shadow 实现复杂布局效果

    最近,群里聊到了一个很有意思的布局效果.大致效果如下所示,希望使用 CSS 实现如下所示的布局效果: 正常而言,我们的 HTML 结构大致是如下所示: <div class="g-co ...

  7. etcd 历史版本回溯的方法

    在使用 etcd 作为配置存储或者其他的场景,如果因为误操作对其中 key 的值进行了修改,如果想要找回原来的值,可以利用 etcd 的版本机制进行回溯找回以前的值.在具体操作之前,我们首先获取一下 ...

  8. 6980. 【2021.02.03冬令营模拟】你的世界(world) Another Solution

    Problem Description Input 从文件 world.in 中读入数据. Output 输出到文件 world.out 中. 输出共 T 行,第 i 行表示第 i 组测试数据的答案, ...

  9. 使用electron的demo时遇到的错误

    使用electron的demo时的错误 Electron | Build cross-platform desktop apps with JavaScript, HTML, and CSS. (el ...

  10. TiDB Vector 抢先体验之用 TiDB 实现以图搜图

    本文首发自 TiDB 社区专栏:https://tidb.net/blog/0c5672b9 前言 最早知道 TiDB 要支持向量化的消息应该是在23年10月份左右,到第一次见到 TiDB Vecto ...