【问题标题】:Imposing a limit on translation movement对翻译运动施加限制
【发布时间】:2015-10-23 19:44:18
【问题描述】:

我的相机上有一个缩放功能,当我在屏幕上捏手指时,它可以在 Z 轴上移动。但是,当相机移动到任何大于零的值时,它会对我的相机代码的其余部分(运动、轨道)产生不利影响。

我在一个地方放了一个布尔值,一旦它达到某个值,它就会停止我的相机移动,但这会让它变得非常跳跃。而且,如果您捏合,相机仍将移动超过该值,直到您松开为止。

所以我现在要做的是使用 Mathf.Clamp 来限制它可以移动的范围,但我不确定我是否正确使用它。这是我现在的方法:

void CameraZoom()
{
    // if fingers moved certain distance apart, zoom
    float dot = Vector2.Dot(Input.GetTouch(0).deltaPosition.normalized, Input.GetTouch(1).deltaPosition.normalized);

    if (dot < fingerDistance)
    {

        // Store both touches.
        Touch touchZero = Input.GetTouch(0);
        Touch touchOne = Input.GetTouch(1);

        Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
        Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition;

        float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
        float touchDeltaMag = (touchZero.position - touchOne.position).magnitude;
        float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag;
       // apply zoom to camera
       transform.Translate(0, 0, -deltaMagnitudeDiff * perspectiveZoomSpeed);
       // clamp movement
        transform.position = new Vector3(transform.position.x, transform.position.y, Mathf.Clamp(0, 0, maxDistance));

        }
    }
}

我只希望它影响 Z 轴,但是当我缩放时,我的整个装备都会移动。我做错了什么?

更新

我已将我的代码更改为以下,但现在当我缩放时,它只是在两点之间跳转,我无法再缩放。

新代码:

transform.Translate(0, 0, -deltaMagnitudeDiff * perspectiveZoomSpeed);
Vector3 pos = transform.position;
pos.z = Mathf.Clamp(transform.position.z, 0.0f, -200.0f);
transform.position = pos;

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    检查documentation 中的Mathf.Clamp。您以错误的顺序使用参数,这会破坏函数的内部实现。 min 值应该是第二个,max 值应该是第三个。因此,将您的线路更改为此应该会停止奇怪的行为:

    pos.z = Mathf.Clamp(transform.position.z, -200.0f, 0.0f);
    

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 2017-11-06
      • 2014-04-28
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      相关资源
      最近更新 更多