Преобразование: неправильная ориентация мыши - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть следующий код мыши (C # с Unity), чтобы вращать камеру с помощью мыши (x, y и z).Но когда я поворачиваю камеру с помощью мыши, камера перемещается со смещением.

void Update()
{
    Turn();
    Thrust();
}

void Turn()
{
    float yaw = turnSpeed * Time.deltaTime * Input.GetAxis("Mouse X");  //Horizontal
    float pitch = turnSpeed * Time.deltaTime * Input.GetAxis("Mouse Y");  //Pitch
    float roll = turnSpeed * Time.deltaTime * Input.GetAxis("Roll") //Roll
    transform.Rotate(-pitch, yaw, -roll) 

}

Я хочу, чтобы камера двигалась точно с движением мыши (как FPS).Что не так с этим кодом?

РЕДАКТИРОВАТЬ

Пробовал решение из дубликата.когда я поворачиваю камеру более чем на +/- 180 градусов по оси x, у меня возникает проблема с блокировкой карданного подвеса (левый становится правым, а правый - левым).

public class Movement002 : MonoBehaviour {

public float xMoveThreshold = 1000.0f;
public float yMoveThreshold = 1000.0f;

public float yMaxLimit = 45.0f;
public float yMinLimit = -45.0f;


float yRotCounter = 0.0f;
float xRotCounter = 0.0f;

Transform player;

void Start()
{

    player = this.transform.parent.transform;
}

// Update is called once per frame
void Update()
{
    xRotCounter += Input.GetAxis("Mouse X") * xMoveThreshold * Time.deltaTime;
    yRotCounter += Input.GetAxis("Mouse Y") * yMoveThreshold * Time.deltaTime;
    //yRotCounter = Mathf.Clamp(yRotCounter, yMinLimit, yMaxLimit);
    //xRotCounter = xRotCounter % 360;//Optional
    player.localEulerAngles = new Vector3(-yRotCounter, xRotCounter, 0);
}

}

1 Ответ

0 голосов
/ 22 сентября 2018

Я нашел ваш ответ, здесь эта страница содержит класс mouselook, который представляет собой единый ресурс, который вы можете получить бесплатно с помощью демонстрационного пакета активов Unity.но вы можете просто взять скрипт здесь, если хотите.

немного больше о том, что вы делаете ... было бы проще, с точки зрения программирования, поставить сценарий на камеру, которая использует transform.lookAt()

 Vector3 point = new Vector3();
        Event   currentEvent = Event.current;
        Vector2 mousePos = new Vector2();

        // Get the mouse position from Event.
        // Note that the y position from Event is inverted.
        mousePos.x = currentEvent.mousePosition.x;
        mousePos.y = cam.pixelHeight - currentEvent.mousePosition.y;

        point = cam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, cam.nearClipPlane));
transform.LookAt(point);

Вы можете поместить это в свою камеру и дать этому водоворот.важно отметить:

  mousePos.y = cam.pixelHeight - currentEvent.mousePosition.y;

, потому что при конвертации из точки экрана в точку в вашем мире, а мышки у инвертированы в положение экрана, это переворачивает их для вас.удачи.

...