Отобразить полный объект с камеры с определенным вращением в единстве C # - PullRequest
0 голосов
/ 21 мая 2019

У меня есть различные виды объектов с переменными размерами и размещенные в разных местах сцены.Я хочу сфокусировать / отобразить каждый объект с помощью камеры с жестким поворотом кода (поворот на север).Как и при конкретном повороте камеры, я хочу сфокусировать объект, который он полностью показывает, на камеру и центр экрана.По этой причине я написал этот фрагмент кода, который 1

  1. Получить позицию за конкретным объектом фокуса, используя TransformPoint

  2. .высота, используя наибольшее значение extent из bound, чтобы отобразить максимальную площадь объекта.

  3. Назначьте position и фиксированное значение rotation

     Vector3 dest = destination.transform.TransformPoint(0, 0, behindPositionDistance);// GetBehindPosition(destination.transform, behindPositionDistance, elevation);
     Debug.Log(dest);
     float eleveMax = Mathf.Max(destination.GetComponent<MeshRenderer>().bounds.extents.x, destination.GetComponent<MeshRenderer>().bounds.extents.z);
     dest = new Vector3(dest.x, eleveMax, dest.z);
     camera.transform.position = dest;
     camera.transform.rotation = lookNorth;
    

Но проблема в том, что он не работает точно со всеми объектами, так как каждый объект находится в разном положении и измерении.Я хочу сфокусировать весь объект с помощью камеры, но без изменения поворота.

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Если вы можете использовать орфографическую камеру, вы можете динамически установить orthographicSize камеры на основе size из bounds GameObject.Это, вероятно, самое простое решение.

Если вам нужна перспективная камера, вы можете получить Plane s или углы усечения камеры через GeometryUtility.CalculateFrustumPlanes(Camera.main) или Camera.CalculateFrustumCorners и использовать результаты от одного до ручного.проверьте, что ваш Bounds полностью внутри.

С помощью перспективной камеры вы также можете рассчитать необходимое расстояние от объекта на основе размера границ объекта и поля зрения камеры.Если я не ошибаюсь, это будет что-то вроде distance = 0.5 * size / tan(0.5 * fov), но функция не должна быть точной;это просто должно работать для вашей камеры.В качестве альтернативы, вы можете поддерживать постоянное расстояние и вычислять FOV по размеру объекта, хотя я бы не рекомендовал этого, потому что частые FOV изменяют звучание, дезориентирующее зрителя;я хочу сказать, что есть много вариантов.

0 голосов
/ 21 мая 2019

Возможно, создайте пустой игровой объект как дочерний объект ваших объектов.Используйте это как позицию вашей камеры во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...