Unitys立即GUI坚持在每次点击它时选择任何基于文本的输入字段(TextField,TextArea,IntField ...)的所有内容(并且它还没有得到焦点)。
有没有办法阻止这种情况?
答案 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));