Alireza Peer
Alireza Peer

Reputation: 908

custom inspector not drawing correctly

GameContainer script:

public class GameContainer : MonoBehaviour
{
    public List<Game> Games;


    public void AddGame()
    {
        Games.Add(new Game());
    }

}

Game Class:

[System.Serializable]
public class Game
{
    public List<GameType> gameTypes;

    public void addGameType()
    {
        gameTypes.Add(new GameType());
    }
}

GameType Class

[System.Serializable]
public class GameType
{

}

and my OnInspectorGUI method in custom editor

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();
    }
}

the problem is with this line:

 //here is the LINE CAUSING A PROBLEM
 Debug.Log(game.gameTypes.Count);

when i hit AddGame Button, all draw calls after this line will be ignored for newly added element and its not shown till next change in code and refresh in the editor, if i remove this line, everything works just fine. but if i try to use gameType list by any mean, it will not show correct view in inspector.

what the problem is?

Fine

i pressed + button and boom

Upvotes: 0

Views: 530

Answers (1)

IR_HellBlade
IR_HellBlade

Reputation: 41

I recommend using EditorGUILayout instead of old GUILayout class. here's link to document for it: https://docs.unity3d.com/ScriptReference/EditorGUILayout.html

Although unity introduced a new way to make custom editors lately that is called UI Elements. You can create your own editors with layered architecture with xml,css like language. here's some useful YouTube links for you:

https://www.youtube.com/watch?v=sVEmJ5-dr5E

https://www.youtube.com/watch?v=MNNURw0LeoQ

https://www.youtube.com/watch?v=GSRVI1HqlF4

And lastly you can check this beautiful editor attributes too:

https://github.com/dbrizov/NaughtyAttributes

Upvotes: 4

Related Questions