Unity 自定义窗口

放在Editor文件夹下;
在这里插入图片描述

#if UNITY_EDITOR

using System;
using UnityEditor;
using UnityEngine;


namespace EditorCustumTool
{
    /// <summary>
    /// 自定义窗口
    /// </summary>
    public class CustomWindow : EditorWindow
    {
        public enum FlagType
        {
            Flag1 = 101,
            Flag2 = 102,
            Flag3 = 103,
        }


        private string text1 = "";
        private float number1 = 0;

        private string text2 = "";
        private float number2 = 0;

        private float sliderValue;

        private float scrollBarHorizontal;
        private float scrollBarVertical;

        private int gridIndex = 0;
        private int toolbarIndex = 0;

        private FlagType flag;

        private int popupindex;

        private bool isOn = false;

        private CustomWindow()
        {
            this.titleContent = new GUIContent("自定义窗口");
        }

        [MenuItem("自定义工具/自定义窗口")]
        private static void ShowWindow()
        {
            EditorWindow.GetWindow(typeof(CustomWindow));
        }

        private void OnGUI()
        {
            EditorGUILayout.BeginVertical();

            // 标题
            GUILayout.Space(10);
            GUI.skin.label.fontSize = 15;
            GUI.skin.label.alignment = TextAnchor.MiddleCenter;
            GUILayout.Label("自定义窗口");

            // 内容        
            GUI.skin.label.fontSize = 12;
            GUI.skin.label.alignment = TextAnchor.UpperLeft;


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            GUILayout.Label("文本1", GUILayout.MaxWidth(60));
            text1 = EditorGUILayout.TextArea(text1, GUILayout.MaxHeight(20));
            GUILayout.EndHorizontal();


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            GUILayout.Label("数值1", GUILayout.MaxWidth(60));
            number2 = EditorGUILayout.FloatField(number2, GUILayout.MaxHeight(20));
            GUILayout.EndHorizontal();


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            text1 = EditorGUILayout.TextField("文本2", text1);
            GUILayout.EndHorizontal();


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            number2 = EditorGUILayout.FloatField("数值2", number2);
            GUILayout.EndHorizontal();


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            sliderValue = EditorGUILayout.Slider("滑动条", sliderValue, -5, 5);
            GUILayout.EndHorizontal();


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            scrollBarHorizontal = GUILayout.HorizontalScrollbar(scrollBarHorizontal, 0, 0, 100, new[] { GUILayout.Width(100) });
            scrollBarVertical = GUILayout.VerticalScrollbar(scrollBarVertical, 0, 0, 100, new[] { GUILayout.Height(100) });
            GUILayout.EndHorizontal();


            // 按钮控件
            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            gridIndex = GUILayout.SelectionGrid(gridIndex, new[] { "1", "2", "3", "4", "5", "6" }, 4);
            GUILayout.EndHorizontal();


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            toolbarIndex = GUILayout.Toolbar(toolbarIndex, new[] { "1", "2", "3", "4", "5", "6" });
            GUILayout.EndHorizontal();


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            // 这个单选
            flag = (FlagType)EditorGUILayout.EnumPopup(new GUIContent("FlagType", null, "ToolTip"), flag);
            // 这个可以多选
            //flag = (FlagType)EditorGUILayout.EnumFlagsField(new GUIContent("FlagType", null, "ToolTip"), flag);
            GUILayout.EndHorizontal();


            GUILayout.Space(10);
            GUILayout.BeginHorizontal();
            //一个选择框,每个选择框里表示一个Int数
            popupindex = EditorGUILayout.IntPopup("IntPopup", popupindex, new[] { "a", "b", "c" }, new[] { 1, 2, 3 });
            GUILayout.EndHorizontal();


            // 展示信息
            GUILayout.Space(10);
            var noSelected = Selection.transforms == null || Selection.transforms.Length == 0;
            var message = noSelected ? "请选择一个物体" : $"当前选中了{Selection.transforms.Length}个物体";
            var messageType = noSelected ? MessageType.Error : MessageType.Info;
            EditorGUILayout.HelpBox(message, messageType);

            EditorGUILayout.Space(10);
            if (GUILayout.Button("打印选中的物体名"))
                DebugSelectedObjName();

            GUILayout.EndVertical();
        }

        private void DebugSelectedObjName()
        {
            if (Selection.transforms.Length > 0)
            {
                foreach (var trans in Selection.transforms)
                    Debug.LogError(trans.name);
            }
            else
            {
                Debug.LogError("当前没选中任何物体");
            }
        }
    }
}

#endif

效果如图所示
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/230519.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于stm32ESP8266控制并显示速度的小车

这篇博客是为了实现stm32与ESP8266通讯控制的小车&#xff0c;同时可以实现在网络助手和OLED显示屏上显示速度的功能。 一、硬件部分 名称图片功能32单片机--小车-oled显示屏显示当当前的速度&#xff0c;有需要了解如何使用的可以看看我的文章&#xff0c;http://t.csdnimg.…

MATLAB - 凸优化(Convex Optimization)

系列文章目录 前言 凸优化&#xff08;Convex optimization&#xff09;是在凸约束&#xff08;convex constraints&#xff09;条件下使凸目标函数&#xff08;convex objective function&#xff09;最小化的过程&#xff0c;或者等同于在凸约束条件下使凹目标函数最大化的过…

mybatis和mybatisplus中对 同namespace 中id重复处理逻辑源码解析

一、背景 同事在同一个mapper.xml &#xff08;namespace相同&#xff09;&#xff0c;复制了一个sql没有修改id&#xff0c;正常启动项目。但是我以前使用mybatis的时候如果在namespace相同情况下&#xff0c;id重复&#xff0c;项目会报错无法正常启动&#xff0c;后来看代码…

算法Day26 数位统计

数位统计 Description 给你一个整数n&#xff0c;统计并返回各位数字都不同的数字x的个数&#xff0c;其中0 ≤ x < 10^n。 Input 输入整数n 0≤n≤13 Output 输出整数个数 Sample 代码 import java.util.Scanner;public class Main {public static void main(String[] ar…

初识 pytest 及断言使用

章节目录&#xff1a; 一、pytest 相关概述二、环境搭建三、使用前提四、断言4.1 常用断言4.2 异常断言4.3 断言装饰器 五、结束语 一、pytest 相关概述 pytest 是一个基于 Python 编写的测试框架&#xff0c;用于编写和运行各种类型的软件测试。它提供了丰富的功能和灵活的语法…

CleanMyMac2024一款十分高效的mac系统清理工具

当很多人还在为电脑运行缓慢、工作问题不能快速得到解决而烦恼的时候&#xff0c;我已经使用过了多款系统清理工具&#xff0c;并找到了最适合我的那一款。我的电脑是超耐用的Mac book&#xff0c;接下来给大家介绍三种在众多苹果电脑清理软件的排名较高的软件。 一、Maintena…

JUnit 之初体验

文章目录 1.定义2.引入1&#xff09;使用 Maven 工具2&#xff09;使用 Gradle 工具3&#xff09;使用 Jar 包 2.样例0&#xff09;前提1&#xff09;测试类2&#xff09;测试方法3&#xff09;测试断言4&#xff09;实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…

NLP项目实战01之电影评论分类

介绍&#xff1a; 欢迎来到本篇文章&#xff01;在这里&#xff0c;我们将探讨一个常见而重要的自然语言处理任务——文本分类。具体而言&#xff0c;我们将关注情感分析任务&#xff0c;即通过分析电影评论的情感来判断评论是正面的、负面的。 展示&#xff1a; 训练展示如下…

【深度学习】一维数组的 K-Means 聚类算法理解

刚看了这个算法&#xff0c;理解如下&#xff0c;放在这里&#xff0c;备忘&#xff0c;如有错误的地方&#xff0c;请指出&#xff0c;谢谢 需要做聚类的数组我们称之为【源数组】 需要一个分组个数K变量来标记需要分多少个组&#xff0c;这个数组我们称之为【聚类中心数组】…

Kafka快速实战以及基本原理详解

文章目录 一、Kafka介绍为什么要用Kafka 二、Kafka快速上手实验环境单机服务体验 三、理解Kakfa的消息传递机制四、Kafka集群服务五、理解服务端的Topic、Partition和Broker七、Kafka集群的整体结构八、Kraft集群Kraft集群简介配置Kraft集群 一、Kafka介绍 ChatGPT对于Apache …

人体关键点检测1:人体姿势估计数据集

人体关键点检测1&#xff1a;人体姿势估计数据集 目录 人体关键点检测1&#xff1a;人体姿势估计数据集 1.人体姿态估计 2.人体姿势估计数据集 &#xff08;1&#xff09;COCO数据集 &#xff08;2&#xff09;MPII数据集 &#xff08;3&#xff09;Human3.6M &#xf…

CENTOS 7 添加黑名单禁止IP访问服务器

一、通过 firewall 添加单个黑名单 只需要把ip添加到 /etc/hosts.deny 文件即可&#xff0c;格式 sshd:$IP:deny vim /etc/hosts.deny# 禁止访问sshd:*.*.*.*:deny# 允许的访问sshd:.*.*.*:allowsshd:.*.*.*:allow 二、多次失败登录即封掉IP&#xff0c;防止暴力破解的脚本…

【解决办法】Pycharm中新添加或者导入项目文件名红色!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、问题描述二、问题原因三、解决办法 一、问题描述 Pycharm的代码中添加新的文件夹&#xff0c;发现文件夹下的文件名是红色的&#xff0c;如下图&#xff1a; …

视频推拉流直播点播EasyDSS平台点播文件加密存储的实现方法

视频推拉流直播点播系统EasyDSS平台&#xff0c;可提供流畅的视频直播、点播、视频推拉流、转码、管理、分发、录像、检索、时移回看等功能&#xff0c;可兼容多操作系统&#xff0c;还能支持CDN转推&#xff0c;具备较强的可拓展性与灵活性&#xff0c;在直播点播领域具有广泛…

设计模式基础——概述(1/2)

目录 一、设计模式的定义 二、设计模式的三大类别 三、设计模式的原则 四、主要设计模式目录 4.1 创建型模式&#xff08;Creational Patterns&#xff09; 4.2 结构型模式&#xff08;Structural Patterns&#xff09; 4.3 行为型模式&#xff08;Behavioral Patterns&…

5.10 Windows驱动开发:摘除InlineHook内核钩子

在笔者上一篇文章《内核层InlineHook挂钩函数》中介绍了通过替换函数头部代码的方式实现Hook挂钩&#xff0c;对于ARK工具来说实现扫描与摘除InlineHook钩子也是最基本的功能&#xff0c;此类功能的实现一般可在应用层进行&#xff0c;而驱动层只需要保留一个读写字节的函数即可…

Numpy数组的重塑,转置与切片 (第6讲)

Numpy数组的重塑,转置与切片 (第6讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

如何将腾讯混元大模型AI接入自己的项目里(中国版本ChatGPT)

如何将腾讯混元大模型AI接入自己的项目里 一、腾讯混元大模型API二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、腾讯混元大模型API 基于腾讯混元大模型AI的智能文本对话AI机器人…

uniapp 数组添加不重复元素

一、效果图 二、代码 //点击事件rightBtn(sub, index) {console.log(sub, index)//uniapp 数组添加不重复元素if (this.selectList.includes(sub.type)) {this.selectList this.selectList.filter((item) > {return item ! sub.type;});} else {this.selectList.push(sub.t…

长城之上的无人机:文化遗产的守护者

长城之上的无人机&#xff1a;文化遗产的守护者 在八达岭长城景区&#xff0c;两架无人机分别部署在了长城的南、北楼两点。根据当前的保护焦点和需求&#xff0c;制定了5条无人机综合巡查航线&#xff0c;以确保长城景区的所有开放区域都能得到有效监管。每天&#xff0c;无人…