我有一个脚本,通过使用鼠标中键控制Unity中的正交摄像机平移运动。世界中心(0,0,0)的空GameObject(例如名称为MainCamPivot(请参见图片))充当摄像机的父级。相机本身具有Vector3的局部欧拉角(45f,225f,0f)。我可以使用此脚本(连接到相机)在X轴和Y轴上很好地平移/移动相机:
public float panSpeed = 0.05f;
private Vector3 lastMousePos;
void Start ()
{
lastCamPos = transform.position;
}
void Update()
{
if(Input.GetMouseButtonDown(2))
{
lastMousePos = Input.mousePosition;
}
if(Input.GetMouseButton(2))
{
Vector3 touchDeltaPosition = Input.mousePosition - lastMousePos;
transform.Translate(-touchDeltaPosition.x * panSpeed, -touchDeltaPosition.y * panSpeed, 0);
lastMousePos = Input.mousePosition;
}
// To limit the orthographic camera panning movement:
if(transform.localPosition.x < 10f) transform.localPosition = new Vector3(10f, transform.localPosition.y, 16.3f);
if(transform.localPosition.x > 23f) transform.localPosition = new Vector3(23f, transform.localPosition.y, 16.3f);
if(transform.localPosition.y < 15f) transform.localPosition = new Vector3(transform.localPosition.x, 15f, 16.3f);
if(transform.localPosition.y > 28f) transform.localPosition = new Vector3(transform.localPosition.x, 28f, 16.3f);
}
为限制相机平移移动,我为相机的X和Y位置设置了一些限制。问题是摄像机的Z位置值总是在变化,因此为摄像机的Z位置设置固定位置会使摄像机像对齐下图一样平移/移动:
使用脚本编写正确限制正交相机平移运动的最佳方法是什么? (如下图所示)
答案 0 :(得分:0)
如果不是使用枢轴,请在玩家按住按钮时根据鼠标位置的不同设置摄像机的位置。您在上面尝试做的是相对于块状物体移动相机。相反,您应该相对于自身移动相机。
当用户点击按钮并在LateUpdate()中获取鼠标位置,而玩家仍按住按钮,请致电:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMovement : MonoBehaviour {
private Vector3 InitialClickPosition;
private bool Pan = false;
private const int MOUSE_BUTTON = 0;
private void LateUpdate()
{
if (Input.GetMouseButtonDown(MOUSE_BUTTON))
{
InitialClickPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
else if (Input.GetMouseButton(MOUSE_BUTTON))
{
var difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - Camera.main.transform.position;
Camera.main.transform.position = InitialClickPosition - difference;
}
}
}
有效。