自上而下的相机焦点与角度
Topdown camera focus with angle
我正在用 40 度角的相机制作俯视游戏。我想要做的是当我点击一个游戏对象时,它会移动相机并将对象定位在相机视图中心的左侧,而不管它的旋转。这样我就可以在右侧放置一个菜单。如何获得倾斜相机的偏移量,以便对象位于相机视图的中间左侧?
现在我使用 lerp,但由于相机角度,它会超过目标。很抱歉这个菜鸟问题我是 unity3d 的新手。
transform.position = Vector3.Lerp(transform.position, new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z), 0.1f);
首先,您应该首先找到您的相机 move/lerp 到达的点。
在你的情况下可以简化为 2D-Space:
找到那个应该不难。
使用相机的 transform.forward
获取相机注视方向的矢量 (Vector3 cameraDir)
绕y轴旋转horizontal fov / 4
:
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);
为了提高性能,如果立方体不移动,您可以保存该目标向量一次。在网上搜索如何精确计算水平视野。如果您在 Update() 中运行,则将速度乘以 Time.timeDelta。
我正在用 40 度角的相机制作俯视游戏。我想要做的是当我点击一个游戏对象时,它会移动相机并将对象定位在相机视图中心的左侧,而不管它的旋转。这样我就可以在右侧放置一个菜单。如何获得倾斜相机的偏移量,以便对象位于相机视图的中间左侧?
现在我使用 lerp,但由于相机角度,它会超过目标。很抱歉这个菜鸟问题我是 unity3d 的新手。
transform.position = Vector3.Lerp(transform.position, new Vector3(target.transform.position.x, transform.position.y, target.transform.position.z), 0.1f);
首先,您应该首先找到您的相机 move/lerp 到达的点。
在你的情况下可以简化为 2D-Space:
找到那个应该不难。
使用相机的
transform.forward
获取相机注视方向的矢量 (Vector3 cameraDir)绕y轴旋转
horizontal fov / 4
:
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);
为了提高性能,如果立方体不移动,您可以保存该目标向量一次。在网上搜索如何精确计算水平视野。如果您在 Update() 中运行,则将速度乘以 Time.timeDelta。