如何停止立即GUI选择单击时的所有文本

时间:2017-05-21 13:43:27

标签: unity3d

Unitys立即GUI坚持在每次点击它时选择任何基于文本的输入字段(TextField,TextArea,IntField ...)的所有内容(并且它还没有得到焦点)。

有没有办法阻止这种情况?

1 个答案:

答案 0 :(得分:2)

Unity本身并没有提供防止这种情况的方法。

尝试了很多我在其他地方找到的解决方案后,我做了一些逆向工程,并提出了以下解决方法。

此包装器方法将暂时将cursorColor.a设置为0来阻止select-all。在内部,Unity只会在光标不透明时执行select-all。

private T WithoutSelectAll<T>(Func<T> guiCall)
{
    bool preventSelection = (Event.current.type == EventType.MouseDown);

    Color oldCursorColor = GUI.skin.settings.cursorColor;

    if (preventSelection)
        GUI.skin.settings.cursorColor = new Color(0, 0, 0, 0);

    T value = guiCall();

    if (preventSelection)
        GUI.skin.settings.cursorColor = oldCursorColor;

    return value;
}

像这样使用:

int foo;
string bar;

foo = WithoutSelectAll(() => GUI.IntField("foo", foo));
bar = WithoutSelectAll(() => EditorGUILayout.TextArea(bar));