使用Flags
在我们使用这种方式添加选项时,我们的方法调用将逐渐变得混乱。我们可以添加多个name字段来描述的包装方法来解决,但是那样将会使得我们的脚本变得臃肿且实现起来不灵活。一种可以替代的选择是利用可选标志。
1
2
3
4
5
6
7
|
using UnityEditor;
using UnityEngine;
using System;
[Flags]
public enum EditorListOption {
}
|
现在我们添加这两个我们已经拥有的选项。我们也添加了一个选项用于标记当我们什么也不想要,使用默认选择时的情况。默认情况下,会显示列表标签和它的大小。我们将通过逻辑或运算符(|)将两个选项联系起来。
1
2
3
4
5
6
7
|
[Flags]
public enum EditorListOption {
None = 0,
ListSize = 1,
ListLabel = 2,
Default = ListSize | ListLabel
}
|
现在Show ()方法中的布尔参数能够用一个选项参数代替。借助逻辑与(&)运算符的帮助,我们将分离出这些独立的选项,并将它们存储在本地变量中使得事情变得简单。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
public static void Show (SerializedProperty list, EditorListOption options = EditorListOption.Default) {
bool
showListLabel = (options & EditorListOption.ListLabel) != 0,
showListSize = (options & EditorListOption.ListSize) != 0;
if (showListLabel) {
EditorGUILayout.PropertyField(list);
EditorGUI.indentLevel += 1;
}
if (!showListLabel || list.isExpanded) {
if (showListSize) {
EditorGUILayout.PropertyField(list.FindPropertyRelative( "Array.size" ));
}
for (int i = 0; i < list.arraySize; i++) {
EditorGUILayout.PropertyField(list.GetArrayElementAtIndex(i));
}
}
if (showListLabel) {
EditorGUI.indentLevel -= 1;
}
}
|
建议使用电驴(eMule)下载分享的资源。
说明:本教程来源互联网或网友分享或出版商宣传分享,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
1/10 1 2 3 4 5 6 下一页 尾页 |