How to save a two-dimensional array, as part of the variable inspector?
Hi! I have a Component that holds some variables. Variables will be saved when restarting Unity. (int, color, float)
 using UnityEngine;
 using System.Collections;
 
 public class Grid : MonoBehaviour
 {
     public float startX = 0;
     public float startZ = 0;
 
     public int width = 1000;
     public int height = 1000;
 
     public float boxWidth = 32.0f;
     public float boxHeight = 32.0f;
 
     public float px;
     public float pz;
 
     public Color color = Color.white;
     public bool[,] map;
 
     void OnDrawGizmos()
     {
         if (map != null)
         {
             Vector3 pos = transform.position;
 
             px = pos.x + startX;
             pz = pos.z + startZ;
 
             Gizmos.color = color;
 
             Vector3 size = new Vector3(boxWidth, 0f, boxHeight);
 
             for (int x = 0; x < width; x++)
             {
                 for (int z = 0; z < height; z++)
                 {
                     if (map[x, z])
                     {
                         Gizmos.DrawCube(new Vector3(px + x * boxWidth, pos.y + 1, pz + z * boxHeight), size);
                     }
                     else
                     {
                         Gizmos.DrawWireCube(new Vector3(px + x * boxWidth, pos.y + 1, pz + z * boxHeight), size);
                     }
                 }
             }
         }
     }
 }
To edit the variables I have my inspector:
 using UnityEngine;
 using UnityEditor;
 using System.Collections;
 
 [CustomEditor (typeof(Grid))]
 public class GridEditor : Editor
 {
     Grid grid;
     
     public void OnEnable()
     {
         grid = (Grid)target;
         SceneView.onSceneGUIDelegate += GridUpdate;
 
         if (grid.map == null)
         {
             grid.map = new bool[grid.width, grid.height];
             for (int x = 0; x < grid.width; x++)
             {
                 for (int y = 0; y < grid.height; y++)
                 {
                     grid.map[x, y] = false;
                 }
             }
         }
     }
     
     public void OnDisable()
     {
         SceneView.onSceneGUIDelegate -= GridUpdate;
     }
 
     private int lastX = -1;
     private int lastZ = -1;
     void OnSceneGUI()
     {
         Event e = Event.current;
         Camera camera = Camera.current;
 
         Vector3 mousePos =  Vector3.zero; // = camera.ScreenToWorldPoint(new Vector3(e.mousePosition.x, e.mousePosition.y, distance));
 
         if (EventType.KeyDown == e.type && KeyCode.LeftControl == e.keyCode)
         {
   
             Ray ray = camera.ScreenPointToRay(new Vector3(e.mousePosition.x, -e.mousePosition.y + camera.pixelHeight, 0));
             RaycastHit hit;
             if (Physics.Raycast(ray, out hit, 2550f))
             {
                 mousePos = hit.point;
             }
 
             int x = Mathf.RoundToInt((mousePos.x - grid.px)/grid.boxWidth);
             int z = Mathf.RoundToInt((mousePos.z - grid.pz)/grid.boxHeight);
             
             if (x >= 0 && x < grid.width && z >= 0 && z < grid.height)
             {
                 if (x != lastX || z != lastZ)
                 {
                     grid.map[x, z] = !grid.map[x, z];
                     lastX = x;
                     lastZ = z;
                     SceneView.RepaintAll();
                 }
             }
         }
     }
 
     public override void OnInspectorGUI()
     {
         GUILayout.BeginHorizontal();
         GUILayout.Label(" Start x ");
         grid.startX = EditorGUILayout.FloatField(grid.startX, GUILayout.Width(50));
         GUILayout.EndHorizontal();
 
         GUILayout.BeginHorizontal();
         GUILayout.Label(" Start z ");
         grid.startZ = EditorGUILayout.FloatField(grid.startZ, GUILayout.Width(50));
         GUILayout.EndHorizontal();
 
 
         GUILayout.BeginHorizontal();
         GUILayout.Label(" Grid Width ");
         grid.width = EditorGUILayout.IntField(grid.width, GUILayout.Width(50));
         GUILayout.EndHorizontal();
 
         GUILayout.BeginHorizontal();
         GUILayout.Label(" Grid Height ");
         grid.height = EditorGUILayout.IntField(grid.height, GUILayout.Width(50));
         GUILayout.EndHorizontal();
 
         GUILayout.BeginHorizontal();
         GUILayout.Label(" Box Width ");
         grid.boxWidth = EditorGUILayout.FloatField(grid.boxWidth, GUILayout.Width(50));
         GUILayout.EndHorizontal();
 
         GUILayout.BeginHorizontal();
         GUILayout.Label(" Box Height ");
         grid.boxHeight = EditorGUILayout.FloatField(grid.boxHeight, GUILayout.Width(50));
         GUILayout.EndHorizontal();
 
         if (GUILayout.Button("Open Grid Window", GUILayout.Width(255)))
         {   
            GridWindow window = (GridWindow) EditorWindow.GetWindow(typeof (GridWindow));
            window.Init();
         }
 
         SceneView.RepaintAll();
     }
 }
Unfortunately, I can not figure out how to store a two-dimensional array (map [,]) of boolean, so he remained when restarting Unity. All that I came it to make serialization to file and look for the file at startup App. (array can be a big 1000x20) Maybe you can advise a better idea? Thank you! Excuse my English.
               Comment
              
 
               
              re: the array
you can store it as an int and use 1 and 0, it will still work as boolean.
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                