对翻译运动施加限制

时间:2015-10-23 09:36:42

标签: c# unity3d

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

我把一个bool放在一个地方,一旦它达到一定的值就会阻止我的相机移动,但它会使它非常跳跃。如果你的捏,相机仍将移动超过值,直到你放手。

所以我现在要做的是使用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;

1 个答案:

答案 0 :(得分:1)

检查date points type name rank year_week ------------------------------------------------- 23.10.2014 2000 1 Fish 2 201442 12.10.2014 2500 1 Fish 2 201441 16.10.2014 800 2 Fish 2 201441 的{​​{3}}。您正在以错误的顺序使用参数,这会破坏函数的内部实现。 Mathf.Clamp值应为第二个值,min值应为第三个值。因此,将您的行更改为此应该可以阻止奇怪的行为:

max