【发布时间】:2018-03-01 20:23:24
【问题描述】:
我想为 Unity 创建一个自定义编辑器,其中包含列表中的列表,并允许动态编辑大小并在第二个列表中使用弹出窗口。
这里有几个我想要的例子:
问题是我不能改变第二个列表的大小,因为它改变了第二个列表中所有元素的大小,所以我不能为列表的每个元素设置不同的大小。
我对弹出窗口也有同样的问题,所选项目对于所有弹出窗口都是相同的(如您在第二张图片中所见)。
如何在不更改其他项目的情况下保存每个选定项目的每个维度或弹出窗口?
这是我的代码:
ScriptableObject 类
public class MyClass : ScriptableObject {
public class MyInsideClass
{
public List<string> data;
public MyInsideClass()
{
data = new List<string>();
}
}
public List<MyInsideClass> allData;
}
自定义编辑器(数据库只有弹出列表名称)
[CustomEditor(typeof(MyClass))]
public class TempEdior : Editor
{
int numberOfCombinations = 0;
int numberOfDataForCombination = 0;
int selected = 0;
public override void OnInspectorGUI()
{
GUILayout.BeginHorizontal();
GUILayout.Label("Number of combinations:");
numberOfCombinations = EditorGUILayout.IntField(numberOfCombinations);
GUILayout.EndHorizontal();
for (int i = 0; i < numberOfCombinations; i++)
{
GUILayout.BeginHorizontal();
GUILayout.Label("Combination " + (i + 1) + " - number of data:");
numberOfDataForCombination = EditorGUILayout.IntField(numberOfDataForCombination);
GUILayout.EndHorizontal();
for (int j = 0; j < numberOfDataForCombination; j++)
{
Rect rect = EditorGUILayout.GetControlRect();
selected = EditorGUI.Popup(new Rect(rect.x + 63, rect.y, 100, EditorGUIUtility.singleLineHeight), selected, Database.Instance.slotTypes.ToArray());
}
}
}
}
【问题讨论】:
-
看需求 哎呀。我根本不想编写那个自定义检查器脚本。但是要记住的重要一点:检查器显示的任何数据都必须在您编辑的对象中。您不能在检查器脚本本身中“存储”数据。
-
是的,我知道我必须编写另一部分代码来将所有数据保存在可编写脚本的对象中,并且创建或删除列表大小的新元素将保存在 scriptablrObject 中。但这只是编辑器使文本更简单的部分,我知道如何存储目标对象或序列化对象。
标签: c# unity3d unity-editor