📅  最后修改于: 2022-03-11 14:49:03.360000             🧑  作者: Mango
//I came up with a very legit way to move the mouse cursor and another to force a mouse click event because Unity is so annoying in not letting you do this when using Cursor.lockState. Now you can set Cursor.lockState and/or Cursor.visibility in Start() and call either of the following below to force the mouse to behave. (Verified working in macOS Big Sur, Unity 2021.1.17)
//Stupid easy way to force mouse cursor position to center of game window in editor only from code:
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.LowLevel;
public static void ForceMousePositionToCenterOfGameWindow()
{
#if UNITY_EDITOR
// Force the mouse to be in the middle of the game screen
var game = UnityEditor.EditorWindow.GetWindow(typeof(UnityEditor.EditorWindow).Assembly.GetType("UnityEditor.GameView"));
Vector2 warpPosition = game.rootVisualElement.contentRect.center; // never let it move
Mouse.current.WarpCursorPosition(warpPosition);
InputState.Change(Mouse.current.position, warpPosition);
#endif
}
//Stupid easy way to force click in game window in editor only from code:
public static void ForceClickMouseButtonInCenterOfGameWindow()
{
#if UNITY_EDITOR
var game = UnityEditor.EditorWindow.GetWindow(typeof(UnityEditor.EditorWindow).Assembly.GetType("UnityEditor.GameView"));
Vector2 gameWindowCenter = game.rootVisualElement.contentRect.center;
Event leftClickDown = new Event();
leftClickDown.button = 0;
leftClickDown.clickCount = 1;
leftClickDown.type = EventType.MouseDown;
leftClickDown.mousePosition = gameWindow;
game.SendEvent(leftClickDown);
#endif
}