AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > Unity3D

【Unity C#编程】自定义编辑器(三)

51自学网 2014-05-24 http://www.51zixue.net

使用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)下载分享的资源。

说明
:本教程来源互联网或网友分享或出版商宣传分享,仅为学习研究或媒体推广,51zixue.net不保证资料的完整性。
 
上一篇:【Unity C#编程】跑动游戏(1):游戏设计  下一篇:【Unity C#编程】自定义编辑器(二)