【问题标题】:Move the camera so that all objects are in the camera's field of view移动相机,使所有物体都在相机的视野中
【发布时间】:2020-07-29 04:04:15
【问题描述】:

select objects

Camera is moved but top cut 移动相机,使所有物体都在相机的视野中

我想让不是选定对象的对象不可见,并尽可能放大它们,同时使所有可见对象可见

Vector3 averagePos=Vector3.zero;
    for (int i = 0; i < set[num].Count; i++)
    {
        objectManager.SetActive(set[num][i], true);
        averagePos += objectManager.ReturnPos(set[num][i]);
    }
    averagePos /= set[num].Count; 

如果 (move_On) {

        angle += Time.deltaTime;
        if (angle > 0.01)
            angle = 0.009f;
        //   transform.position = Vector3.SmoothDamp(transform.position, destPos, ref velocity, smoothTime);
        Vector3 ve3=Vector3.Lerp(transform.position, destPos, angle);
        Debug.Log(Vector3.Distance(ve3, destPos));
        if (Vector3.Distance(ve3,destPos)>1)
            transform.position = Vector3.Lerp(transform.position, destPos, angle);
    } 

【问题讨论】:

  • 物体 x y z 的最高和最低位置要计算,我们需要平滑移动相机,将相机的左下角和右上角坐标分开并放在那个位置。而且这个相机的位置旋转不固定我不知道我正在尝试解决这个问题
  • lopespm.github.io/libraries/games/2018/12/27/… 这个网站例子有用吗? ... 英语不容易

标签: unity3d camera


【解决方案1】:
    centerOfPos = new Vector3((maxPosX + minPosX) / 2, (maxPosY + minPosY) / 2, 0);
    Camera.main.transform.LookAt(centerOfPos);
    float hoizontalCamZ = (maxPosY + 1 - minPosY) / Mathf.Cos(Camera.main.fieldOfView / 2 * Mathf.Deg2Rad);
    float verticalCamZ = (maxPosX + 1 - minPosX) / Mathf.Cos
        (Mathf.Atan(Mathf.Tan(Camera.main.fieldOfView / 2 * Mathf.Deg2Rad)));


    if (hoizontalCamZ < verticalCamZ)
        camZ = verticalCamZ;
    else
        camZ = hoizontalCamZ;


    Vector3 newCamPos = new Vector3(0, 0, -camZ);

【讨论】:

    猜你喜欢
    • 2017-11-20
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2014-05-27
    • 2017-02-20
    相关资源
    最近更新 更多