public override void OnInspectorGUI()
    {
        // Start custom Inspector
        serializedObject.Update();
        EditorGUI.BeginChangeCheck();

        // Reset button
        m_controlRect = EditorGUILayout.GetControlRect();
        if (GUI.Button(new Rect(m_controlRect.width - 73, -26, 45, 18), m_guiContent[6]))
        {
            m_target.ResetAsset();
        }
        GUILayout.Space(-20);

        // Settings section
        EditorGUILayout.LabelField("Settings", (GUIStyle)"DD Background"); // (GUIStyle)"SelectionRect", (GUIStyle)"dockareaStandalone"
        GUILayout.Space(-4);

        // Tile size popup
        EditorGUILayout.BeginHorizontal("Box");
        m_tileSize = EditorGUILayout.IntPopup(m_guiContent[0], m_target.tileSize, m_tileSizeContentArray, m_tileSizeArray);
        EditorGUILayout.EndHorizontal();

        // Conversion section
        EditorGUILayout.LabelField("Conversion", (GUIStyle)"DD Background"); // (GUIStyle)"ObjectPickerResultsEven", (GUIStyle)"LODSliderRangeSelected"
        GUILayout.Space(-4);

        // Texture field for the diffuse tileset atlas
        EditorGUILayout.BeginVertical("Box");
        EditorGUILayout.HelpBox(m_guiContent[8].tooltip, MessageType.Info);
        GUI.color = m_greenColor;
        if (!m_atlasTexture.objectReferenceValue)
        {
            GUI.color = m_redColor;
        }
        EditorGUILayout.PropertyField(m_atlasTexture, m_guiContent[1]);
        GUI.color = Color.white;

        // Grid offset
        EditorGUILayout.PropertyField(m_gridOffset, m_guiContent[2]);

        // Extract number
        EditorGUILayout.PropertyField(m_extractNumber, m_guiContent[7]);

        // Button to convert the atlas texture to separate tiles and save it as .asset file
        if (GUILayout.Button(m_guiContent[4]))
        {
            m_target.ConvertAtlasToTiles();
        }

        // Delete tile assets button
        if (GUILayout.Button(m_guiContent[5]))
        {
            m_target.DeleteTiles();
        }
        EditorGUILayout.EndVertical();

        // Tileset data section
        EditorGUILayout.LabelField("Tileset Data", (GUIStyle)"DD Background");
        GUILayout.Space(-4);

        // Build 3D tileset data
        EditorGUILayout.BeginVertical("Box");
        //if (GUILayout.Button(m_guiContent[6]))
        //    m_target.BuildDiffuseTilesetData();

        // Tile grid
        m_scrollPos = EditorGUILayout.BeginScrollView(m_scrollPos);
        EditorGUILayout.LabelField("", GUILayout.Width(442));
        GUILayout.Space(-20);

        for (int vertical = 0; vertical < 256;)
        {
            m_controlRect = EditorGUILayout.GetControlRect(GUILayout.Width(24), GUILayout.Height(24));

            EditorGUILayout.BeginHorizontal();
            for (int horizontal = 0; horizontal < 16; horizontal++)
            {
                m_tileTexture = m_target.temporaryTileTextureArray[vertical] ? m_target.temporaryTileTextureArray[vertical] : emptyIconTexture;
                GUI.DrawTexture(m_controlRect, m_tileTexture, ScaleMode.StretchToFill, true, 0);
                m_controlRect.x += 28;
                vertical++;
            }
            EditorGUILayout.EndHorizontal();
        }
        EditorGUILayout.EndScrollView();
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginHorizontal();
        GUILayout.Label("Used Slots: " + m_target.tilesCount.ToString());
        GUILayout.FlexibleSpace();
        GUILayout.Label("Free Slots: " + (256 - m_target.tilesCount).ToString());
        EditorGUILayout.EndHorizontal();

        // End custom Inspector
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(m_target, "3D Tilemap System");
            serializedObject.ApplyModifiedProperties();
            m_target.tileSize = m_tileSize;
        }
    }