在 Unity 中放大和缩小
Posted
技术标签:
【中文标题】在 Unity 中放大和缩小【英文标题】:Zoom In & Zoom Out in Unity 【发布时间】: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 来放大缩小。但我想使用翻译或移动相机本身来做到这一点。
【问题讨论】:
【参考方案1】:因此,您的问题在于计算 screenToViewPort 点。 不如试试这个..
if (Input.GetMouseButtonDown(0))
mInitialPosition = Input.mousePosition.y;
if (Input.GetMouseButton(0))
mChangedPosition = Input.mousePosition.y;
if (mChangedPosition == mInitialPosition)
return;
if (mChangedPosition < mInitialPosition)
Zoom((mZoomSpeed * -1f) * Time.deltaTime);
if (mChangedPosition > mInitialPosition)
Zoom(mZoomSpeed * Time.deltaTime);
private void Zoom(float inZoomSpeed)
transform.Translate(mCamRef.transform.position.z * inZoomSpeed * transform.forward);
不确定 ScreenToViewport 点的工作原理...但我想这段代码应该为您带来魔力...这里我只是直接在单击并按住时获取 mouse.y 值并执行与您相同的功能做了并且还告诉它当两个 y 值相同并返回函数时不要做任何事情......所以这意味着你的代码本身已经拥有一切......祝你有美好的一天
【讨论】:
以上是关于在 Unity 中放大和缩小的主要内容,如果未能解决你的问题,请参考以下文章