Задачу можно решить минимум тремя способами. Какой способ использовать - выбирайте сами.
Способ 1
В классе
Cursor наличествует свойство lockState, определяющее поведение и видимость курсора. Сохранив в него значение
CursorLockMode.Locked, вы переместите курсор в центр ОКНА ИГРЫ и скроете. Затем туда нужно сохранить значение
Cursor.lockState = CursorLockMode.None, что разблокирует курсор и сделает видимым. Есть только одна проблема - эта операция работает не мгновенно, потому применить их последовательно не получится. Выглядеть код будет как-то так
using UnityEngine;
public class MouseCenteringExample : MonoBehaviour {
private void Start() {
Cursor.lockState = CursorLockMode.Locked;
Invoke("UnlockCursor", 0.05f);
}
private void UnlockCursor() => Cursor.lockState = CursorLockMode.None;
}
Способ 2
Если вы используете New Input System, то вам доступна опция
InputState.Change, которую, в контексте вашей задачи, можно использовать так:
using UnityEngine;
public class MouseCenteringExample : MonoBehaviour {
private void Start() {
var center = Screen.safeArea.center;
Mouse.current.WarpCursorPosition(center);
InputState.Change(Mouse.current.position, center);
}
}
Способ 3
Можно воспользоваться поддержкой нативных библиотек ОС. Правда, тут придётся подключить платформозависимую компиляцию. Например, для Windows:
using System.Runtime.InteropServices;
using UnityEngine;
public class MouseCenteringExample : MonoBehaviour {
#if UNITY_STANDALONE_WIN
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
private void Start() {
var center = Screen.safeArea.center;
SetCursorPos((int)center.x, (int)center.y);
}
#endif
}