首页 文章

如何进行完美的捏缩放(Unity 3D)

提问于
浏览
4

我正在寻找一种解决方案,通过沿着前方移动相机,如何在Unity中进行完美的捏缩放:

设置:以所有游戏对象为中心的水平平面 . 具有FOV 10的透视摄像机,在(10,10,10)处向下俯视45度角,使其看向原点(围绕轴向上旋转45度,以实现此目的) .

我需要的是:当我将两根手指放在屏幕上时,我用它们触摸两个游戏对象 - 因此手指下的屏幕坐标对应于某些世界坐标 . 当我进行捏合运动(移动两个手指或只有一个)时,我希望新的屏幕坐标对应于整个交互开始时手指下的相同世界坐标 . 所以为了进一步简化 - 每当我用两根手指触摸屏幕时,我希望对应于我手指下的屏幕坐标的世界坐标始终保持在手指下方(允许非常小的误差范围) .

我正在寻找的这种完美变焦的一个例子可以在Supercell的手机游戏Boom Beach中看到 .

我已经尝试沿着它的前向矢量移动相机并重新定位它,我得到了相当不错的结果,但几乎总是游戏对象在“滑动”下面远离我的手指,这在某些点不再在它们下面 . 如果有一个数学解决方案,那将是很好的,但如果有必要计算答案(通过一些搜索例子),那么这是完全正常的 .

如果设置/场景不明确,我可以提供一些草图来澄清它 .

希望可以有人帮帮我! :)

1 回答

  • 1

    我 Build 了一个系统,可以检测用户何时放大和缩小,如果您使用GameObjects来确定手指在哪里,使用Vector3.distance很容易 . 之后,我会创建一个功能,使用Vector3.MoveTowards(摄像机位置,所需位置,移动速度)将摄像机移近所需的缩放级别,我将“移动速度”设置为mathf.sqrt(vector3) .distance(相机位置,所需位置));至于“所需位置”,我会将Vector3(位置)设置为两个游戏对象之间的一条线,表示您的最大和最小缩放级别 . 编辑:有了这个,你应该有一个非常好的相机系统

相关问题