我正在寻找一种解决方案,通过沿着前方移动相机,如何在Unity中进行完美的捏缩放:
设置: 水平平面以原点为中心,包含所有游戏对象。 具有FOV 10的透视摄像机,在(10,10,10)处向下俯视45度角,使其看向原点(围绕轴向上旋转45度,以实现此目的)。
我需要什么: 当我将两根手指放在屏幕上时,我用它们触摸两个游戏对象 - 因此手指下的屏幕坐标对应于某些世界坐标。当我进行捏合运动(移动两个手指或只有一个)时,我希望新的屏幕坐标对应于整个交互开始时手指下的相同世界坐标。 因此,为了进一步简化 - 每当我用两根手指触摸屏幕时,我希望与我手指下的屏幕坐标对应的世界坐标始终保持在手指下(允许非常小的误差)。
我正在寻找的这种完美变焦的一个例子可以在Supercell的手机游戏Boom Beach中看到。
我已经尝试沿着它的前向矢量移动相机并重新定位它并且我得到了相当不错的结果,但几乎总是游戏对象在“滑动”下面远离我的手指,这在某些点不再是在下面他们。如果有一个数学解决方案会很好,但如果有必要计算答案(通过一些搜索),那么这是完全没问题。
如果设置/方案不明确,我可以提供一些草图来澄清它。
希望有人可以帮助我! :)答案 0 :(得分:1)
我会设置一个系统,用于检测用户何时放大和缩小,如果您使用GameObjects来确定手指在哪里,使用Vector3.distance很容易。之后,我会创建一个功能,通过Vector3.MoveTowards(摄像机位置,所需位置,移动速度)将摄像机移近所需的缩放级别,我将设置"移动速度"作为mathf.sqrt(vector3.distance(Camera position,Desired position)); 至于"期望的位置"我会将Vector3(位置)设置为表示最大和最小缩放级别的两个游戏对象之间的一条线。 编辑:有了这个,你应该有一个非常好的相机系统