通过平移将中心透视相机放在两个对象上

时间:2015-04-28 20:11:18

标签: math unity3d unityscript

在Unity中,我有一个透视相机,我的场景中有两个变换,我希望相机完美地居中在屏幕上。相机将向左/向右/向上/向下平移到适当的位置。

到目前为止,我的方法是使用Camera.WorldToScreenPoint将变换位置转换为屏幕位置,并取其平均值来查找屏幕中点。从那里,我知道我想要将摄像机平移到该中点一定数量的单位。我遇到麻烦的是找出决定平移多少的公式(或者,这甚至不是确定这个的首选方法)。

1 个答案:

答案 0 :(得分:1)

我认为你的方法很棒。让我扩展这个想法。

enter image description here

这就是你的屏幕:D。蓝色圆圈是您想要对象的位置。有两种情况。我们将使用绿点作为缩放场景的示例。然后是用于平移场景的红点。

诀窍是,你想让点尽可能接近蓝色圆圈的圆周

让我们说你得到红点作为你的对象'屏幕位置。你必须将它们转移到中心。我们来计算CenterOfDots。然后计算它与CenterOfBlueCircle的差异。您在屏幕坐标中需要多少平底

所以你计算了平底锅。现在你想知道你需要多少缩放。让我们说这次你得到绿点。计算DistanceBetweenDots并将其与DiameterOfBlueCircle进行比较。你希望它们是一样的。所以它们的区别在于在屏幕坐标中需要多少缩放

有一个棘手的部分。现在您知道平移和缩放屏幕空间的程度。但是你需要在世界空间中移动相机。尝试使用几何魔法来解决它很好。但我讨厌头痛:D

相反,我会使用上面计算的数据迭代移动相机。只需将相机的局部x-y轴移向HowMuchPan,再乘以手动给定的系数PanSpeed即可。这将平稳过渡到相机。同样是缩放。这次您使用HowMuchZoom乘以手动给定的系数ZoomSpeed将相机移入其本地z轴。

希望它有所帮助。玩得开心:))