0

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

现在我使用lerp,但由于相机角度,它超出了目标。对不起,我是unity3d的新手。

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

在此处输入图像描述

4

1 回答 1

2

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

在您的情况下,可以简化为 2D 空间:

你要找的P点

找到那个应该不难。

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

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

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

在此处输入图像描述

  1. -cameraDirRotated将是从 Cube 到您要查找的 P 点的向量,您也可以对其进行缩放: Vector3 PtoMoveTo = cube.transform.position - cameraDirRotated.normalized * 5f;

满的:

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。

于 2017-07-09T12:45:14.423 回答