我在Unity中使用user32.dll写入鼠标的运动。我意识到光标必须在Windows屏幕空间中运行,并且我无法弄清楚如何使其仅在Unity Game Window或Unity屏幕空间的范围内运行。当我尝试根据Unity World或屏幕坐标设置鼠标位置时,会得到不希望的结果。我尝试为这些值添加偏移量,但这仅在相机未放大且游戏窗口为全屏时有效。我是编码的新手,但是我确实需要一些帮助,以便在满足游戏中的某些条件时如何将光标的位置锁定在统一的世界/屏幕空间中。
第二个问题是我无法从脚本中撤消对鼠标移动的限制。即使我停止运行游戏后,鼠标仍停留在代码中设置的参数内。 (不理想!)
谢谢您的宝贵时间!
我在网上查看了许多不同的帖子,但其中一些超出了我的脑海。这是我第一次没有在Unity API中使用代码,因此试图了解Windows类的功能是如何进行的。
public bool MOUSELOCK;
public bool Buttonpress;
public Button button;
[DllImport("user32.dll")]
static extern bool ClipCursor(ref RECT lpRect);
// Start is called before the first frame update
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
void Start(){
MOUSELOCK = false;
Buttonpress = false;
}
public void OnPointerDown(PointerEventData eventData){
MOUSELOCK = true;
}
public void OnClicked(){
Debug.Log ("Clicked true");
if (MOUSELOCK == true) {
Debug.Log ("Clicked trueCON");
RECT cursorLimits;
cursorLimits.Left = 40;
cursorLimits.Top = 30;
cursorLimits.Right = Screen.width - 8;
cursorLimits.Bottom = Screen.height + 2;
ClipCursor (ref cursorLimits);
}
}
}