1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EditorGUILayout.Popup()の不思議な挙動とその対策

Posted at

EditorGUILayout.Popup() の不思議な挙動に出くわしたので、原因(?)とその対策のメモ。

環境

  • Unity2021.3.0f1

再現方法

InspectorHeaderGUI.cs
#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;

[InitializeOnLoad]
internal static class InspectorHeaderGUI
{
    private static readonly string[] _displayedOptions =
    {
        "aaa",
        "_bbb",
        "ccc _ccc",
        "ddd _ddd ddd",
        "_eee eee eee",
        "5: aaa",
        "6: _bbb",
        "7: ccc _ccc",
        "8: ddd _ddd ddd",
        "9: _eee eee eee",
    };

    static InspectorHeaderGUI()
    {
        Editor.finishedDefaultHeaderGUI -= OnGUI;
        Editor.finishedDefaultHeaderGUI += OnGUI;
    }

    private static void OnGUI(Editor editor)
    {
        var gameObject = editor.target switch
        {
            GameObject go => go,
            Component component => component.gameObject,
            _ => null,
        };

        if (gameObject == null) return;

        EditorGUI.BeginChangeCheck();

        var selected = EditorGUILayout.Popup("Strange Behaviour", gameObject.layer, _displayedOptions);

        if (EditorGUI.EndChangeCheck())
        {
            gameObject.layer = selected;
        }
    }
}
#endif

このスクリプトを適当なところに置いてHierarchy上の GameObject をクリックしてInspectorを確認すると、ヘッダーが拡張されてこんな感じになります。

Oct-22-2022 17-21-20.gif

←ポップアップ  実際のコード→

上から3番目の ccc _ccc の後半の _ccc など、ポップアップの中ではなぜか一部の文字列が消えてしまっています。

どうやら以下のルールに従ってるように見えます。

  1. スペースが入ってなければそのまま表示
  2. スペースで区切ったときに最後の塊が _ で始まってたらそれ以降は空文字

ちなみにクリックして開く前は正しい文字列で表示されます( 6: _bbb になってる)。

対策方法

スペースが含まれなければいいみたいなので、通常のスペースを他のスペースっぽい適当な文字コードに変換してあげます。

for (var i = 0; i < _displayedOptions.Length; i++)
{
    _displayedOptions[i] = _displayedOptions[i].Replace(" ", "\u00A0");
}

結果:

最後に

たまたま遭遇したけど条件が限定的なので自分以外経験者いなさそう。

詳しい人いたら教えて下さい。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?