2024-07-16 Unity插件 Odin Inspector7 —— Number Attributes

news2024/11/14 17:26:21

文章目录

  • 1 说明
  • 2 Number 特性
    • 2.1 MaxValue / MinValue
    • 2.2 MinMaxSlider
    • 2.3 ProgressBar
    • 2.4 PropertyRange
    • 2.5 Unit
    • 2.6 Wrap

1 说明

​ 本文介绍 Odin Inspector 插件中有关 Number 特性的使用方法。

2 Number 特性

2.1 MaxValue / MinValue

在 Inspector 窗口中对象能够被设置的最小 / 大值。超过该范围则会有错误提示。

  • double maxValue/minValue

    最大 / 小值。

  • string Expression

    用于解析最大 / 小值的字符串。可以是字段、属性、方法名或表达式。

image-20240716045038267
// MinMaxValueValueExamplesComponent.cs

using Sirenix.OdinInspector;
using UnityEngine;

public class MinMaxValueValueExamplesComponent : MonoBehaviour
{
    // Ints
    [Title("Int")]
    [MinValue(0)]
    public int IntMinValue0;

    [MaxValue(0)]
    public int IntMaxValue0;

    // Floats
    [Title("Float")]
    [MinValue(0)]
    public float FloatMinValue0;

    [MaxValue(0)]
    public float FloatMaxValue0;

    // Vectors
    [Title("Vectors")]
    [MinValue(0)]
    public Vector3 Vector3MinValue0;

    [MaxValue(0)]
    public Vector3 Vector3MaxValue0;
}

2.2 MinMaxSlider

将 Vector2 向量表示为 [min, max] 区间,并在 Inspector 窗口中以滑动条方式显示。其中,x 为最小值,y 为最大值。

  • float minValue/maxValue

    最小 / 大值。

  • string minValueGetter/maxValueGetter

    获取最小 / 大值的方法名称。

  • string minMaxValueGetter

    获取最小、大值对的方法名称。

  • bool showFields = false

    是否显示对象名称。

image-20240716045759075
// MinMaxSliderExamplesComponent.cs

using Sirenix.OdinInspector;
using UnityEngine;

public class MinMaxSliderExamplesComponent : MonoBehaviour
{
    [MinMaxSlider(-10, 10)]
    public Vector2 MinMaxValueSlider = new Vector2(-7, -2);

    [MinMaxSlider(-10, 10, true)]
    public Vector2 WithFields = new Vector2(-3, 4);

    [InfoBox("You can also assign the min max values dynamically by referring to members.")]
    [MinMaxSlider("DynamicRange", true)]
    public Vector2 DynamicMinMax = new Vector2(25, 50);

    [MinMaxSlider("Min", 10f, true)]
    public Vector2 DynamicMin = new Vector2(2, 7);

    [InfoBox("You can also use attribute expressions with the @ symbol.")]
    [MinMaxSlider("@DynamicRange.x", "@DynamicRange.y * 10f", true)]
    public Vector2 Expressive = new Vector2(0, 450);

    public Vector2 DynamicRange = new Vector2(0, 50);

    public float Min { get { return this.DynamicRange.x; } }

    public float Max { get { return this.DynamicRange.y; } }
}

2.3 ProgressBar

为 value 绘制进度条。

  • double min/max

    最小 / 大值区间。

  • float r = 0.15f, float g = 0.47f, float b = 0.74f

    进度条颜色。

  • int Height

    进度条高度,默认为 12 像素。

  • bool Segmented

    进度条是否分段显示。

  • string ColorGetter/BackgroundColorGetter

    进度条 / 背景条颜色的获取方法。

  • bool DrawValueLabel

    是否绘制对象标签。

image-20240716050412188
// ProgressBarExamplesComponent.cs

using Sirenix.OdinInspector;
using UnityEngine;

public class ProgressBarExamplesComponent : MonoBehaviour
{
    [ProgressBar(0, 100)]
    public int ProgressBar = 50;

    [HideLabel]
    [ProgressBar(-100, 100, r: 1, g: 1, b: 1, Height = 30)]
    public short BigColoredProgressBar = 50;

    [ProgressBar(0, 10, 0, 1, 0, Segmented = true)]
    public int SegmentedColoredBar = 5;

    [ProgressBar(0, 100, ColorGetter = "GetHealthBarColor")]
    public float DynamicHealthBarColor = 50;

    // The min and max properties also support attribute expressions with the $ symbol.
    [BoxGroup("Dynamic Range")]
    [ProgressBar("Min", "Max")]
    public float DynamicProgressBar = 50;

    [BoxGroup("Dynamic Range")]
    public float Min;

    [BoxGroup("Dynamic Range")]
    public float Max = 100;

    [Range(0, 300)]
    [BoxGroup("Stacked Health"), HideLabel]
    public float StackedHealth = 150;

    [HideLabel, ShowInInspector]
    [ProgressBar(0, 100, ColorGetter = "GetStackedHealthColor", BackgroundColorGetter = "GetStackHealthBackgroundColor", DrawValueLabel = false)]
    [BoxGroup("Stacked Health")]
    private float StackedHealthProgressBar {
        get { return this.StackedHealth % 100.01f; }
    }

    private Color GetHealthBarColor(float value) {
        return Color.Lerp(Color.red, Color.green, Mathf.Pow(value / 100f, 2));
    }

    private Color GetStackedHealthColor() {
        return
            this.StackedHealth > 200 ? Color.white :
            this.StackedHealth > 100 ? Color.green :
                                       Color.red;
    }

    private Color GetStackHealthBackgroundColor() {
        return
            this.StackedHealth > 200 ? Color.green :
            this.StackedHealth > 100 ? Color.red :
                                       new Color(0.16f, 0.16f, 0.16f, 1f);
    }
}

2.4 PropertyRange

创建滑块控件,将属性的值设置在指定范围之间。

  • double min/max

    最小 / 大值。

  • string minGetter/maxGetter

    获取最小、大值的方法名称。

image-20240716051249151
// PropertyRangeExampleComponent.cs

using Sirenix.OdinInspector;
using UnityEngine;

public class PropertyRangeExampleComponent : MonoBehaviour
{
    [Range(0, 10)]
    public int Field = 2;

    [InfoBox("Odin's PropertyRange attribute is similar to Unity's Range attribute, but also works on properties.")]
    [ShowInInspector, PropertyRange(0, 10)]
    public int Property { get; set; }

    [InfoBox("You can also reference member for either or both min and max values.")]
    [PropertyRange(0, "Max"), PropertyOrder(3)]
    public int Dynamic = 6;

    [PropertyOrder(4)]
    public int Max = 100;
}

2.5 Unit

为 value 显示单位。

  • Units unit

    显示的单位(枚举)。

  • Units @base

    基础单位。

  • Units display

    在 Inspector 窗口中显示的单位(经过转换)。

  • bool DisplayAsString

    如果为 true,则绘制为只读文本。

  • bool ForceDisplayUnit

    如果为 true,则禁用使用右键单击上下文菜单更改显示单位的选项。

image-20240716051834380
// UnitExampleComponent.cs

using Sirenix.OdinInspector;
using UnityEngine;

#if UNITY_EDITOR // Editor namespaces can only be used in the editor.
using Sirenix.Utilities.Editor;
#endif

public class UnitExampleComponent : MonoBehaviour
{
    // Kilogram unit. Change the display by right-clicking.
    // Try entering '6 lb'.
    [Unit(Units.Kilogram)]
    public float Weight;

    // Meters per second unit, displayed as kilometers per hour in the inspector.
    // Try entering '15 mph'.
    [Unit(Units.MetersPerSecond, Units.KilometersPerHour)]
    public float Speed;

    // Meters, displayed as centimeters for finer control.
    [Unit(Units.Meter, Units.Centimeter)]
    public float Distance;

    // The speed value, shown as miles per hours. Excellent for debugging values in the inspector.
    [ShowInInspector, Unit(Units.MetersPerSecond, Units.MilesPerHour, DisplayAsString = true, ForceDisplayUnit = true)]
    public float SpeedMilesPerHour => Speed;
}

2.6 Wrap

在 Inspector 窗口中设置 value 的值超出指定范围时,将该值循环设置(求余)在指定范围内。

  • double min/max

    最小 / 大值。

image-20240716053113166
// WrapExamplesComponent.cs

using Sirenix.OdinInspector;
using UnityEngine;

public class WrapExamplesComponent : MonoBehaviour
{
    [Wrap(0f, 100f)]
    public int IntWrapFrom0To100;

    [Wrap(0f, 100f)]
    public float FloatWrapFrom0To100;

    [Wrap(0f, 100f)]
    public Vector3 Vector3WrapFrom0To100;

    [Wrap(0f, 360)]
    public float AngleWrap;

    [Wrap(0f, Mathf.PI * 2)]
    public float RadianWrap;
}

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

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

相关文章

深入解析HTTPS与HTTP

在当今数字化时代,网络安全已成为社会各界关注的焦点。随着互联网技术的飞速发展,个人和企业的数据安全问题日益凸显。在此背景下,HTTPS作为一种更加安全的通信协议,逐渐取代了传统的HTTP协议,成为保护网络安全的重要屏…

SAP ABAP性能优化

1.前言 ABAP作为SAP的专用的开发语言,衡量其性能的指标主要有以下两个方面: 响应时间:对于某项特定的业务请求,系统在收到请求后需要多久返回结果 吞吐量:在给定的时间能,系统能够处理的数据量 2. ABAP语…

<Rust><GUI>rust语言GUI库tauri体验:前、后端结合创建一个窗口并修改其样式

前言 本文是rust语言下的GUI库:tauri来创建一个窗口的简单演示,主要说明一下,使用tauri这个库如何创建GUI以及如何添加部件、如何编写逻辑、如何修改风格等,所以,这也是一个专栏,将包括tauri库的多个方面。…

汽车零部件制造企业MES系统主要功能介绍

随着汽车工业的不断发展,汽车零部件制造企业面临着越来越高的生产效率、质量控制和成本管理要求。MES系统作为一种综合信息系统,能够帮助企业实现从订单接收到产品交付的全流程数字化管理,优化资源配置,提高生产效率,确…

AR0132AT 1/3 英寸 CMOS 数字图像传感器(AR0132AT6R、AR0132AT6C)适用于监控和高清视频等多种应用

AR0132AT 1/3 英寸 CMOS 数字图像传感器,带 1280H x 960V 有效像素阵列。它能在线性或高动态模式下捕捉图像,且带有卷帘快门读取。它包含了多种复杂的摄像功能,如自动曝光控制、开窗,以及视频和单帧模式。它适用于低光度和高动态范…

npm 和 yarn 区别:开发者指南

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

orcad导出pdf 缺少title block

在OrCAD中导出PDF时没有Title Block 最后确认问题在这里: 要勾选上Title Block Visible下面的print

Vue3 子组件像父组件传递数据 自定义事件 defineEmits

介绍 很多情况下子组件都需要像父组件去传递一些数据,Vue3和Vue2传递值的写法不太一样。 例子 很常见的一个案例,弹出一个商品对话框,用户选择商品后把商品信息返回给父组件,使用自定义事件去做。 子组件 选择商品对话框 &…

Mamori.xyz:基于机器学习的区块链价值提取系统

Mamori.xyz 是一个基于机器学习的自动化区块链价值提取系统,其开创一种通用路径查找器,该工具可用于检测和防御潜在的未知安全风险,Mamori.xyz 也将其称为“未知的未知”,即智能合约中的零日漏洞和新出现的与区块链相关的软件问题…

学习Python的IDE功能--(一)入门导览

项目视图是主要工具窗口之一。它包含项目目录、SDK 特定的外部库和临时文件。点击带条纹的按钮可以预览演示项目。您也可以按Alt1打开。点击以打开项目视图,展开项目目录以查看项目文件。双击以打开welcome.py。 切换到"学习"工具窗口继续学习本课次。…

vue3表格使用拖拽排序

拖拽排序 实现效果实现步骤拖拽排序功能的完整代码 实现效果 实现步骤 先安装sortable.js库使用的vue文件中引入 import Sortablejs from ‘sortablejs’在进入页面后创建sortable实例在提交后端时可获取到排序后的最新table列表数据 sortable.js文档 拖拽排序功能的完整代码 …

微服务实战系列之玩转Docker(二)

前言 上一篇,博主对Docker的背景、理念和实现路径进行了简单的阐述。作为云原生技术的核心之一,轻量级的容器Docker,受到业界追捧。因为它抛弃了笨重的OS,也不带Data,可以说,能够留下来的都是打仗的“精锐…

【瑞吉外卖 | day07】移动端菜品展示、购物车、下单

文章目录 瑞吉外卖 — day71. 导入用户地址簿相关功能代码1.1 需求分析1.2 数据模型1.3 代码开发 2. 菜品展示2.1 需求分析2.2 代码开发 3. 购物车3.1 需求分析3.2 数据模型3.3 代码开发 4. 下单4.1 需求分析4.2 数据模型4.3 代码开发 瑞吉外卖 — day7 移动端相关业务功能 —…

《绝区零》是一款什么类型的游戏,Mac电脑怎么玩《绝区零》苹果电脑玩游戏怎么样

米哈游的《绝区零》最近在网上爆火呀,不过很多人都想知道mac电脑能不能玩《绝区零》,今天麦麦就给大家介绍一下《绝区零》是一款什么样的游戏,Mac电脑怎么玩《绝区零》。 一、《绝区零》是一款什么样的游戏 《绝区零》是由上海米哈游自主研发…

求立方体面积体积以及判断(c++)

代码&#xff1a; #include<iostream> using namespace std;class Cube { public:void setL(int l){m_L l;}int getL(){return m_L;}void setW(int w){m_W w;}int getW(){return m_W;}void setH(int h){m_H h;}int getH(){return m_H;}int calculateS(){return 2 * (…

使用jenkins进行自动化部署

记录一下查看的文档和遇到的坑 什么是jenkins Jenkins是一个开源的持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;工具&#xff0c;主要用于自动化软件开发的各个阶段&#xff0c;包括构建、测试、部署等。 Jenkins基于Java开发&#xff0c;支持与…

【数据集处理工具】将COCO格式数据集的val.json与tett.json文件合并为一个json

合并COCO数据集JSON文件的Python脚本 1、目的2、功能概述3、使用方法4、注意事项5、 代码部分 1、目的 此Python脚本旨在帮助用户合并多个COCO格式的数据集JSON文件&#xff0c;特别适用于将验证集和测试集的标注数据整合到单一文件中。 该脚本假设各个数据集的类别信息&…

OpenCV中的GrabCut图像分割算法的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 GrabCut 算法是一种用于图像分割的技术&#xff0c;由 Carsten Rother、Vladimir Kolmogorov 和 Andrew Blake 在 2004 年 SIGGRAPH 会议的论文《…

Pr 2024下载安装,Adobe Premiere pro2024剪辑软件下载合集获取

Premiere Pro 2023中文版简称Pr&#xff0c;pr2023是一款视频编辑软件。 pr 2023不仅可以帮助用户对各种视频进行剪辑、旋转、分割、合并、字幕添加、背景音乐等基础的处理&#xff0c;还能帮助用户进行视频颜色校正、颜色分级、稳定镜头、调整层、更改片段的持续时间和速度、效…

软件架构之基于中间件开发

软件架构之基于中间件开发 第 15 章&#xff1a;基于中间件的开发15.1 中间件技术15.1.1 中间件的概念15.1.2 中间件的分类 15.1.3 中间件产品介绍15.2 应用服务器技术15.2.1 应用服务器的概念15.2.2 主要的应用服务器15.3.1 表示层15.3.2 应用服务层 15.4 .NET15.4.1 .NET 平台…