GameContainer脚本:
public class GameContainer : MonoBehaviour
{
public List<Game> Games;
public void AddGame()
{
Games.Add(new Game());
}
}
游戏类别:
[System.Serializable]
public class Game
{
public List<GameType> gameTypes;
public void addGameType()
{
gameTypes.Add(new GameType());
}
}
GameType类
[System.Serializable]
public class GameType
{
}
和我的自定义编辑器中的OnInspectorGUI方法
public override void OnInspectorGUI()
{
var targetScript = target as GameContainer;
var centeredStyle = GUI.skin.GetStyle("Label");
centeredStyle.alignment = TextAnchor.UpperCenter;
centeredStyle.fontStyle = FontStyle.Bold;
EditorGUILayout.LabelField("Games", centeredStyle);
for(int i = 0;i<targetScript.Games.Count; i++)
{
Game game = targetScript.Games[i];
//here is the LINE CAUSING A PROBLEM
Debug.Log(game.gameTypes.Count);
GUILayout.BeginVertical(EditorStyles.helpBox);
EditorGUILayout.Space();
GUILayout.BeginVertical("Game Types", "window");
if (GUILayout.Button("+"))
{
game.addGameType();
}
GUILayout.EndVertical();
GUILayout.EndVertical();
EditorGUILayout.Space();
}
if (GUILayout.Button("+"))
{
targetScript.AddGame();
}
}
问题出在这一行:
//here is the LINE CAUSING A PROBLEM
Debug.Log(game.gameTypes.Count);
当我按下AddGame
按钮时,此行之后的所有绘制调用都将被新添加的元素忽略,并且直到下一次代码更改并在编辑器中刷新时才会显示,如果我删除此行,则一切正常精细。
但是如果我尝试以任何方式使用gameType
列表,它将不会在检查器中显示正确的视图。
问题是什么?
答案 0 :(得分:4)
我建议使用EditorGUILayout而不是旧的GUILayout类。 这是它的文档链接: https://docs.unity3d.com/ScriptReference/EditorGUILayout.html
尽管unity最近引入了一种新的方法来制作自定义编辑器,称为UI元素。 您可以使用xml,css等语言创建具有分层架构的自己的编辑器。 以下是一些有用的YouTube链接:
https://www.youtube.com/watch?v=sVEmJ5-dr5E
https://www.youtube.com/watch?v=MNNURw0LeoQ
https://www.youtube.com/watch?v=GSRVI1HqlF4
最后,您也可以检查此漂亮的编辑器属性: