2024-07-16 Unity插件 Odin Inspector5 —— Conditional Attributes

文章目录

  • 1 说明
  • 2 条件特性
    • 2.1 DisableIf / EnableIf
    • 2.2 DisableIn / EnableIn / ShowIn / HideIn
    • 2.3 DisableInEditorMode / HideInEditorMode
    • 2.4 DisableInInlineEditors / ShowInInlineEditors
    • 2.5 DisableInPlayMode / HideInPlayMode
    • 2.6 ShowIf / HideIf
    • 2.7 ShowIfGroup / HideIfGroup

1 说明

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

2 条件特性

2.1 DisableIf / EnableIf

如果解析的字符串计算结果为指定值,则禁用 / 启用 Inspector 窗口中的属性更改。

  • string condition

    检查值条件的解析字符串,如成员名称、表达式等。

  • object optionalValue

    要检查的值。

image-20240715225210588
// DisableIfExamplesComponent.csusing Sirenix.OdinInspector;
using UnityEngine;public class DisableIfExamplesComponent : MonoBehaviour
{public UnityEngine.Object SomeObject;[EnumToggleButtons]public InfoMessageType SomeEnum;public bool IsToggled;[DisableIf("SomeEnum", InfoMessageType.Info)]public Vector2 Info;[DisableIf("SomeEnum", InfoMessageType.Error)]public Vector2 Error;[DisableIf("SomeEnum", InfoMessageType.Warning)]public Vector2 Warning;[DisableIf("IsToggled")]public int DisableIfToggled;[DisableIf("SomeObject")]public Vector3 EnabledWhenNull;[DisableIf("@this.IsToggled && this.SomeObject != null || this.SomeEnum == InfoMessageType.Error")]public int DisableWithExpression;
}

2.2 DisableIn / EnableIn / ShowIn / HideIn

当该对象所在的脚本挂载在何种预制体上,其修饰的对象禁止 / 允许在 Inspector 窗口中的更改 / 显示。

  • PrefabKind prefabKind

    预制体的种类。

    1. None

      所有预制体,都不满足条件。

    2. InstanceInScene

      场景中的预制体实例。

    3. InstanceInPrefab

      嵌套在其他预制体中的预制件实例。

    4. Regular

      常规预制体。

    5. Variant

      预制体资产。

    6. NonPrefabInstance

      非预制体或场景中的游戏对象实例。

    7. PrefabInstance = InstanceInPrefab | InstanceInScene

      常规预制体的实例,以及场景中或嵌套在其他预制体中的预制体。

    8. PrefabAsset = Variant | Regular

      常规预制体和预制体资产。

    9. PrefabInstanceAndNonPrefabInstance = PrefabInstance | NonPrefabInstance

      预制体以及非预制实例。

    10. All = PrefabInstanceAndNonPrefabInstance | PrefabAsset

      所有预制体。

image-20240715231309872
using System.Collections;
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;public class Test : MonoBehaviour
{[DisableIn(PrefabKind.PrefabAsset)]public int i;
}

2.3 DisableInEditorMode / HideInEditorMode

在不处于播放模式时禁用 / 隐藏对象。只希望在播放模式下可编辑 / 显示时,可使用此选项。

image-20240715233626355
// DisableInEditorModeExamplesComponent.csusing Sirenix.OdinInspector;
using UnityEngine;public class DisableInEditorModeExamplesComponent : MonoBehaviour
{[Title("Disabled in edit mode")][DisableInEditorMode]public GameObject A;[DisableInEditorMode]public Material B;
}

2.4 DisableInInlineEditors / ShowInInlineEditors

如果对象被 InlineEditor 特性绘制,则该对象在 Inspector 窗口中禁用更改 / 显示。

补充 InlineEditor 特性:将继承 UnityEngine.Object 的类(如 ScriptableObject)的详细信息显示在 Inspector 窗口。

image-20240715234820556

​ 数据结构类:

using UnityEngine;#nullable disable
namespace Sirenix.OdinInspector.Editor.Examples
{public class DisabledInInlineEditorScriptableObject : ScriptableObject{public string AlwaysEnabled;[DisableInInlineEditors]public string DisabledInInlineEditor;}
}

​ 挂载的脚本:

// DisableInInlineEditorExampleComponent.csusing Sirenix.OdinInspector;
using UnityEngine;#if UNITY_EDITOR // Editor namespaces can only be used in the editor.
using Sirenix.OdinInspector.Editor.Examples;
#endifpublic class DisableInInlineEditorExampleComponent : MonoBehaviour
{
#if UNITY_EDITOR // DisabledInInlineEditorScriptableObject is an example type and only exists in the editor[InfoBox("Click the pen icon to open a new inspector window for the InlineObject too see the difference this attribute makes.")][InlineEditor(Expanded = true)]public DisabledInInlineEditorScriptableObject InlineObject;
#endif#if UNITY_EDITOR // Editor-related code must be excluded from builds[OnInspectorInit]private void CreateData() {InlineObject = ExampleHelper.GetScriptableObject<DisabledInInlineEditorScriptableObject>("Inline Object");}[OnInspectorDispose]private void CleanupData() {if (InlineObject != null) Object.DestroyImmediate(InlineObject);}
#endif
}

2.5 DisableInPlayMode / HideInPlayMode

在处于播放模式时禁用 / 隐藏对象。只希望在编辑模式下可编辑 / 显示时,可使用此选项。

image-20240715235402700
// DisableInPlayModeExamplesComponent.csusing Sirenix.OdinInspector;
using UnityEngine;public class DisableInPlayModeExamplesComponent : MonoBehaviour
{[Title("Disabled in play mode")][DisableInPlayMode]public int A;[DisableInPlayMode]public Material B;
}

2.6 ShowIf / HideIf

如果解析的字符串计算结果为指定值,则在 Inspector 窗口中显示 / 隐藏该对象。

  • string condition

    检查值条件的解析字符串,如成员名称、表达式等。

  • object optionalValue

    要检查的值。

  • bool animate = true

    状态改变时是否启用滑入和滑出动画显示。

image-20240715235942366
// ShowAndHideIfExamplesComponent.cs
using Sirenix.OdinInspector;
using UnityEngine;public class ShowAndHideIfExamplesComponent : MonoBehaviour
{// Note that you can also reference methods and properties or use @expressions. You are not limited to fields.public UnityEngine.Object SomeObject;[EnumToggleButtons]public InfoMessageType SomeEnum;public bool IsToggled;[ShowIf("SomeEnum", InfoMessageType.Info)]public Vector3 Info;[ShowIf("SomeEnum", InfoMessageType.Warning)]public Vector2 Warning;[ShowIf("SomeEnum", InfoMessageType.Error)]public Vector3 Error;[ShowIf("IsToggled")]public Vector2 VisibleWhenToggled;[HideIf("IsToggled")]public Vector3 HiddenWhenToggled;[HideIf("SomeObject")]public Vector3 ShowWhenNull;[ShowIf("SomeObject")]public Vector3 HideWhenNull;[EnableIf("@this.IsToggled && this.SomeObject != null || this.SomeEnum == InfoMessageType.Error")]public int ShowWithExpression;
}

2.7 ShowIfGroup / HideIfGroup

满足某个条件,则显示 / 隐藏指定组。

  • string path

    指定组的路径。

  • object value

    与路径末尾的标签重名的属性等于该值时,则满足条件。

  • bool animate = true

    状态改变时是否启用滑入和滑出动画显示。

image-20240716000503730
// HideIfGroupExampleComponent.csusing Sirenix.OdinInspector;
using UnityEngine;public class HideIfGroupExampleComponent : MonoBehaviour
{public bool Toggle = true;[HideIfGroup("Toggle")][BoxGroup("Toggle/Shown Box")]public int A, B;[BoxGroup("Box")]public InfoMessageType EnumField = InfoMessageType.Info;[BoxGroup("Box")][HideIfGroup("Box/Toggle")]public Vector3 X, Y;// Like the regular If-attributes, HideIfGroup also supports specifying values.// You can also chain multiple HideIfGroup attributes together for more complex behaviour.[HideIfGroup("Box/Toggle/EnumField", Value = InfoMessageType.Info)][BoxGroup("Box/Toggle/EnumField/Border", ShowLabel = false)]public string Name;[BoxGroup("Box/Toggle/EnumField/Border")]public Vector3 Vector;// HideIfGroup will by default use the name of the group,// but you can also use the MemberName property to override this.[HideIfGroup("RectGroup", Condition = "Toggle")]public Rect Rect;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙架构之AOP

零、主要内容 AOP 简介ArkTs AOP 实现原理 JS 原型链AOP实现原理 AOP的应用场景 统计类&#xff1a; 方法调用次数统计、方法时长统计防御式编程&#xff1a;参数校验代理模式实现 AOP的注意事项 一、AOP简介 对于Android、Java Web 开发者来说&#xff0c; AOP编程思想并不…

java智慧工地云平台源码,基于BIM+AI智能大数据中心和云平台的智慧工地监管平台

智慧工地云平台源码&#xff0c;智慧工地系统源码&#xff0c;工程管理系统APP源码&#xff0c; “智慧工地”基于BIM&#xff08;建筑信息模型&#xff09;AI&#xff08;人工智能&#xff09;智能大数据中心和云平台&#xff0c;围绕建筑工程项目全生命周期&#xff0c;集成安…

Linux下如何安装配置Graylog日志管理工具

Graylog是一个开源的日志管理工具&#xff0c;可以帮助我们收集、存储和分析大量的日志数据。它提供了强大的搜索、过滤和可视化功能&#xff0c;可以帮助我们轻松地监控系统和应用程序的运行情况。 在Linux系统下安装和配置Graylog主要包括以下几个步骤&#xff1a; 准备安装…

Scratch编程乐园:108课打造小小编程大师

《Scratch少儿趣味编程108例&#xff08;全视频微课版&#xff09;》以Scratch 3.6版本为基础&#xff0c;通过108个案例详细介绍了运用Scratch软件制作动画、游戏等趣味作品的方法&#xff0c;充分培养孩子的想象力和创造力。本书共分为9章&#xff0c;第1章概述Scratch下载、…

ArrayList.subList的踩坑

需求描述&#xff1a;跳过list中的第一个元素&#xff0c;获取list中的其他元素 原始代码如下&#xff1a; List<FddxxEnterpriseVerify> companyList fddxxEnterpriseVerifyMapper.selectList(companyQueryWrapper);log.info("获取多个法大大公司数据量为&#…

OMS 2.0至3.0升级项目成功案例:红袖女装

近日&#xff0c;巨益科技成功助力女装品牌红袖完成OMS 3.0升级&#xff0c;并顺利通过项目验收。此次升级通过优化系统架构、提高数据处理能力和实现多系统集成&#xff0c;红袖品牌显著提升了订单处理速度、库存管理精度和客户满意度&#xff0c;实现了运营效率和服务质量的全…

基于Python+Flask+SQLite的豆瓣电影可视化系统

FlaskMySQLEcharts 基于PythonFlaskSQLite的豆瓣电影可视化系统 Echarts 不支持登录注册&#xff0c;并且信息存储在数据库中 不含爬虫代码&#xff0c;或爬虫代码已失效 简介 基于PythonFlaskMySQL的豆瓣电影可视化系统&#xff0c;采用Echart构建图表&#xff0c;支持自定…

python 算法题之,统计不存在的值的累加和

s list(map(int, input().split())) k int(input()) s.sort() print(s)if s:m 0 # 统计找到的不存在的数的个数res 0 # 累值t 1 # 当前数i 0 # 列表中当前下标while True:if i < len(s) and s[i] t: # 如果当前数存在i 1else: # 当前数不存在res (res t) % …

第九课:服务器发布(静态nat配置)

一个要用到静态NAT的场景&#xff0c;当内网有一台服务器server1&#xff0c;假如一个用户在外网&#xff0c;从外网访问内网怎么访问呢&#xff0c;无法访问&#xff0c;这是因为外网没办法直接访问内网&#xff0c;这时候需要给服务器做一个静态NAT。 静态NAT指的是给服务器…

cpp 强制转换

一、static_cast static_cast 是 C 中的一个类型转换操作符&#xff0c;用于在类的层次结构中进行安全的向上转换&#xff08;从派生类到基类&#xff09;或进行不需要运行时类型检查的转换。它主要用于基本数据类型之间的转换、对象指针或引用的向上转换&#xff08;即从派生…

AI聊天可能涉黄?用户该如何对待AI聊天

AI伴侣是生成式大模型发展的产物&#xff0c;它是一个聊天机器人&#xff0c;能够随叫随到&#xff0c;提供情绪价值&#xff0c;还能发腿照和腹肌照。它可以是对现实或小说中某个人物的角色扮演&#xff0c;也可以是凭空创造出来的一个形象&#xff0c;总之不是真人。但因为接…

【学习】美国虚拟信用卡申请流程

WildCard 官方网址&#xff1a;https://bewildcard.com/i/PEACEFUL &#xff08;使用邀请码“PEACEFUL”可以享受开卡88 折优惠&#xff0c;注册时提示填写邀请码就可以填写&#xff09;

某服务商云服务器使用体验

雨云 雨云云服务商以其免费MC面板服务器、抗DDoS攻击服务和免费CDN服务三大核心优势&#xff0c;成为了众多企业和个人站长的首选云服务提供商。官网&#xff1a;https://app.rainyun.com 莫名的好感&#x1f603; 登录环节 在阿里&#xff0c;腾讯的官网二次进入时大多时…

深度学习驱动智能超材料设计与应用

在深度学习与超材料融合的背景下&#xff0c;不仅提高了设计的效率和质量&#xff0c;还为实现定制化和精准化的治疗提供了可能&#xff0c;展现了在材料科学领域的巨大潜力。深度学习可以帮助实现超材料结构参数的优化、电磁响应的预测、拓扑结构的自动设计、相位的预测及结构…

Hive 函数

分类 Hive 的函数分为两大类&#xff1a;内置函数&#xff08;Built-in-Functions&#xff09;、用户自定义函数&#xff08;User-Defined-Functions&#xff09;&#xff1b;内置函数可分为&#xff1a;数值类型函数、日期类型函数、字符串类型函数、集合函数等&#xff1b;用…

Redis-基础概念

目录 概念 Redis是什么 Redis 和 MySQL 的区别&#xff1f; Redis单线程有什么极端场景的瓶颈 Redis为什么快? 为什么Redis是单线程? Redis是单线程还是多线程 Redis为什么选择单线程做核心处理 Redis6.0之后引入了多线程&#xff0c;你知道为什么吗? 瓶颈是内存和I…

php相关

php相关 ​ 借鉴了小迪安全以及各位大佬的博客&#xff0c;如果一切顺利&#xff0c;会不定期更新。 如果感觉不妥&#xff0c;可以私信删除。 默认有php基础。 文章目录 php相关1. php 缺陷函数1. 与2. MD53. intval()4. preg_match() 2. php特性1. php字符串解析特性2. 杂…

用switch实现多分支选择结构

一 例子引入 #include<stdio.h> int main&#xff08;) {char grade&#xff1b;scanf("%c"&#xff0c;&grade);printf("Your score:");switch (grade){case A: printf("85~100\n"); break;case B: printf("70~84\n");br…

深度学习落地实战:识别火车票信息

前言 大家好&#xff0c;我是机长 本专栏将持续收集整理市场上深度学习的相关项目&#xff0c;旨在为准备从事深度学习工作或相关科研活动的伙伴&#xff0c;储备、提升更多的实际开发经验&#xff0c;每个项目实例都可作为实际开发项目写入简历&#xff0c;且都附带完整的代…

嵌入式人工智能(9-基于树莓派4B的PWM-LED呼吸灯)

1、PWM简介 (1)、什么是PWM 脉冲宽度调制(PWM)&#xff0c;是英文“Pulse Width Modulation”的缩写&#xff0c;简称脉宽调制&#xff0c;是在具有惯性的系统中利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在从测量、通信到功率控制…