游戏需要增加几种启动模式,要在编辑器顶部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. 闲来无事-esp32cam实现延时摄影

    扯淡时间 在上一篇文章中我提了一嘴,打算使用esp32cam实现一个延迟摄影,奈何存在各种硬件问题,商家发了好几个地板都不好使(就是那个拼多多商家的问题,还说我供电不稳,我特意买了独立供电的hub), ...

  2. 高能有料 | 第二届OpenHarmony技术大会议程速递

       第二届开放原子开源基金会OpenHarmony技术大会如约而至 让我们一起 开封无限惊喜的技术成果 开放无限前沿的议题干货 开启无限可能的未来之门 点击此处报名参会!

  3. Pandas通用函数和运算

    Pandas继承了Numpy的运算功能,可以快速对每个元素进行运算,即包括基本运算(加减乘除等),也包括复杂运算(三角函数.指数函数和对数函数等). 通用函数使用 apply和applymap app ...

  4. redis 简单整理——客户端案例分析[十八]

    前言 简单整理一下客户端案例分析. 正文 现象一: 服务端现象:Redis主节点内存陡增,几乎用满maxmemory,而从节点 内存并没有变化. 客户端现象:客户端产生了OOM异常,也就是Redis主 ...

  5. Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin[id:xxx.xxx.xxx]

    前言 看下这个完整的bug: Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to appl ...

  6. 扩展中国剩余定理证明及例题 Strange Way to Express Integers

    前置知识 中国剩余定理(CRT),逆元: EXCRT是什么 我们知道,对于 对于 \[\begin{equation} \begin{cases} x \equiv c_1 \ (mod \ m_1) ...

  7. 实用的SpringBoot生成License方案

    前言 License指的是版权许可证,当我们开发完系统后,如果不想让用户一直白嫖使用,比如说按时间续费,License的作用就有了. 我们可以给系统指定License的有效期,控制系统的可用时间. 那 ...

  8. 构建RAG应用-day01: 词向量和向量数据库 文档预处理

    词向量和向量数据库 词向量(Embeddings)是一种将非结构化数据,如单词.句子或者整个文档,转化为实数向量的技术. 词向量搜索和关键词搜索的比较 优势1:词向量可以语义搜索 比如百度搜索,使用的 ...

  9. Alibaba/IOC-golang 正式开源 ——打造服务于go开发者的IOC框架

    简介: IOC(inversion of control)即控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.IOC-golang 是一款服务于Go语言开发者的依赖注入框架 ...

  10. 技术实践第三期|HashTag在Redis集群环境下的使用

    ​简介:欢迎了解友盟+技术干货第三期内容:Redis集群环境如何按照前缀批量删除缓存.希望能对开发者们在实际应用中有所帮助. 一.背景 数据源列表添加缓存支持,types字段可传多值,如app, mi ...