【发布时间】: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;
【问题讨论】: