I made this custom script Editor for a multidimensional array but I can’t serialize it. Any change I made to the array will automatically reset on Play. How can I serialize the custom array setup from the Inspector?
Levels.cs
using UnityEngine;
public enum BlockColors {blank, red, blue, green, yellow, cyan, white, purple};
[System.Serializable] public class level {
#if UNITY_EDITOR
[HideInInspector] public bool showBoard;
#endif
public int rows = 9;
public int column = 9;
public BlockColors [,] board = new BlockColors [collumns, rows];
}
public class Levels : MonoBehaviour {
public Level[] allLevels;
}
Editor/LevelEditor.cs
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(Levels))]
public class LevelEditor : Editor {
public bool showLevels = true;
public override void OnInspectorGUI() {
Levels levels = (Levels)target;
EditorGUILayout.Space ();
showLevels = EditorGUILayout.Foldout (showLevels, "Levels ("+levels.allLevels.Length+")");
if (showLevels) {
EditorGUI.indentLevel++;
for (ushort i = 0; i < levels.allLevels.Length; i++) {
levels.allLevels_.showBoard = EditorGUILayout.Foldout(levels.allLevels*.showBoard, "Board");*_
_ if (levels.allLevels .showBoard) {_
* EditorGUI.indentLevel = 0;*
* GUIStyle tableStyle = new GUIStyle (“box”);*
* tableStyle.padding = new RectOffset (10, 10, 10, 10);*
* tableStyle.margin.left = 32;*
* GUIStyle headerColumnStyle = new GUIStyle ();*
* headerColumnStyle.fixedWidth = 35;*
* GUIStyle columnStyle = new GUIStyle ();*
* columnStyle.fixedWidth = 65;*
* GUIStyle rowStyle = new GUIStyle ();*
* rowStyle.fixedHeight = 25;*
* GUIStyle rowHeaderStyle = new GUIStyle ();*
* rowHeaderStyle.fixedWidth = columnStyle.fixedWidth - 1;*
* GUIStyle columnHeaderStyle = new GUIStyle ();*
* columnHeaderStyle.fixedWidth = 30;*
* columnHeaderStyle.fixedHeight = 25.5f;*
* GUIStyle columnLabelStyle = new GUIStyle ();*
* columnLabelStyle.fixedWidth = rowHeaderStyle.fixedWidth - 6;*
* columnLabelStyle.alignment = TextAnchor.MiddleCenter;*
* columnLabelStyle.fontStyle = FontStyle.Bold;*
* GUIStyle cornerLabelStyle = new GUIStyle ();*
* cornerLabelStyle.fixedWidth = 42;*
* cornerLabelStyle.alignment = TextAnchor.MiddleRight;*
* cornerLabelStyle.fontStyle = FontStyle.BoldAndItalic;*
* cornerLabelStyle.fontSize = 14;*
* cornerLabelStyle.padding.top = -5;*
* GUIStyle rowLabelStyle = new GUIStyle ();*
* rowLabelStyle.fixedWidth = 25;*
* rowLabelStyle.alignment = TextAnchor.MiddleRight;*
* rowLabelStyle.fontStyle = FontStyle.Bold;*
* GUIStyle enumStyle = new GUIStyle (“popup”);*
* rowStyle.fixedWidth = 65;*
* EditorGUILayout.BeginHorizontal (tableStyle);*
_ for (int x = -1; x < levels.allLevels .collumns; x++) {
* EditorGUILayout.BeginVertical ((x == -1) ? headerColumnStyle : columnStyle);
for (int y = -1; y < levels.allLevels .rows; y++) {
if (x == -1 && y == -1) {
EditorGUILayout.BeginVertical (rowHeaderStyle);
EditorGUILayout.LabelField (“[X,Y]”, cornerLabelStyle);
EditorGUILayout.EndHorizontal ();
} else if (x == -1) {
EditorGUILayout.BeginVertical (columnHeaderStyle);
EditorGUILayout.LabelField (y.ToString (), rowLabelStyle);
EditorGUILayout.EndHorizontal ();
} else if (y == -1) {
EditorGUILayout.BeginVertical (rowHeaderStyle);
EditorGUILayout.LabelField (x.ToString (), columnLabelStyle);
EditorGUILayout.EndHorizontal ();
}*_
* if (x >= 0 && y >= 0) {*
* EditorGUILayout.BeginHorizontal (rowStyle);*
levels.allLevels .board [x, y] = (BlockColors)EditorGUILayout.EnumPopup (levels.allLevels .board [x, y], enumStyle);
* EditorGUILayout.EndHorizontal ();*
* }*
* }*
* EditorGUILayout.EndVertical ();*
* }*
* EditorGUILayout.EndHorizontal ();*
* }*
* }*
* }*
* }*
}