Unity UI - 在光标锁定时与worldspace UI交互

时间:2017-02-22 06:57:40

标签: c# unity3d unity5 unity3d-gui unity3d-editor

Cursor.lockState设置为CursorLockMode.Locked时,我尝试使用第一人称控制器世界空间用户界面进行互动。< / p>

world space UI and a character world space UI and a character

但是当光标锁定时,光标位置设置为( - 1,-1), 这是从检查员告知的。

cursor position of (-1, -1) cursor position of (-1, -1)

我使用EventSystem.RaycastAllSreen.width/2PointerEventData执行了图形光线投射。 EventSystem.current.RaycastAll收集屏幕中间的所有UI对象,但不会向它们发送任何事件。

我还尝试ExecuteEvents.Execute<IEventSystemHandler>手动向UI目标发送事件。当我发送&#39;提交&#39;它的事件。显然这不是一个优雅的解决方案。我不知道如何向滑块发送消息。

// manully send a 'submit' event to UI elements
List<RaycastResult> results = new List<RaycastResult>();
void Update() {
    if (Input.GetButtonUp("Fire1")) {
        PointerEventData data = new PointerEventData(EventSystem.current);
        data.position = new Vector2(Screen.width / 2, Screen.height / 2);
        EventSystem.current.RaycastAll(data, results);
        foreach (var result in results) {
            ExecuteEvents.ExecuteHierarchy<ISubmitHandler>(
                result.gameObject, data,
                ExecuteEvents.submitHandler
            );
        }
    }
}

这种疯狂的尝试在Windows上全屏播放时有效。 2333

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int SetCursorPos ( int x , int y );
void SetCursorPositionToCenter()
{
  SetCursorPos(Screen.width/2, Screen.height/2);
}

Relavant Resources

3 个答案:

答案 0 :(得分:0)

在使用Graphics Raycaster和Global UI元素时,我也遇到很多问题。我也尝试了很多事情,但事件系统似乎无法正常工作。但是我当时正在用触摸板模拟鼠标,也许我没有完全模拟鼠标如何与UI元素一起工作。

我最终放弃了图形raycaster,而是向所有UI元素添加了一个box collider。这样一来,常规的物理光线投射器就可以检测到它并运行一些代码。对于滑块,它只是随着指针的x或y的增加而增加滑块的值。

希望这会有所帮助。

答案 1 :(得分:0)

如果您尝试访问UI元素而不影响游戏玩法,则可以简单地设置desired <- df %>% group_by(year) %>% mutate(Count_TypeB = cumsum(Count_TypeB)) %>% mutate(Count_TypeA = cumsum(Count_TypeA)) ,这基本上会暂停时间,但UI元素仍然处于活动状态。然后,只需解锁光标即可自由使用。

答案 2 :(得分:0)

您使用提交处理程序所做的事情与可以完成的许多不同方式相似。我没有专门讨论滑块,因为用这种方法控制滑块并不是很容易(播放器控制器,或者在VR的情况下,用户的头部不能很好地处理直线)。因此,对于滑块输入,我们通常使用+/-按钮。另一个想法可能是,当用户指向一个UI元素时,您在单击时释放了cursorLock。释放点击后,您可以恢复光标锁定。

UI元素通常也需要诸如hover / onEnter,onExit之类的状态,有时需要向上的指针,通常需要向下的指针。因此,我们经常为此使用Selectable类。我认为所有可交互的UI元素都继承自此,因此是从中访问UI元素的好地方。这通常会触发适当的事件,但可能会有些棘手。检查许多正在使用的注视输入系统是否在做相同的事情。我不认为我曾经见过一个手柄滑块(它们通常用于VR,注视滑块控件将是糟糕的UX)。

干杯,祝你好运!