自定义检查器无法正确绘制

时间:2019-07-14 20:45:15

标签: unity3d editor

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列表,它将不会在检查器中显示正确的视图。

问题是什么?

Fine

i pressed + button and boom

1 个答案:

答案 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

最后,您也可以检查此漂亮的编辑器属性:

https://github.com/dbrizov/NaughtyAttributes