【发布时间】:2021-11-12 06:40:45
【问题描述】:
所以,大家好。我是 Unity 的新手,我正在尝试一个非常简单的代码,允许玩家放大和缩小。这是它的代码:
[Header("Vertical Zooming")]
[SerializeField] private float zoomSpeed;
private void Update()
{
VerticalZooming();
}
private void VerticalZooming()
{
Vector3 initialPosition = new Vector3();
// bool canMove = false;
if (Input.GetMouseButtonDown(0))
{
initialPosition = mCamRef.ScreenToViewportPoint(Input.mousePosition);
Debug.Log(initialPosition.y);
}
if (Input.GetMouseButton(0))
{
Vector3 newPosition = mCamRef.ScreenToViewportPoint(Input.mousePosition);
Debug.Log("newPosition" + newPosition.y);
if (newPosition.y < initialPosition.y)
{
Zoom((zoomSpeed * Time.deltaTime) * -1f);
}
if (newPosition.y > initialPosition.y)
{
Zoom(zoomSpeed * Time.deltaTime);
}
intialPosition = newPosition;
}
}
private void Zoom(float inZoomSpeed)
{
transform.Translate(mCamRef.transform.position.z * inZoomSpeed * transform.forward);
}
所以,如果您看到上面的代码。在 mousebuttondown 上,我们记下初始位置,在按住鼠标按钮时,我们不断跟踪新位置。我想要的非常简单。参考我最初的鼠标单击,我检查我的新位置是否在 y 中更大,是的,我需要缩小。如果新位置低于 y 轴的初始位置。他们,我需要放大。我做了,但由于某种原因它不起作用。 这里有两个问题:
- 虽然如果新位置没有变化,即,即使我的新位置变量和初始位置变量都在同一个位置,我的相机也会移动(在我的情况下是缩小),这不应该发生。只有当我的 newPosition.y 变量大于 initialposition.y 时才会发生这种情况。我无法弄清楚为什么会这样。我尝试使用布尔条件来执行此操作,但失败了。
- 如果我在我的手机上玩这个测试.. 它只会朝着一个方向发展。在我的情况下,尽管我的放大条件满足,但它只会不断缩小。但是在统一游戏窗口中进行游戏测试时。当我的鼠标离开游戏屏幕时,放大工作。因为它只能在游戏屏幕之外工作。这就是它不能在移动设备中工作的原因,因为移动显示器之外没有空间。我不知道为什么会这样,也不知道如何克服。
告诉我为什么!我坚持了很长时间,没有任何想法。谢谢
如果有任何疑问,请告诉我。对不起,一个巨大的解释。只是想在这个问题上非常准确。 我见过有人建议通过使用 FOV 来放大缩小。但我想使用翻译或移动相机本身来做到这一点。
【问题讨论】: