我正在尝试让我的相机放大和缩小,但我想锁定它可以放大的数量。虽然我没有达到我希望的结果,但我尝试了一些事情。我的相机坐在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;
上面的代码会对值进行限制并使我的旋转专注于播放器,尽管它会使视图扭曲太多。
请注意!我绝对不想改变我的相机视野!
答案 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语句会限制值,因此相机不会离minCameraDistance
和maxCameraDistance
值太近或太远。