首先,您应该首先找到您的相机将移动/移动到的点。
在您的情况下,可以简化为 2D 空间:

找到那个应该不难。
使用transform.forward
相机获取相机正在查看的方向的矢量(Vector3 cameraDir)
horizontal fov / 4
绕 y 轴旋转:
Vector3 cameraDirRotated = Quaternion.AngleAxis(hFov/4f, Vector3.up) * cameraDir;

-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。