LoginSignup
14
12

More than 5 years have passed since last update.

エディタ拡張で仕切り線を描く

Posted at

エディタ拡張をしていると仕切り線がほしくなることがありますが、そのような機能は残念ながら今のところありません。
しかし GUILayout.Box を使えばそれっぽいものを描くことができます。

GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(1));

これだけ。高さは1にしてしまいます。

ちなみに、Boxにも EditorGUILayout.BeginHorizontal()GUILayout.Space() は有効であるため、これらを使うことでインデントに対応できます。
コードはこちら。

EditorGUILayoutEx.cs

using UnityEngine;
using UnityEditor;

public class EditorGUILayoutEx {

    /// <summary>
    /// インデントレベル設定を考慮した仕切り線.
    /// </summary>
    /// <param name="useIndentLevel">インデントレベルを考慮するか.</param>
    public static void Separator(bool useIndentLevel = false)
    {
        EditorGUILayout.BeginHorizontal();
        if (useIndentLevel)
        {
            GUILayout.Space(EditorGUI.indentLevel * 15);
        }
        GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(1));
        EditorGUILayout.EndHorizontal();
    }

    /// <summary>
    /// インデントレベルを設定する仕切り線.
    /// </summary>
    /// <param name="indentLevel">インデントレベル</param>
    public static void Separator(int indentLevel)
    {
        EditorGUILayout.BeginHorizontal();
        GUILayout.Space(indentLevel * 15);
        GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(1));
        EditorGUILayout.EndHorizontal();
    }
}


使用例とそのコードはこんな感じです。

2016-10-23_00h43_39.png

SampleClass.cs

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(SampleClass))]
public class SampleClassInspector : Editor {

    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        EditorGUI.indentLevel = 1;
        GUILayout.Label("----- 以下インデントレベル1 -----");

        EditorGUILayoutEx.Separator();
        EditorGUILayout.PrefixLabel("↑ レベル無視インデント0");
        EditorGUILayoutEx.Separator(true);
        EditorGUILayout.PrefixLabel("↑ レベルに従う");

        GUILayout.Space(10);

        EditorGUI.indentLevel = 0;
        GUILayout.Label("----- 以下インデントレベル0 -----");

        EditorGUILayoutEx.Separator(2);
        EditorGUILayout.PrefixLabel("↑ レベル無視インデント2");
        EditorGUILayoutEx.Separator(3);
        EditorGUILayout.PrefixLabel("↑ レベル無視インデント3");
    }
}

参考:http://answers.unity3d.com/questions/216584/horizontal-line.html (ベストアンサーのコメント末尾)

14
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12