Unity, пользовательский скрипт движения мыши, управляемый камерой - PullRequest
0 голосов
/ 30 сентября 2019

Не работает

using System.Runtime.InteropServices; //for mouse reset
int mouseXPos = 960; //half of 1920
int mouseYPos = 540; //half of 1080
[DllImport("user32.dll")]
static extern bool SetCursorPos(int X, int Y);
SetCursorPos(mouseXPos, mouseYPos);//Call this when you want to set the mouse position

в FixedUpdate:

mousePos = Input.mousePosition;
mousePos.z = turnSpeed;
mousePos = Camera.main.ScreenToWorldPoint(mousePos);
transform.LookAt(mousePos);

mousePos.z - это то, как далеко от камеры находится цель, на которую смотрит камера. мышь следует поместить в середину экрана, но когда программа построена и в редакторе (мне нужно сместить mouseXPos и ​​mouseYPos для работы с полноэкранным окном воспроизведения), мышь не устанавливается нацентр, и поэтому есть дрейф, и вид медленно перемещается вверх. кажется, что он отключен на 2,3 пикселя, и когда я делаю большое движение мыши, он не возвращается к нулю, он выключается на 0,1 или 0,2 пикселя

пример видео: https://imgur.com/a/hPFkGjE ВЛог, который вы видите, вектор3 должен быть 0,0,5. Я отключил поворот для видео.

1 Ответ

0 голосов
/ 30 сентября 2019

Вы действительно не должны использовать системные библиотеки для управления пользовательским вводом, особенно в Unity. Используйте свойства Cursor.lockState и Cursor.visible для управления курсором. В частности, кажется, что вы хотите сделать так, чтобы курсор находился в центре экрана. Это можно сделать с помощью следующего:

/**
 * Locks the cursor to the centre of the game window.
 */
private void LockCursor()
{
    Cursor.lockState = CursorLockMode.Locked;
}

// ...
// In some MonoBehaviour...
private void Start()
{
    LockCursor();
}

Подробнее см. В документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...