Screen.width, кажется, отклоняется от центра экрана, а не относительно размера экрана в полноэкранном режиме. - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть сценарий C #, управляющий моей основной камерой, в моей перспективе сверху вниз для игры Tower Defense, над которой я работаю.Насколько мне известно, Screen.width предполагается масштабировать в соответствии с размером экрана, поэтому при использовании Screen.width - требуемая толщина границы в качестве квалификатора для перемещения камеры должна срабатывать из указанного местоположения на краю толщины границы экрана в соответствующем направлении.

Проблема, с которой я сталкиваюсь, заключается в том, что независимо от размера экрана, перемещение мыши над средней точкой экрана вправо заставляет камеру смещаться в этом направлении.Это исключает прямую передачу влево - ведет себя так, как задумано с тем же кодом.

Я предполагаю, что левая сторона работает, потому что число пикселей экрана начинается с нижнего левого, и по какой-то причине Screen.width ограничивает его масштабирование относительно экрана Screen.height, но яЯ не могу найти кого-то, кто действительно сталкивается с той же проблемой в 3D-проекте, что заставляет меня думать, что я упускаю из виду нечто глупоеЯ видел кое-что об орфографической камере, применяемой к 2d проектам, но подумал, что я бы здесь что-то снял на случай, если кто-то узнает, что случилось.

Вот мой код:

using UnityEngine;

public class CameraController : MonoBehaviour {
    private bool doMovement = true;

    public float panSpeed = 20f;
    public float panBorderThickness = 10f;

    public float scrollSpeed = 5f;
    public float minY = 40f;
    public float maxY = 120f;


    void Update () {

        if (GameManager.gameIsOver)
        {
            this.enabled = false;
            return;
        }

        if (Input.GetKeyDown(KeyCode.Escape))
            doMovement = !doMovement;

        if (!doMovement)
            return;

        if (Input.GetKey("d") || Input.mousePosition.x >= Screen.height - panBorderThickness)
        {
            transform.Translate(Vector3.forward * panSpeed * Time.deltaTime, Space.World);
        }
        if (Input.GetKey("a") || Input.mousePosition.x <= panBorderThickness)
        {
            transform.Translate(Vector3.back * panSpeed * Time.deltaTime, Space.World);
        }
        if (Input.GetKey("s") || Input.mousePosition.y <= panBorderThickness)
        {
            transform.Translate(Vector3.right * panSpeed * Time.deltaTime, Space.World);
        }
        if (Input.GetKey("w") || Input.mousePosition.y >= Screen.width - panBorderThickness)
        {
            transform.Translate(Vector3.left * panSpeed * Time.deltaTime, Space.World);
        }

        float scroll = Input.GetAxis("Mouse ScrollWheel");

        Vector3 pos = transform.position;

        pos.y -= scroll * 1000 * scrollSpeed * Time.deltaTime;
        pos.y = Mathf.Clamp(pos.y, minY, maxY);

        transform.position = pos;

    }
}

1 Ответ

0 голосов
/ 09 декабря 2018

use

Screen.height-Input.mousePosition.y

y в положении экрана и на входе противоположны, слева не справа, а вверх вниз.

...