在HoloWorld中调整画布菜单大小和比例

时间:2017-08-08 08:49:00

标签: c# unity3d canvas camera hololens

以下脚本应该放大世界空间中的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 个答案:

答案 0 :(得分:0)

将比率应用于某物时。该比率是基于两件事的比较来计算的。在这种情况下,您将u和菜单之间的距离与u和菜单之间的基线距离进行比较。所以你需要固定距离来比较你的实际距离。

视锥体实际上是相机产生的锥状形状(尖端从相机开始)并且它将渲染该锥体内的任何东西。如果您不熟悉相机,它的尺寸将始终相同。如果你想要获得平截头体高度,你需要找出物体在锥体中的位置。然后找出锥形切片的尺寸。

最简单的解决方案; 保留平截头体的高度,你的解决方案非常简单;玩家接近增加规模。副Versa