Unity ReorderableList 可重新排序的列表框使用
来源:互联网 发布:电脑桌面文件分类软件 编辑:程序博客网 时间:2024/06/08 08:04
可重新排序的列表框
Unity 编辑器内部命名空间有个类 ReorderableList,可以实现通过拖曳来达到列表元素的重新排序,效果如下图所示:
)
基本使用
创建一个测试工程,新建一个脚本文件TestList.cs
,代码如下:
using UnityEngine;using System.Collections.Generic;public class TestList : MonoBehaviour{ public List<string> names = new List<string>();}
新建一个编辑器脚本文件TestListInspector.cs
,代码如下:
using UnityEditor;using UnityEditorInternal;using UnityEngine;[CustomEditor(typeof(TestList))]public class TestListInspector : Editor { private ReorderableList m_NameList; private void OnEnable() { m_NameList = new ReorderableList(serializedObject, serializedObject.FindProperty("names"), true, true, true, true); } public override void OnInspectorGUI() { serializedObject.Update(); m_NameList.DoLayoutList(); serializedObject.ApplyModifiedProperties(); }}
附加脚本到物体上,检视器效果如下图所示:
可以看到列表元素并没有被绘制出来,也不能进行改动。绘制列表元素需要我们自定义如何绘制,在OnEnable
函数里面,添加如下代码:
m_NameList.drawElementCallback = DrawNameElement;
添加如下函数:
private void DrawNameElement(Rect rect, int index, bool selected, bool focused) { SerializedProperty itemData = m_NameList.serializedProperty.GetArrayElementAtIndex(index); rect.y += 2; rect.height = EditorGUIUtility.singleLineHeight; EditorGUI.PropertyField(rect, itemData, GUIContent.none); }
效果如下图所示:
列表表头显示 Serialized Property,我们将其改成所想要提示的内容。在OnEnable
函数里面,添加如下代码:
m_NameList.drawHeaderCallback = (Rect rect) =>{ GUI.Label(rect, "Names");};
效果如下图所示:
进阶使用
移除时的警告
在删除元素时,弹出警告对话框,确定之后才能真正删除。在OnEnable
函数里面,添加如下代码:
m_NameList.onRemoveCallback = (ReorderableList list) =>{ if (EditorUtility.DisplayDialog("警告", "是否真的要删除这个名称?", "是", "否")) { ReorderableList.defaultBehaviours.DoRemoveButton(list); }};
删除功能调用的是ReorderableList
默认行为里的删除功能。效果如下图所示:
更改添加时的默认值
每次添加新元素时,总是会复制最后一个元素。这里更改其规则,在OnEnable
函数里面,添加如下代码:
m_NameList.onAddCallback = (ReorderableList list) =>{ if (list.serializedProperty != null) { list.serializedProperty.arraySize++; list.index = list.serializedProperty.arraySize - 1; SerializedProperty itemData = list.serializedProperty.GetArrayElementAtIndex(list.index); itemData.stringValue = "默认值"; } else { ReorderableList.defaultBehaviours.DoAddButton(list); }};
效果如下图所示:
API 文档
构造函数
ReorderableList( SerializedObject serializedObject, SerializedProperty elements, bool draggable, bool displayHeader, bool displayAddButton, bool displayRemoveButton)
变量
公有方法
委托
扩展资料
- Unity: make your lists functional with ReorderableList http://va.lent.in/unity-make-your-lists-functional-with-reorderablelist/
1 0
- Unity ReorderableList 可重新排序的列表框使用
- Unity编辑器拓展之一:ReorderableList可重新排序的列表框(简单使用)
- Unity编辑器拓展之二:ReorderableList可重新排序的列表框(复杂使用)
- 【unity拓展】使列表支持拖动排序(Reorderablelist)
- ReorderableList
- Unity Editor 编辑器扩展 十一 Inspector可排序列表
- 可商业使用的免费软件推荐列表
- 使用s:optiontransferselect来生成可移动列表项的下拉列表框
- 寻找最快的Java可随机访问排序列表
- 在Unity中创建可使用快捷键切换输入框的功能
- 可供输入的网页列表框
- 可输入的下拉框列表
- 可输入的下拉列表框
- 可输入的下拉列表框-1
- 使用javascript实现列表框的选项排序
- struts2使用可生成交互的两个列表框的optiontransferselect标签
- Android中可展开的列表组件(ExpandableListView)的使用
- ExpandableListView可扩展的下拉列表简单的使用
- POJ1679-The Unique MST
- 我的iOS学习历程 - OC第八天
- 高效开发 Android App 的 10 个建议
- NOIP2014部分题解
- iOS--错误集锦--UI控件不显示原因之一
- Unity ReorderableList 可重新排序的列表框使用
- 利用小波融合对由聚焦失败导致的图像模糊进行修复
- 检测一个数组能否表示二叉搜索树(BST)的先序遍历
- GCD介绍与总结
- 黑马程序员_简易版IE浏览器 2.0
- redis+Keepalived实现Redis高可用性(非sentinel)
- OutlineOnePassVF
- 在eclipse中使用struts的regex校验器不起作用
- win 10 下Genymotion安装VirtualBox提示失败的问题