Odin Inspector 系列教程 --- List Drawer Settings Attribute

2024-02-09 21:58

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

List Drawer Settings Attribute 自定义数组或者列表绘制方式

Odin已经重写对应的数组和列表的绘制
7643202-1fd4387236917c53.gif
    [Title("List Basics")][InfoBox("现在可以拖动列表元素来重新排序并逐个删除它们,并且列表具有分页功能(尝试添加大量元素!)您仍然可以从项目视图一次将许多资产拖到列表中—只需将它们拖到列表本身,并将它们插入到您想要添加它们的地方.")]public List<float> FloatList;
将[Range]属性应用于此列表,代替传统的float形式
7643202-b906512fe2affedd.gif
    [InfoBox("将[Range]属性应用于此列表,代替传统的float形式")][Range(0, 1)]public float[] FloatRangeArray;
不同方式的只读方式
7643202-70de46cc2f1044fd.png
    [ListDrawerSettings(IsReadOnly = true)]public int[] ReadOnlyArray1 = new int[] { 1, 2, 3 };[ReadOnly]public int[] ReadOnlyArray2 = new int[] { 1, 2, 3 };
负责数据结构的数组或列表
7643202-a797f45548147a4f.png
    public SomeOtherStruct[] SomeStructList;
自定义page每页的个数
7643202-1e3aff03a3fdefec.gif
    [Title("Advanced List Customization")][InfoBox("Using [ListDrawerSettings], lists can be customized in a wide variety of ways.")][ListDrawerSettings(NumberOfItemsPerPage = 5)]public int[] FiveItemsPerPage;
显示对应元素的索引和指定其元素的标签
7643202-7aea566df3e99438.gif
    [ListDrawerSettings(ShowIndexLabels = true, ListElementLabelName = "SomeString")]public SomeStruct[] IndexLabels;
禁止拖拽item,禁止翻页,禁止显示item个数
7643202-6bf0231c4edeb655.png
    [ListDrawerSettings(DraggableItems = false, Expanded = false, ShowIndexLabels = true, ShowPaging = false, ShowItemCount = false, HideRemoveButton = true)]public int[] MoreListSettings = new int[] { 1, 2, 3 };
【OnBeginListElementGUI】【OnEndListElementGUI】在每个列表元素的前后调用一个函数,并传入对应元素的索引
7643202-eb049dd7b68c0998.gif
    [ListDrawerSettings(OnBeginListElementGUI = "BeginDrawListElement", OnEndListElementGUI = "EndDrawListElement")]public SomeStruct[] InjectListElementGUI;private void BeginDrawListElement(int index){SirenixEditorGUI.BeginBox(this.InjectListElementGUI[index].SomeString);}private void EndDrawListElement(int index){SirenixEditorGUI.EndBox();}
使用它将自定义GUI注入到列表的标题栏中。
7643202-b1b3c8c02c1419e3.png
    [ListDrawerSettings(OnTitleBarGUI = "DrawRefreshButton")]public List<int> CustomButtons;private void DrawRefreshButton(){if (SirenixEditorGUI.ToolbarButton(EditorIcons.Refresh)){Debug.Log(this.CustomButtons.Count.ToString());}}
【CustomAddFunction 】覆盖将对象添加到列表的默认行为。如果引用的成员返回列表类型元素,则将对每个选定对象调用该元素一次。如果引用的方法返回void,那么不管选择了多少对象,它都只会被调用一次。
7643202-d8780945d615008f.gif
    [ListDrawerSettings(CustomAddFunction = "CustomAddFunction")]public List<int> CustomAddBehaviour;private int CustomAddFunction(){return this.CustomAddBehaviour.Count+100;}
完整示例代码
using Sirenix.OdinInspector;
using Sirenix.Utilities.Editor;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ListDrawerSettingsAttributeExample : MonoBehaviour
{[PropertyOrder(int.MinValue), OnInspectorGUI]private void DrawIntroInfoBox(){SirenixEditorGUI.InfoMessageBox("Odin开箱即用,无需检查,即可全面升级检查器中列表和数组的图形.");}[Title("List Basics")][InfoBox("现在可以拖动列表元素来重新排序并逐个删除它们,并且列表具有分页功能(尝试添加大量元素!)您仍然可以从项目视图一次将许多资产拖到列表中—只需将它们拖到列表本身,并将它们插入到您想要添加它们的地方.")]public List<float> FloatList;[InfoBox("将[Range]属性应用于此列表,代替传统的float形式")][Range(0, 1)]public float[] FloatRangeArray;[ListDrawerSettings(IsReadOnly = true)]public int[] ReadOnlyArray1 = new int[] { 1, 2, 3 };[ReadOnly]public int[] ReadOnlyArray2 = new int[] { 1, 2, 3 };public SomeOtherStruct[] SomeStructList;[Title("Advanced List Customization")][InfoBox("Using [ListDrawerSettings], lists can be customized in a wide variety of ways.")][ListDrawerSettings(NumberOfItemsPerPage = 5)]public int[] FiveItemsPerPage;[ListDrawerSettings(ShowIndexLabels = true, ListElementLabelName = "SomeString")]public SomeStruct[] IndexLabels;[ListDrawerSettings(DraggableItems = false, Expanded = false, ShowIndexLabels = true, ShowPaging = false, ShowItemCount = false, HideRemoveButton = true)]public int[] MoreListSettings = new int[] { 1, 2, 3 };[ListDrawerSettings(OnBeginListElementGUI = "BeginDrawListElement", OnEndListElementGUI = "EndDrawListElement")]public SomeStruct[] InjectListElementGUI;private void BeginDrawListElement(int index){SirenixEditorGUI.BeginBox(this.InjectListElementGUI[index].SomeString);}private void EndDrawListElement(int index){SirenixEditorGUI.EndBox();}[ListDrawerSettings(OnTitleBarGUI = "DrawRefreshButton")]public List<int> CustomButtons;private void DrawRefreshButton(){if (SirenixEditorGUI.ToolbarButton(EditorIcons.Refresh)){Debug.Log(this.CustomButtons.Count.ToString());}}[ListDrawerSettings(CustomAddFunction = "CustomAddFunction")]public List<int> CustomAddBehaviour;private int CustomAddFunction(){return this.CustomAddBehaviour.Count+100;}[Serializable]public struct SomeStruct{public string SomeString;public int One;public int Two;public int Three;}[Serializable]public struct SomeOtherStruct{[HorizontalGroup("Split", 55), PropertyOrder(-1)][PreviewField(50, Sirenix.OdinInspector.ObjectFieldAlignment.Left), HideLabel]public UnityEngine.MonoBehaviour SomeObject;[FoldoutGroup("Split/$Name", false)]public int A, B, C;[FoldoutGroup("Split/$Name", false)]public int Two;[FoldoutGroup("Split/$Name", false)]public int Three;private string Name { get { return this.SomeObject ? this.SomeObject.name : "Null"; } }}
}

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

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



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

相关文章

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

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

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

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

JavaScript装饰器从基础到实战教程

《JavaScript装饰器从基础到实战教程》装饰器是js中一种声明式语法特性,用于在不修改原始代码的情况下,动态扩展类、方法、属性或参数的行为,本文将从基础概念入手,逐步讲解装饰器的类型、用法、进阶... 目录一、装饰器基础概念1.1 什么是装饰器?1.2 装饰器的语法1.3 装饰器的执行时机二、装饰器的

MySQL 5.7彻底卸载与重新安装保姆级教程(附常见问题解决)

《MySQL5.7彻底卸载与重新安装保姆级教程(附常见问题解决)》:本文主要介绍MySQL5.7彻底卸载与重新安装保姆级教程的相关资料,步骤包括停止服务、卸载程序、删除文件和注册表项、清理环境... 目录一、彻底卸载旧版本mysql(核心步骤)二、MySQL 5.7重新安装与配置三、常见问题解决总结废话不多

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.