При изменении cursor.LockMode на Locked Input.GetAxis ("Mouse X") становится действительно большим числом. - PullRequest
1 голос
/ 26 мая 2020

В моей игре есть персонаж, который вращается с помощью мыши. Чтобы пользователь не щелкнул мышью за пределами окна игры, я заблокировал курсор в центре экрана, когда он находится в игровом процессе. Когда пользователь ставит игру на паузу, мышь разблокируется, чтобы они могли взаимодействовать с кнопками меню паузы. Когда они возобновляются, мышь снова фиксируется в центре экрана, однако это дает оси «Mouse X» огромное число, которое заставляет персонажа «прыгать» в новое вращение, чего я не хочу.

Вот базовый c код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FirstPersonController : MonoBehaviour
{
    bool gamePaused = false;

    void Start() {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update() {
        if (!gamePaused)
            CharacterRotation();
    }

    void CharacterRotation() {
         transform.Rotate(0, Input.GetAxis("Mouse X") * 10, 0);
    }

    public void Pause() {
        gamePaused = true;
        Cursor.lockState = CursorLockMode.None;
    }
    public void Resume() {
        gamePaused = false;
        Cursor.lockState = CursorLockMode.Locked;
    }
}

Есть идеи, как это предотвратить? Любая помощь будет принята с благодарностью :)

1 Ответ

1 голос
/ 27 мая 2020
Input.GetAxis("Mouse X") //returns the mouse delta!

Это происходит, потому что курсор перемещается (например) от края экрана к центру, что дает огромные числа (screenCenter - screenEdge => огромная дельта). Чтобы предотвратить это:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FirstPersonController : MonoBehaviour
{
    bool gamePaused = false;
    bool afterPause = false;

    void Start() {
        Cursor.lockState = CursorLockMode.Locked;
    }

    void Update() {
        if (!gamePaused)
            CharacterRotation();
    }

    void CharacterRotation() {
        if(afterPause)
        {
            afterPause = false;
            return;
        }
         transform.Rotate(0, Input.GetAxis("Mouse X") * 10, 0);
    }

    public void Pause() {
        gamePaused = true;
        Cursor.lockState = CursorLockMode.None;
    }
    public void Resume() {
        gamePaused = false;
        afterPause = true;
        Cursor.lockState = CursorLockMode.Locked;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...