エディタ拡張のテキストエリアにスクロールバーを表示したい

はじめに

Unity のエディタ拡張で Editor.OnInspectorGUIEditorWindow.OnGUI 内に EditorGUILayout.TextArea を使うことで複数行のテキストを入力できる UI が生成されます。

using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class MyInspector : MonoBehaviour
{
    [SerializeField]
    private string _hoge = "テスト\nテスト\nテスト";

#if UNITY_EDITOR
    [CustomEditor(typeof(MyInspector))]
    public class MyInspectorEditor : Editor
    {
        public override void OnInspectorGUI()
        {
            var self = target as MyInspector;

            EditorGUILayout.LabelField(ObjectNames.NicifyVariableName(nameof(self._hoge)) + " を入力");
            self._hoge = EditorGUILayout.TextArea(self._hoge, GUILayout.ExpandHeight(true));
        }
    }
#endif
}

しかしテキストが長くなってくると、見えない箇所が増えたり場所を占領してしまったりと、扱いにくくなっていきます。

今回はこれをスクロールバーでコントロールできるようにしたかったので、やり方を調べました。

やり方

実は難しいことはなく、汎用的なエディタ用スクロールビュー提供メソッド EditorGUILayout.BeginScrollView / EditorGUILayout.EndScrollView で挟んであげれば勝手にいい感じになります。

using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

public class MyInspector : MonoBehaviour
{
    [SerializeField]
    private string _hoge = "テスト\nテスト\nテスト";

#if UNITY_EDITOR
    [CustomEditor(typeof(MyInspector))]
    public class MyInspectorEditor : Editor
    {
        private Vector2 _scrollPosition = Vector2.zero;

        public override void OnInspectorGUI()
        {
            var self = target as MyInspector;

            EditorGUILayout.LabelField(ObjectNames.NicifyVariableName(nameof(self._hoge)) + " を入力");
            _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, GUILayout.Height(100f));
            self._hoge = EditorGUILayout.TextArea(self._hoge, GUILayout.ExpandHeight(true));
            EditorGUILayout.EndScrollView();
        }
    }
#endif
}

これで思った通りになるのは少し意外でした…。簡単なので是非使ってみてください。

コメント

タイトルとURLをコピーしました