夹具对角线移动/夹具相机变焦

时间:2016-07-23 16:30:22

标签: c# unity3d

我正在尝试让我的相机放大和缩小,但我想锁定它可以放大的数量。虽然我没有达到我希望的结果,但我尝试了一些事情。我的相机坐在X轴上旋转65度,我想沿着对角轴移动它。提前谢谢!

Camera.main.transform.Translate(0,0, Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime);

上面的代码以我想要的方式缩放相机,虽然我不确定如何钳制数值。

    cameraDistance += Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime;
    cameraDistance = Mathf.Clamp(cameraDistance, minCameraDistance, maxCameraDistance);
    Camera.main.transform.localPosition = (new Vector3(0, -cameraDistance, 0));

上面的代码会对值进行限制,但只会向上移动

    cameraDistance += Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime;
    cameraDistance = Mathf.Clamp(cameraDistance, minCameraDistance, maxCameraDistance);
    Camera.main.fieldOfView = -cameraDistance;

上面的代码会对值进行限制并使我的旋转专注于播放器,尽管它会使视图扭曲太多。

  

请注意!我绝对不想改变我的相机视野!

1 个答案:

答案 0 :(得分:1)

您仍然可以使用有效的第一行代码,只需添加更多逻辑。

//Checks if camera is inside of bounds
if(Vector3.Distance(Camera.main.transform.position, targetObject.position) >= minCameraDistance &&
   Vector3.Distance(Camera.main.transform.position, targetObject.position) <= maxCameraDistance) {
    //Do Translation
    Camera.main.transform.Translate(0, 0, Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime);
}
else if (Vector3.Distance(Camera.main.transform.position, targetObject.position) < minCameraDistance) { //Checks if camera is too close to the target
    Camera.main.transform.Translate(0, 0, Vector3.Distance(Camera.main.transform.position, targetObject.position) - minCameraDistance + Mathf.Epsilon);
}
else if (Vector3.Distance(Camera.main.transform.position, targetObject.position) > maxCameraDistance) { //Check if the camera is too far from the target
    Camera.main.transform.Translate(0, 0, Vector3.Distance(Camera.main.transform.position, targetObject.position) - maxCameraDistance + Mathf.Epsilon);
}

我添加了一个targetObject(变换变量),它表示计算距离的对象。

将其更改为任何对象或Vector3以旋转相机。例如:如果它是来源Vector3.zero而不是targetObject.position

另外两个if语句会限制值,因此相机不会离minCameraDistancemaxCameraDistance值太近或太远。