我用相机以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);
答案 0 :(得分:2)
首先,您应首先找到相机将移动/翻动的点。
在你的情况下可以简化为2D-Space:
找到那个并不难。
使用相机transform.forward
获取相机正在查看方向的矢量(Vector3 cameraDir)
围绕y轴旋转horizontal fov / 4
:
Vector3 cameraDirRotated = Quaternion.AngleAxis(hFov/4f, Vector3.up) * cameraDir;
-cameraDirRotated
将是来自多维数据集的向量要点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乘以速度。