Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 自上而下相机角度聚焦_Unity3d_Camera_Topdown - Fatal编程技术网

Unity3d 自上而下相机角度聚焦

Unity3d 自上而下相机角度聚焦,unity3d,camera,topdown,Unity3d,Camera,Topdown,我正在做一个自上而下的游戏,相机成40度角。我想做的是,当我单击一个游戏对象时,它将移动相机,并将对象定位在相机视图中心的左侧,而不考虑其旋转。这样我就可以把菜单放在右边了。如何获取角度相机的偏移量,以便对象位于相机视图的左侧()? 现在我使用的是lerp,但由于摄像机角度的原因,它超出了目标。对不起,我是unity3d的新手 transform.position = Vector3.Lerp(transform.position, new Vector3(target.transform.po

我正在做一个自上而下的游戏,相机成40度角。我想做的是,当我单击一个游戏对象时,它将移动相机,并将对象定位在相机视图中心的左侧,而不考虑其旋转。这样我就可以把菜单放在右边了。如何获取角度相机的偏移量,以便对象位于相机视图的左侧(

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

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

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

在您的情况下,可以将中的简化为二维空间:

找到那个应该不难

  • 使用相机的
    transform.forward
    ,获取相机所望方向的矢量(Vector3 cameraDir)

  • 围绕y轴旋转
    水平视野/4

  • Vector3 cameraDirRotated=四元数角度轴(hFov/4f,Vector3.up)*cameraDir

  • -cameraDirRotated
    将是从立方体到您要查找的点P的向量,您还可以缩放它:
    Vector3 PtoMoveTo=cube.transform.position-cameraDirRotated.normalized*5f
  • 全部:

    然后:

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

    为了提高性能,如果立方体不移动,u可以保存该目标向量一次。搜索网页如何精确计算水平视场。将速度乘以Time.timeDelta,如果u lerp在Update()中。

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

    在您的情况下,可以将中的简化为二维空间:

    找到那个应该不难

  • 使用相机的
    transform.forward
    ,获取相机所望方向的矢量(Vector3 cameraDir)

  • 围绕y轴旋转
    水平视野/4

  • Vector3 cameraDirRotated=四元数角度轴(hFov/4f,Vector3.up)*cameraDir

  • -cameraDirRotated
    将是从立方体到您要查找的点P的向量,您还可以缩放它:
    Vector3 PtoMoveTo=cube.transform.position-cameraDirRotated.normalized*5f
  • 全部:

    然后:

    transform.position = Vector3.Lerp(transform.position, FindCameraTarget(target, 90f) , 2f * Time.deltaTime);
    
    为了提高性能,如果立方体不移动,u可以保存该目标向量一次。搜索网页如何精确计算水平视场。如果u lerp处于更新()中,则将速度乘以Time.timeDelta