Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 夹紧对角线移动/夹紧照相机变焦_C#_Unity3d - Fatal编程技术网

C# 夹紧对角线移动/夹紧照相机变焦

C# 夹紧对角线移动/夹紧照相机变焦,c#,unity3d,C#,Unity3d,我试图使我的相机放大和缩小,但我想锁定的数额,它可以缩放。我尝试了一些事情,尽管它们没有达到我所希望的结果。我的相机在X轴上旋转了65度,我想沿着对角线轴移动它。提前谢谢 Camera.main.transform.Translate(0,0, Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime); 上面的代码以我想要的方式缩放相机,尽管我不确定如何钳制这些值 cameraDistance += Input.mouseScroll

我试图使我的相机放大和缩小,但我想锁定的数额,它可以缩放。我尝试了一些事情,尽管它们没有达到我所希望的结果。我的相机在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;
上面的代码钳制了这个值,并使我的旋转集中在玩家身上,尽管这会使视图扭曲很多

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


您仍然可以使用第一行代码,只需添加一些逻辑即可

//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);
}
//检查摄像机是否在边界内
如果(矢量3.距离(Camera.main.transform.position,targetObject.position)>=MinCameradInstance&&
Vector3.距离(Camera.main.transform.position,targetObject.position)MaxCameradInstance){//检查相机是否离目标太远
Camera.main.transform.Translate(0,0,Vector3.Distance(Camera.main.transform.position,targetObject.position)-MaxCameradInstance+Mathf.Epsilon);
}
我添加了一个targetObject(变换变量),它表示计算距离的对象

将其更改为任意对象或矢量3以旋转摄影机。例如:如果是原点,则将向量3.0放入
targetObject.position


另外两个if语句钳制值,以便摄影机不会离
minCameradInstance
maxCameradInstance
值太近或太远。

新矢量3(0,-CameradInstance,0)在y轴上移动,但我想您更喜欢在z轴上移动吗?尝试新的Vector3(0,你想要的任何高度,-CameradInstance)@Absize谢谢你的评论,虽然那样我也需要计算正确的高度,但我不知道该怎么做。谢谢,非常有用,解释得非常好!