はじめに
Unity のエディタ拡張で Editor.OnInspectorGUI や EditorWindow.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
}
これで思った通りになるのは少し意外でした…。簡単なので是非使ってみてください。
コメント