• 扩展Unity编辑器顶部Toolbar,增加自定义按钮


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

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

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

    但感觉还要用到额外的库有点复杂,干脆都放在一个类里封装下(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();
            }
        }
    }

    效果:

  • 相关阅读:
    关于智能本质的思考
    Effective C++ 条款39
    【视频教程】JEECG 入门视频教程大全+历史版本号代码下载
    HDU 4859(Bestcoder #1 1003)海岸线(网络流之最小割)
    最简单的基于FFMPEG的音频编码器(PCM编码为AAC)
    android经常使用的电话操作
    Vmware中为Mac Os安装vmtools
    win10.10 激活
    VM11安装Mac OS X 10.10
    win7系统升家庭版级为旗舰版的方法
  • 原文地址:https://www.cnblogs.com/hont/p/15968054.html
Copyright © 2020-2023  润新知