У меня есть сценарий 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;
}
}