这很奇怪;而且我不知道如何实际修复它。
我使用一组限制(最小和最大),以了解滚轮可以放大或缩小相机的程度。问题是相机卡住了,因为我指定只有当y位置在最小值和最大值之间时才会发生变焦。
使用鼠标滚轮时Unity总是超调;如果我设置1.0f,并滚动;最终结果最终为0.92;同样如果我将最大值设置为5.0f,并使用滚轮,则会超过5.1。
这会导致相机卡住,因为现在相机的y值设置超出限制,所以很明显它不会移动。
你如何真正避免Unity会超出实际限制?
这就是我使用的
float mouse = Input.GetAxis("Mouse ScrollWheel");
float zoom_speed = 1.0f;
if (transform.position.y <= 3f && transform.position.y >= 1f)
transform.Translate(0, -mouse * zoom_speed, mouse * zoom_speed, Space.World);
答案 0 :(得分:0)
因此,此代码使您的转换在世界空间中的minZoomPos和maxZoomPos之间传输。 currentZoom是标准化值,用于确定转换为minZoomPos的接近程度以及maxZoomPos的变量:
Vector3 minZoomPos = new Vector3(0, 1f, -3f); //transform's position when zoomed in all the way
Vector3 maxZoomPos = new Vector3(0, 3f, -1f); //position when zoomed out
float currentZoom = 0f; //this is normalized value >> 0 means it's zoomed all the way in, 1 means it's on all the way out
float zoom_speed = 1.0f; //if you keep these declarations in Update() function it will give you unnecessary overhead on garbage collection
void Update(){
currentZoom += Input.GetAxis("Mouse ScrollWheel") * zoom_speed;
currentZoom = Mathf.Clamp01(currentZoom);
//get point between minZoomPos and maxZoomPos depending on currentZoom
transform.position = Vector3.Lerp (minZoomPos, maxZoomPos, currentZoom);
}
答案 1 :(得分:0)
找到解决方案。
基本上,如果我低于或超过限制;我只是手动设定限制。不优雅,但有4行代码,我得到了我需要的东西。
我也改变了处理变焦的方式;因为我不需要在Y轴和Z轴上移动,所以我只需在Y轴上降低相机,这对我的场景更有效
float mouse = Input.GetAxis("Mouse ScrollWheel");
float zoom_speed = 1.0f;
if (transform.position.y <= 3f && transform.position.y >= 1f)
transform.Translate(0, -mouse * zoom_speed, 0);
if (transform.position.y < 1f)
transform.position = new Vector3(transform.position.x, 1f, transform.position.z)
if (transform.position.y > 3f)
transform.position = new Vector3(transform.position.x, 3f, transform.position.z)
有了这个,一旦改变它就会调整它的值,它发生得太快以至于相机不会抖动甚至轻微移动。很确定有更好的方法可以做到这一点,但这似乎现在有效。