Unity 自定义编辑器 GUI
Unity Custom Editor GUI
我在编辑器中创建新值后在字段中添加新值时遇到问题,它们不断返回,如果我输入新值,它将显示第一个值。谁能给我一段代码,我如何添加将自动保存的值。
谢谢!
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
addInteger = GUILayout.Toggle(addInteger, "Integers");
howMuchIntegers = EditorGUILayout.IntField(howMuchIntegers);
intNames = new string[howMuchIntegers];
if (addInteger)
{
if (howMuchIntegers != 0)
{
GUILayout.BeginVertical("box");
for (int i = 0; i < howMuchIntegers; i++)
{
intNames[i] = i.ToString();
intNames[i] = EditorGUILayout.TextField(intNames[i]);
}
GUILayout.BeginVertical("box");
}
}
GUILayout.EndVertical();
GUILayout.EndHorizontal();
我认为您的数据在 2 个地方被覆盖了。
这里,
intNames = new string[howMuchIntegers];
在这里,
intNames[i] = i.ToString();
这是一种解决方案。基本上我只是建议你提取不需要的部分 运行 每秒 60 次,你可以随心所欲地这样做。
bool firstTimeRun = true;
void OnGUI()
{
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
addInteger = GUILayout.Toggle(addInteger, "Integers");
howMuchIntegers = EditorGUILayout.IntField(howMuchIntegers);
if(firstTimeRun)
{
intNames = new string[howMuchIntegers];
if (addInteger)
{
if (howMuchIntegers != 0)
{
GUILayout.BeginVertical("box");
for (int i = 0; i < howMuchIntegers; i++)
{
intNames[i] = i.ToString();
intNames[i] = EditorGUILayout.TextField(intNames[i]);
}
GUILayout.BeginVertical("box");
}
}
firstTimeRun = false;
GUILayout.EndVertical();
GUILayout.EndHorizontal();
}
else
{
if (addInteger)
{
if (howMuchIntegers != 0)
{
GUILayout.BeginVertical("box");
for (int i = 0; i < howMuchIntegers; i++)
{
intNames[i] = EditorGUILayout.TextField(intNames[i]);
}
GUILayout.BeginVertical("box");
}
}
GUILayout.EndVertical();
GUILayout.EndHorizontal();
}
}
我在编辑器中创建新值后在字段中添加新值时遇到问题,它们不断返回,如果我输入新值,它将显示第一个值。谁能给我一段代码,我如何添加将自动保存的值。
谢谢!
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
addInteger = GUILayout.Toggle(addInteger, "Integers");
howMuchIntegers = EditorGUILayout.IntField(howMuchIntegers);
intNames = new string[howMuchIntegers];
if (addInteger)
{
if (howMuchIntegers != 0)
{
GUILayout.BeginVertical("box");
for (int i = 0; i < howMuchIntegers; i++)
{
intNames[i] = i.ToString();
intNames[i] = EditorGUILayout.TextField(intNames[i]);
}
GUILayout.BeginVertical("box");
}
}
GUILayout.EndVertical();
GUILayout.EndHorizontal();
我认为您的数据在 2 个地方被覆盖了。
这里,
intNames = new string[howMuchIntegers];
在这里,
intNames[i] = i.ToString();
这是一种解决方案。基本上我只是建议你提取不需要的部分 运行 每秒 60 次,你可以随心所欲地这样做。
bool firstTimeRun = true;
void OnGUI()
{
GUILayout.BeginHorizontal();
GUILayout.BeginVertical();
addInteger = GUILayout.Toggle(addInteger, "Integers");
howMuchIntegers = EditorGUILayout.IntField(howMuchIntegers);
if(firstTimeRun)
{
intNames = new string[howMuchIntegers];
if (addInteger)
{
if (howMuchIntegers != 0)
{
GUILayout.BeginVertical("box");
for (int i = 0; i < howMuchIntegers; i++)
{
intNames[i] = i.ToString();
intNames[i] = EditorGUILayout.TextField(intNames[i]);
}
GUILayout.BeginVertical("box");
}
}
firstTimeRun = false;
GUILayout.EndVertical();
GUILayout.EndHorizontal();
}
else
{
if (addInteger)
{
if (howMuchIntegers != 0)
{
GUILayout.BeginVertical("box");
for (int i = 0; i < howMuchIntegers; i++)
{
intNames[i] = EditorGUILayout.TextField(intNames[i]);
}
GUILayout.BeginVertical("box");
}
}
GUILayout.EndVertical();
GUILayout.EndHorizontal();
}
}