自上而下的相机焦距

时间:2017-07-09 07:46:56

标签: unity3d camera topdown

我用相机以40度角进行自上而下的比赛。我想要做的是当我点击一个游戏对象时,它将移动摄像机并将对象放置在摄像机视图中心的左侧,而不管它是否旋转。这样我就可以在右侧放置一个菜单。如何获得倾斜相机的偏移量,使物体位于相机视图的中间左侧?

现在我使用lerp但由于摄像机角度,它会超过目标。对于noob问题我很抱歉,我是unity3d的新手。

transform.position = Vector3.Lerp(transform.position, new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z), 0.1f);

enter image description here

1 个答案:

答案 0 :(得分:2)

首先,您应首先找到相机将移动/翻动的点。

在你的情况下可以简化为2D-Space:

point P you're looking for

找到那个并不难。

  1. 使用相机transform.forward获取相机正在查看方向的矢量(Vector3 cameraDir)

  2. 围绕y轴旋转horizontal fov / 4

  3. Vector3 cameraDirRotated = Quaternion.AngleAxis(hFov/4f, Vector3.up) * cameraDir;

    enter image description here

    1. -cameraDirRotated将是来自多维数据集的向量要点P你正在寻找,你也可以扩展它: Vector3 PtoMoveTo = cube.transform.position - cameraDirRotated.normalized * 5f;
    2. 全:

      Vector3 FindCameraTarget(Transform targetObj, float hFov)
      {
          Vector3 cameraDir = transform.forward;
          Vector3 cameraDirRotated = Quaternion.AngleAxis(hFov / 4f, Vector3.up) * cameraDir;
          Vector3 target = targetObj.transform.position - cameraDirRotated.normalized * 5f;
          return target;
      }
      

      然后:

      transform.position = Vector3.Lerp(transform.position, FindCameraTarget(target, 90f) , 2f * Time.deltaTime);
      

      对于性能,如果Cube不移动,你可以保存一次目标矢量。搜索网页如何精确计算水平fov。如果你在Update()中得到lerp,则按Time.timeDelta乘以速度。