在 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 中放大和缩小的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android CardView中放大和缩小布局

QGraphicsScene 放大和缩小

录制iphone时视频放大和缩小

Eclipse 字体缩小和放大问题

如何使用鼠标滚轮修复放大和缩小?

如何放大并返回动画android?