当设置为时,我正在尝试使用第一人称控制器与世界空间 UI交互。Cursor.lockState
CursorLockMode.Locked
但是当光标被锁定时,光标位置设置为(-1, -1) ,这是从Inspector告知的。
EventSystem.RaycastAll
我使用,Sreen.width/2
和执行了图形光线投射PointerEventData
。EventSystem.current.RaycastAll
收集屏幕中间的所有 UI 对象,但不向它们发送任何事件。
我还尝试ExecuteEvents.Execute<IEventSystemHandler>
手动将事件发送到 UI 目标。当我向它发送“提交”事件时,这适用于按钮。显然这不是一个优雅的解决方案。我也不知道如何向滑块发送消息。
// 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);
}