Отрегулируйте размер и масштаб меню холста в HoloWorld
Следующий скрипт должен увеличить UI Canvas
меню в мировом пространстве, так что, когда пользователь далеко, меню увеличивается в размере и масштабе, и когда пользователь приближается к нему, оно уменьшается пропорционально.
На самом деле мы пытаемся обновить высоту меню до высоты усеченной камеры, чтобы меню всегда занимало точно вертикальную высоту обзора камеры.
Это путь к решению? Что мы делаем неправильно, что новый размер не соответствует высоте усеченного кулачка? Мы поместили этот скрипт на HoloLensCamera
в сцене из приложения...
public class Adjuster : MonoBehaviour
{
public RectTransform _rectTransform;
private float _ratio;
private float _pixPerUnit = 100f;
private Vector3 _gazeOrigin;
private Vector3 _uiOrigin;
private float _frustumHeight;
private float _distance;
public bool _reSizeCanvas;
private Camera _camera;
private float _canvasWidth;
private float _canvasHeight;
private void Start()
{
if (_reSizeCanvas)
{
Vector2 initialSize = _rectTransform.sizeDelta;
_ratio = _rectTransform.rect.width / _rectTransform.rect.height;
}
}
private void LateUpdate()
{
_gazeOrigin = transform.position;
_uiOrigin = _rectTransform.position;
_distance = Vector3.Distance(_gazeOrigin, _uiOrigin);
_frustumHeight = 2.0f * _distance * Mathf.Tan( this.GetComponent<Camera>().fieldOfView * 0.5f * Mathf.Deg2Rad );
_rectTransform.sizeDelta = new Vector2(_ratio * _frustumHeight * _pixPerUnit, _frustumHeight * _pixPerUnit);
}
}
1 ответ
При применении соотношения к чему-либо. Это соотношение рассчитывается на основе сравнения двух вещей. В этом случае вы сравниваете расстояние между u и меню с базовым расстоянием между u и меню. Так что вам нужно фиксированное расстояние, чтобы сравнить фактическое расстояние с.
Frustum - это буквально конусообразная форма, которую порождает камера (с наконечником, начинающимся у камеры), и она будет рендерить все, что находится внутри этого конуса. Его размеры всегда будут одинаковыми, если не связываться с камерой. Если вы хотите задействовать высоту усеченного конуса, вам нужно выяснить, где находится объект в этом конусе. Затем выясните размеры этого среза конуса.
Самое простое решение; Не указывайте высоту усеченного конуса, и ваше решение будет очень простым; Игрок становится ближе увеличивать масштаб. Наоборот