はじめに
ほとんどの人があったことがないと思いますが、インスペクター拡張をしていてちょっと面白い現象に出会ったので紹介したいと思います。

具体的にはコンポーネントの左上に謎の文字がでてくるというバグ(?)です。一応原因らしきものと対策は分かったので、紹介したいと思います。
環境
Unity 2022.3.56f1
概要
実際にこの現象にあったときは以下のようなコードを書いていました。具体的にはtext
という値を条件によって出し分けたいためにこのように実装してみた背景があります。
// コンポーネント public class Sample : MonoBehaviour { [SerializeField] [HideInInspector] [TextArea(3, 10)] private string text; }
// インスペクター拡張用 [CustomEditor(typeof(Sample))] public class SampleEditor : Editor { public override void OnInspectorGUI() { serializedObject.Update(); // textフィールドをインスペクタから編集できるように var textProperty = serializedObject.FindProperty("text"); EditorGUILayout.PropertyField(textProperty); serializedObject.ApplyModifiedProperties(); } }
挙動としては[HideInInspector]
を付与しているのでSerializeしつつもインスペクタに表示しないようにし、インスペクタ拡張により条件によっては編集できるようにしています。(例なので条件はつけてないですが)
docs.unity3d.com
原因
[HideInInspector]
と一緒に付与していた[TextArea(3, 10)]
が原因でした。
[SerializeField] [HideInInspector] [TextArea(3, 10)] private string text;
Unityの中のコードまで追っていませんが、[TextArea]
の有無で表示が正しくなったので描画の際に変な処理になってしまっている箇所があるのだと思います。
対策
EditorGUILayout.PropertyField
を利用した修正方法が思いつかなかったので、結局EditorGUILayout.TextArea
を代わりに使いました。
var textProperty = serializedObject.FindProperty("text"); textProperty.stringValue = EditorGUILayout.TextArea(textProperty.stringValue, GUILayout.Height(3 * EditorGUIUtility.singleLineHeight));