public override void OnInspectorGUI() { container = (target as TileMapContainer); EditorGUILayout.HelpBox("This is just a container of tilemap data", MessageType.Info); Utillity.MyGUILayout.Splitter(); if (GUILayout.Button("Import as New TileMap")) { GameObject go = new GameObject(container.name); TileMap map = go.AddComponent <TileMap>(); map.Resize(container.width, container.height); for (int x = 0; x < container.width; x++) { for (int y = 0; y < container.height; y++) { map.SetTileAt(x, y, container.map[x + y * container.width]); } } } }
public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.Space(); TileRenderer renderer = tileMap.GetComponent <TileRenderer>(); if (renderer == null) { Texture2D tex = EditorGUIUtility.FindTexture("console.erroricon"); if (GUILayout.Button(new GUIContent("No TileRenderer attached! Click here to add one.", tex), EditorStyles.helpBox)) { GenericMenu menu = new GenericMenu(); foreach (Type type in Assembly.GetAssembly(typeof(TileRenderer)).GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(TileRenderer)))) { menu.AddItem(new GUIContent(type.Name), false, () => { tileMap.gameObject.AddComponent(type); }); } menu.ShowAsContext(); } } EditorGUILayout.Space(); EditorGUI.BeginChangeCheck(); tileMap.isInEditMode = GUILayout.Toggle(tileMap.isInEditMode, "", "Button", GUILayout.Height(EditorGUIUtility.singleLineHeight * 1.5f)); string toggleButtonText = (tileMap.isInEditMode ? "Exit" : "Enter") + " Edit Mode [TAB]"; GUI.Label(GUILayoutUtility.GetLastRect(), toggleButtonText, MyStyles.centerBoldLabel); if (EditorGUI.EndChangeCheck()) { if (tileMap.isInEditMode) { OnEnterEditMode(); } else { OnExitEditMode(); } } EditorGUILayout.Space(); GUILayout.Label("Settings", MyStyles.leftBoldLabel); int width = spWidth.intValue; width = EditorGUILayout.IntField(spWidth.displayName, width); int height = spHeight.intValue; height = EditorGUILayout.IntField(spHeight.displayName, height); if (width != spWidth.intValue || height != spHeight.intValue) { tileMap.Resize(width, height); OnSceneGUI(); } EditorGUILayout.Space(); GUILayout.Label("Tools", MyStyles.leftBoldLabel); GUILayout.BeginHorizontal(); if (GUILayout.Button("Force Refresh")) { tileMap.UpdateTileMap(); } GUI.color = new Color(1f, 0.5f, 0.5f); if (GUILayout.Button("Clear All Tiles")) { if (EditorUtility.DisplayDialog("Are you sure?", "Do you really want to clear this tilemap without saving?", "Okay", "Cancel")) { tileMap.Reset(); SetTileMapDirty(); } } GUI.color = Color.white; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button("Import")) { string path = EditorUtility.OpenFilePanelWithFilters("Select .tilemap File", "Assets", new string[] { "ScriptableObject", "asset" }); if (path != string.Empty) { int cutoffFrom = path.IndexOf("Assets"); path = path.Substring(cutoffFrom); Debug.Log(path); TileMapContainer container = AssetDatabase.LoadAssetAtPath <TileMapContainer>(path) as TileMapContainer; if (EditorUtility.DisplayDialog("Are you sure?", "Importing this tilemap will override the current one without saving it.", "Okay", "Cancel")) { tileMap.Resize(container.width, container.height); for (int x = 0; x < container.width; x++) { for (int y = 0; y < container.height; y++) { tileMap.SetTileAt(x, y, container.map[x + y * container.width]); } } } } } if (GUILayout.Button("Export")) { TileMapContainer container = ScriptableObjectUtility.CreateAsset <TileMapContainer>(tileMap.name + ".asset"); container.map = tileMap.Map; container.width = tileMap.Width; container.height = tileMap.Height; } GUILayout.EndHorizontal(); if (Event.current.type == EventType.KeyDown && Event.current.isKey && Event.current.keyCode == KeyCode.Tab) { tileMap.isInEditMode = !tileMap.isInEditMode; } if (Event.current.type == EventType.KeyDown && Event.current.isKey && Event.current.keyCode == KeyCode.Escape) { tileMap.isInEditMode = false; } serializedObject.ApplyModifiedProperties(); }