Lauren Howie Ответов: 0

Как управлять курсором с помощью C# и unity3d у меня возникли проблемы с использованием user32.dllimport!


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);
 
 
 
 
         }
 }
 
 
 
     }

Hello, I am using user32.dll in Unity to write to the mouse's movement. I realized the cursor must be operating in Windows screen space, and I cannot figure out how to get it to operate only within the bounds of the Unity Game Window or Unity screenspace. When I try to set the mouse position based on Unity World or Screen Coordinates I get undesired results. I tried added an offset to the values but this only works when the camera is not zoomed in and the game window is full screen. I am new to coding but I really need some help as to how to be able to lock the cursor's position to position in the unity world/screen space when certain conditions in the game are met.

The second problem is I cannot undo the restriction of the mouse's movement from my script. Even after I stop running the game the mouse stays within the parameters set in the code. (Not desirable!)

Thankyou for your time!

I have looked at many different posts online but some of them are above my head. This is the first time I have used code not in the Unity API, so trying to understand how the Windows classes function and such is going very slowly.


Что я уже пробовал:

<pre>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);
 
 
 
 
         }
 }
 
 
 
     }

Gerry Schmitz

Попытка использовать хаки с продуктом третьей стороны похожа на выполнение стоматологии на себе: вы можете иметь некоторую удачу, но, вероятно, много боли тоже.

0 Ответов