Unity Inspector编辑器扩展,枚举显示中文,枚举值自定义显示内容

news2024/11/13 10:52:18

记录!Unity Inspector面板编辑器扩展,枚举显示中文,枚举值自定义显示内容,显示部分选项。效果如下:

枚举类代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnumTest : MonoBehaviour
{
    [EnumAttackLevel("攻击级别")]
    public EAttackLevel level;
}

public enum EAttackLevel
{
    [Header("0空")]
    None,
    [Header("1低")]
    Low,
    [Header("2中")]
    Med,
    [Header("3高")]
    High,
}

扩展类代码:

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class EnumAttackLevelAttribute : HeaderAttribute
{
    public EnumAttackLevelAttribute(string header) : base(header)
    {
    }
}

[CustomPropertyDrawer(typeof(EnumAttackLevelAttribute))]
public class EnumAttackLevelDrawer : PropertyDrawer
{
    private readonly List<string> m_displayNames = new List<string>();

    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        var att = (EnumAttackLevelAttribute)attribute;
        var type = property.serializedObject.targetObject.GetType();
        var field = type.GetField(property.name);
        var enumtype = field.FieldType;
        foreach (var enumName in property.enumNames)
        {
            var enumfield = enumtype.GetField(enumName);
            if (enumfield.Name == "None")//不显示None
            {
                continue;
            }
            var hds = enumfield.GetCustomAttributes(typeof(HeaderAttribute), false);
            m_displayNames.Add(hds.Length <= 0 ? enumName : ((HeaderAttribute)hds[0]).header);//如果加了自定义属性,显示自定义名,否则显示枚举选项名
        }
        EditorGUI.BeginChangeCheck();
        var value = EditorGUI.Popup(position, att.header, property.enumValueIndex, m_displayNames.ToArray());
        if (EditorGUI.EndChangeCheck())
        {
            property.enumValueIndex = value + 1;//因为我们隐藏了一个显示项None,这儿别忘了加1
            Debug.LogError("value " + property.enumValueIndex.ToString());
        }
    }
}

https://www.cnblogs.com/fengxing999/p/12559887.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从顺序表表中删除具有最小值的元素(假设不唯一)并由函数返回被删元素值

从顺序表表中删除具有最小值的元素&#xff08;假设不唯一&#xff09;&#xff0c;并由函数返回被删元素值 空出的位置由最后一个元素填补&#xff0c;若顺序表为空&#xff0c;则显示出错误信息并退出运行 //顺序表定义及初始化 #define _CRT_SECURE_NO_WARNINGS #include&l…

SpringMVC Day 01:入门案例

前言 在我们的日常工作和学习中&#xff0c;Web 开发是一个无法回避的重要环节。而在 Java Web 开发领域&#xff0c;SpringMVC 无疑是一个重量级选手。它以其灵活性、强大功能和清晰的 MVC 结构&#xff0c;赢得了大量开发者的青睐。但是&#xff0c;对于初学者来说&#xff…

云表:【建议收藏】什么是低代码?一分钟掌握低代码开发

IT圈的风口总是轮番上演&#xff0c;但只有在浪潮退去后&#xff0c;真正具有社会价值的产品才能脱颖而出。同样地&#xff0c;这个规则也适用于“低代码”这个赛道。 云表平台认为&#xff0c;低代码将成为未来企业数字化转型中不可或缺的重要元素之一。随着市场竞争的不断加剧…

Qt 窗口的尺寸

本文通过多个案例&#xff0c;详细说明关于Qt窗体尺寸的一些重要问题 默认尺寸 对于一个Qt的窗口&#xff08;继承于QWidget&#xff09;&#xff0c;获取其窗体尺寸的方法size()&#xff1b; 以一个Qt创建Qt Widgets Application项目的默认生成代码为基础&#xff0c;做如下…

安科瑞电能计量管理系统

安科瑞 崔丽洁 随着国家电网改革政策的逐步推进和落实&#xff0c;Acrel-3000WEB电能管理解决方案运用互联网和大数据技术&#xff0c;为电力运维公司提供电能管理解决方案。该平台作为连接运维单位和用电企业的纽带&#xff0c;全方面监视用户配电系统的运行状态和电量数据&am…

分享一款基于 AI 的 Chrome 插件

最近使用大模型比较多&#xff0c;公司虽然提供了免费的 ChatGPT 但是需要跳转特定页面才能访问&#xff0c;比较麻烦&#xff0c;于是就想到是否可以开发一款类似于有道词典一样的 Chrome 插件&#xff0c;可以在任意页面使用&#xff0c;虽然市面上也有类似的插件&#xff0c…

2023中国物流系统集成商百强榜研究报告(附下载)

随着智能物流建设的不断深入&#xff0c;企业应用了越来越多的自动化、智能化物流设备与管理软件。但各物流功能之间的效益背反问题如何解决? 各品牌与类型物流设备的接口各异如何统一调度? 各物流设备与管理软件之间的数据如联通传输? 乃至物流设备与生产设备、物流管理软…

如何新建一个一台交换机下连两个PC的拓扑

文章目录 1.效果如下1.新建一个空白拓扑页选择设备类型向工作区添加设备如何选择链接线如何使设备之间链接上启动设备 1.效果如下 1.新建一个空白拓扑页 选择设备类型 向工作区添加设备 如何选择链接线 如何使设备之间链接上 同理右侧设备也是这样链接的 启动设备 同理PC1和P…

nohup命令后台启动jar包

使用jps命令查看后台启动的进程 kill -9 218729 杀掉进程&#xff0c;如果没有启动过就不用了&#xff0c;忘了的话就会有两个jar的进程&#xff0c;都杀掉然后重新启动jar包然后进入到jar包对应的目录下使用nohup命令启动jar包 命令&#xff1a;nohup java -jar xxx.jar >c…

轻量级仿 SpringBoot=嵌入式 Tomcat+SpringMVC

SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow&#xff0c;——这是怎么做到的&#xff1f;我们以 Tomcat 为例子&#xff0c;尝试调用嵌入式 Tomcat。 为了说明如何打造轻量级的 SpringBoot&#xff0c;本文分为“嵌入式 Tomcat”、“增强 SpringMVC”和“打包/部署”…

LDO基础知识

LDO基础知识 线性稳压器基本上由输入IN、输出OUT、GND引脚所构成 可变线性稳压器则在输出增加输出电压的反馈&#xff08;feed back&#xff09;引脚 (通过分压电阻来进行调节输出电压的大小) LDO 线性稳压器内部电路如下图所示。 基本上由误差放大器&#xff08;误差检测用…

行情分析——加密货币市场大盘走势(10.25)

目前大饼继续上涨&#xff0c;还没有看到震荡盘整的迹象。从MACD日线来看&#xff0c;连续绿色实心柱已经10天。现在有点上涨无力了&#xff0c;而现在入场做空性价比更高&#xff0c;看反弹到33000-32000。如果谨慎点&#xff0c;可以继续等待。 以太目前来看和大饼一样那个也…

MySQL中的Base64函数

编码函数to_base64() select to_base64("123") 解码函数from_base64() select from_base64("MTIz")

leetcode:1662. 检查两个字符串数组是否相等(python3解法)

难度&#xff1a;简单 给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。 示例 1&#xff1a; 输入&#xff1a;word1 […

AMS启动流程

本文均采用Android 14代码进行讲解&#xff0c;学习可以使用以下地址&#xff1a;Search 一、AMS启动流程 AMS的启动是在SyetemServer进程中启动的&#xff0c;从SyetemServer的main方法开始进入&#xff1a; 1.SystemServer.java main(String[] args) /*** The main entr…

Qt篇——子控件QLayoutItem与实际控件的强转

方法&#xff1a;使用qobject_cast<QLabel*>() &#xff0c;将通过itemAt(i)获取到的子控件(QLayoutItem)强转为子控件的实际类型(如QLineEdit、QLabel等)。 场景举例&#xff1a; QLabel *label qobject_cast<QLabel*>(ui->horizontalLayout_40->itemAt(0…

c#使用ExifLib库提取图像的相机型号、光圈、快门、iso、曝光时间、焦距信息等EXIF信息

近期公司组织了书画摄影比赛&#xff0c;本人作为摄影爱好者&#xff0c;平时也会拍些照片&#xff0c;这次比赛当然不能错过。为了提高获奖概率&#xff0c;选了19张图像作为参赛作品。但是&#xff0c;摄影作品要提交图像的光圈、曝光时间等参数。一两张还可以通过电脑自带软…

1024程序员节获奖名单公示~恭喜各位上榜同学

1024程序员节完美收官&#xff01; 恭喜各个分会场中奖的小伙伴~我们已于昨日的线下会场完成奖品及证书发放&#xff01; 更多优秀作品欢迎大家点击查看&#xff1a;卡奥斯开源社区 — 打造工业互联网顶级开源社区 颁奖典礼精彩回放&#xff1a;卡奥斯开源社区 — 打造工业互…

【ARM Coresight 系列文章 3.3 - ARM Coresight SWD 协议详细介绍】

文章目录 1.1 SWD 协议框图1.2 读/写时序及命令1.2.1 SWD 时序1.2.2 SWD 命令详情1.3 芯片探测1.3.1 获取芯片 ID1.4 读/写操作1.1 SWD 协议框图 SWD协议可以配置SoC内部几乎所有的寄存器。时钟信号由SWCLK 管脚输入,数据信号从SWDIO管脚输入输出。首先 HOST 对SW-DP 进行操作…

基于html5+javascript技术开发的房贷利率计算器

房贷计算器是一款专为购房者设计的实用工具应用&#xff0c;其主要功能是帮助用户详细计算房贷的还款金额、利息以及还款计划等。通过这款软件&#xff0c;用户可以更加便捷地了解到自己的还款情况和计划&#xff0c;从而更好地规划自己的财务。下面将对房贷计算器进行详细的介…