如何制作完美的捏合缩放(Unity 3D)

4
我正在寻找如何通过沿着摄像机的前进方向在Unity中实现完美的捏合缩放的解决方案:
设置: 水平面以原点为中心,所有游戏对象都在上面。 透视相机,FOV为10,偏移量为(10,10,10),以45度角向下看,所以它看向原点(还有一个绕指向上的轴旋转45度的旋转,以实现这一点)。
我需要什么: 当我用两个手指触摸屏幕时,我会用它们接触到两个游戏对象 - 因此,手指下的屏幕坐标对应于某些世界坐标。 当我进行捏合操作(使用移动两个手指或仅使用一个手指)时,我希望新的屏幕坐标对应于在整个交互开始时在手指下的相同世界坐标。 因此,为了更简化 - 每当我用两个手指触摸屏幕时,我希望与手指下的屏幕坐标相对应的世界坐标始终保持在手指下方(允许非常小的误差)。
我正在寻找的完美缩放示例可以在Supercell的移动游戏Boom Beach中看到。
我已经尝试沿着其前进向量移动和重新定位相机,并且获得了非常好的结果,但几乎总是在某些点上“滑动”不再在手指下方的游戏对象。 如果有数学解决方案,那将是很棒的,但如果需要计算答案(例如通过某些搜索),那么这完全没问题。
如果设置/场景不清楚,我可以提供一些草图来更清楚地说明它。
希望有人能帮助我! :)
1个回答

1
我会建立一个系统,检测用户是否正在缩放。如果您使用GameObject来确定手指的位置,那么可以轻松使用Vector3.distance完成。然后,我会创建一个函数,使用Vector3.MoveTowards(相机位置,所需位置,移动速度)将相机移动到所需的缩放级别,其中我将“移动速度”设置为mathf.sqrt(vector3.distance(相机位置,所需位置)); 至于“所需位置”,我会将其设置为两个游戏对象之间线段的分数,这些游戏对象表示您的最大和最小缩放级别。 编辑:有了这个系统,您应该拥有一个非常好的相机系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接