Odin Inspector 系列教程 --- Validate Input Attribute

2024-02-09 22:08

本文主要是介绍Odin Inspector 系列教程 --- Validate Input Attribute,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Validate Input Attribute特性:用于任何属性,并允自定义检查器,灵活实现多种监测规则。使用此选项可强制执行正确的值(提供对应的返回值)。

7643202-889cdd4afc6700a4.png
常规写法,实参输入一个方法的名称,一个对应的消息
7643202-395279a3d846b35b.png
    [ValidateInput("MustBeNull", "这个字段应该为空。")]public MyScripty DefaultMessage;private bool MustBeNull(MyScripty scripty){return scripty == null;}
也可以使用$特殊标识符引用一个字段动态显示提示信息,而且也可以明确指出需要提示信息的类型
7643202-66b92554374b87db.png
    [ReadOnly]public string dynamicMessage = "这个物体不应该为空!";[ValidateInput("CheckGameObject", "$dynamicMessage", InfoMessageType.None)]public GameObject targetObj_None = null;[ValidateInput("CheckGameObject", "$dynamicMessage", InfoMessageType.Info)]public GameObject targetObj_Info = null;[ValidateInput("CheckGameObject", "$dynamicMessage", InfoMessageType.Warning)]public GameObject targetObj_Warning = null;[ValidateInput("CheckGameObject", "$dynamicMessage", InfoMessageType.Error)]public GameObject targetObj_Error = null;private bool CheckGameObject(GameObject tempObj){return tempObj != null;}

当然也可以这么用

7643202-c1299f3081268764.gif
    [ValidateInput("IfNullIsFalse", "$Message", InfoMessageType.Warning)]public string Message = "Dynamic ValidateInput message";private bool IfNullIsFalse(string value){return string.IsNullOrEmpty(value);}
也可以覆盖默认的提示消息和消息类型
7643202-9e609574cdbef4f9.gif
 [ValidateInput("HasMeshRendererDynamicMessage", "对应的函数中已经有消息,所以这个默认消息已经没用")]public GameObject DynamicMessage;private bool HasMeshRendererDynamicMessage(GameObject gameObject, ref string errorMessage){if (gameObject == null) return true;if (gameObject.GetComponentInChildren<MeshRenderer>() == null){errorMessage = "\"" + gameObject.name + "\" 这玩应必须有一个 MeshRenderer 组件";//如果设置消息,则默认消息会被覆盖return false;}return true;}[ValidateInput("HasMeshRendererDynamicMessageAndType", "对应的函数中已经有消息和类型,所以这个默认消息和类型已经没用")]public GameObject DynamicMessageAndType;[InfoBox("Change GameObject value to update message type", InfoMessageType.Info)]public InfoMessageType MessageType;private bool HasMeshRendererDynamicMessageAndType(GameObject gameObject, ref string errorMessage, ref InfoMessageType? messageType){if (gameObject == null) return true;if (gameObject.GetComponentInChildren<MeshRenderer>() == null){errorMessage = "\"" + gameObject.name + "\" 要有一个 MeshRenderer 组件";//如果设置消息,则默认消息会被覆盖messageType = this.MessageType;//如果设置消息类型,则默认消息类型会被覆盖return false;}return true;}
完整示例代码
using Sirenix.OdinInspector;
using UnityEngine;public class ValidateInputAttributeExample : MonoBehaviour
{[ValidateInput("MustBeNull", "这个字段应该为空。")]public MyScripty DefaultMessage;private bool MustBeNull(MyScripty scripty){return scripty == null;}[ReadOnly]public string dynamicMessage = "这个物体不应该为空!";[ValidateInput("CheckGameObject", "$dynamicMessage", InfoMessageType.None)]public GameObject targetObj_None = null;[ValidateInput("CheckGameObject", "$dynamicMessage", InfoMessageType.Info)]public GameObject targetObj_Info = null;[ValidateInput("CheckGameObject", "$dynamicMessage", InfoMessageType.Warning)]public GameObject targetObj_Warning = null;[ValidateInput("CheckGameObject", "$dynamicMessage", InfoMessageType.Error)]public GameObject targetObj_Error = null;private bool CheckGameObject(GameObject tempObj){return tempObj != null;}[ValidateInput("IfNullIsFalse", "$Message", InfoMessageType.Warning)]public string Message = "Dynamic ValidateInput message";private bool IfNullIsFalse(string value){return string.IsNullOrEmpty(value);}[ValidateInput("HasMeshRendererDynamicMessage", "对应的函数中已经有消息,所以这个默认消息已经没用")]public GameObject DynamicMessage;private bool HasMeshRendererDynamicMessage(GameObject gameObject, ref string errorMessage){if (gameObject == null) return true;if (gameObject.GetComponentInChildren<MeshRenderer>() == null){errorMessage = "\"" + gameObject.name + "\" 这玩应必须有一个 MeshRenderer 组件";//如果设置消息,则默认消息会被覆盖return false;}return true;}[ValidateInput("HasMeshRendererDynamicMessageAndType", "对应的函数中已经有消息和类型,所以这个默认消息和类型已经没用")]public GameObject DynamicMessageAndType;[InfoBox("Change GameObject value to update message type", InfoMessageType.Info)]public InfoMessageType MessageType;private bool HasMeshRendererDynamicMessageAndType(GameObject gameObject, ref string errorMessage, ref InfoMessageType? messageType){if (gameObject == null) return true;if (gameObject.GetComponentInChildren<MeshRenderer>() == null){errorMessage = "\"" + gameObject.name + "\" 要有一个 MeshRenderer 组件";//如果设置消息,则默认消息会被覆盖messageType = this.MessageType;//如果设置消息类型,则默认消息类型会被覆盖return false;}return true;}private bool HasMeshRendererDefaultMessage(GameObject gameObject){if (gameObject == null) return true;return gameObject.GetComponentInChildren<MeshRenderer>() != null;}
}

更多教程内容详见:革命性Unity 编辑器扩展工具 --- Odin Inspector 系列教程

这篇关于Odin Inspector 系列教程 --- Validate Input Attribute的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695394

相关文章

Python中Tkinter GUI编程详细教程

《Python中TkinterGUI编程详细教程》Tkinter作为Python编程语言中构建GUI的一个重要组件,其教程对于任何希望将Python应用到实际编程中的开发者来说都是宝贵的资源,这篇文... 目录前言1. Tkinter 简介2. 第一个 Tkinter 程序3. 窗口和基础组件3.1 创建窗

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

input的accept属性让文件上传安全高效

《input的accept属性让文件上传安全高效》文章介绍了HTML的input文件上传`accept`属性在文件上传校验中的重要性和优势,通过使用`accept`属性,可以减少前端JavaScrip... 目录前言那个悄悄毁掉你上传体验的“常见写法”改变一切的 html 小特性:accept真正的魔法:让

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

Spring IOC核心原理详解与运用实战教程

《SpringIOC核心原理详解与运用实战教程》本文详细解析了SpringIOC容器的核心原理,包括BeanFactory体系、依赖注入机制、循环依赖解决和三级缓存机制,同时,介绍了SpringBo... 目录1. Spring IOC核心原理深度解析1.1 BeanFactory体系与内部结构1.1.1

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

2025最新版Android Studio安装及组件配置教程(SDK、JDK、Gradle)

《2025最新版AndroidStudio安装及组件配置教程(SDK、JDK、Gradle)》:本文主要介绍2025最新版AndroidStudio安装及组件配置(SDK、JDK、Gradle... 目录原生 android 简介Android Studio必备组件一、Android Studio安装二、A

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2