C# 夹紧对角线移动/夹紧照相机变焦
我试图使我的相机放大和缩小,但我想锁定的数额,它可以缩放。我尝试了一些事情,尽管它们没有达到我所希望的结果。我的相机在X轴上旋转了65度,我想沿着对角线轴移动它。提前谢谢C# 夹紧对角线移动/夹紧照相机变焦,c#,unity3d,C#,Unity3d,我试图使我的相机放大和缩小,但我想锁定的数额,它可以缩放。我尝试了一些事情,尽管它们没有达到我所希望的结果。我的相机在X轴上旋转了65度,我想沿着对角线轴移动它。提前谢谢 Camera.main.transform.Translate(0,0, Input.mouseScrollDelta.y * zoomSpeed * Time.deltaTime); 上面的代码以我想要的方式缩放相机,尽管我不确定如何钳制这些值 cameraDistance += Input.mouseScroll
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谢谢你的评论,虽然那样我也需要计算正确的高度,但我不知道该怎么做。谢谢,非常有用,解释得非常好!