C# 修改EventType GUI.TextFields响应

C# 修改EventType GUI.TextFields响应,c#,unity3d,C#,Unity3d,我构建了一个滚动视图,其中包含按钮、文本字段和切换 当我拿着一个文本字段滚动视图时,只要我把手指放在屏幕上(EventType=MouseDown),它就会聚焦,这是一个糟糕的用户体验,因为你不希望在向下/向上滚动时发生这种情况 只有在触发MouseUp事件而不是之前,才可以聚焦TextFields吗?我不确定我是否完全理解您的问题所在,因为我可以使用滚动视图,而不需要附近的文本字段来获取焦点。但是,可以在文本字段之前操作事件。使用以下代码,文本字段的焦点将集中在MouseUp,无论从何处开始M

我构建了一个
滚动视图
,其中包含按钮、
文本字段
和切换

当我拿着一个文本字段滚动视图时,只要我把手指放在屏幕上(
EventType=MouseDown
),它就会聚焦,这是一个糟糕的用户体验,因为你不希望在向下/向上滚动时发生这种情况


只有在触发
MouseUp
事件而不是之前,才可以聚焦
TextFields
吗?

我不确定我是否完全理解您的问题所在,因为我可以使用滚动视图,而不需要附近的文本字段来获取焦点。但是,可以在文本字段之前操作事件。使用以下代码,文本字段的焦点将集中在
MouseUp
,无论从何处开始
MouseDown

void OnGUI()
{
    var typeBackup = Event.current.type;

    switch (Event.current.type)
    {
        case EventType.MouseDown:
            Debug.Log(Event.current);
            Event.current.type = EventType.Ignore;
            break;
        case EventType.MouseUp:
            Debug.Log(Event.current);
            Event.current.type = EventType.MouseDown;
            break;
    }

    GUILayout.TextField("I will not steal focus on MouseDown");

    if (Event.current.type != EventType.Used)
        Event.current.type = typeBackup;

}
取决于
OnGUI()
方法的其余部分,您可能需要也可能不需要保存原始事件类型并在文本字段后还原它。如果文本字段后面的
MouseDown
事件与此无关,则可以安全地忽略该部分


您可以通过匹配
MouseDown
MouseUp
事件的位置来微调行为,以便文本字段仅在两个事件都在其上方时才获得焦点。

您使用的GUI框架是什么?你自己的?统一的违约?恩圭?还有什么?这是Unity的默认值()