【问题标题】:Adjust Canvas Menu Size and Scale in a HoloWorld在 HoloWorld 中调整画布菜单大小和比例
【发布时间】:2017-08-08 08:48:59
【问题描述】:

以下脚本应该在世界空间中放大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);
    }   
}

【问题讨论】:

  • 如果你没有保持你开始的原始距离,以及画布的原始尺寸,那么你如何制作比例并应用它呢?
  • @JeroenDeClercq 我在全息摄像机和菜单画布之间使用_distance 来计算截锥体高度,因此随着距离的变化,截锥体高度也会发生变化,因此画布应该适应它。我不希望两者之间的距离保持不变。我的意思是我不希望菜单跟随用户。如果用户走开,我只是希望它的大小变大。这是你的意思吗?
  • 我要问的是,因为你正在与你需要基线比较的东西进行比较。因为你正在缩放距离,所以需要基线距离来比较它。你在这样做吗?
  • 正是因为我在您的代码中看不到这一点。一旦你将它们相互比较以获得比率。将该比率应用于画布的原始大小。请注意,如果你不设置限制,逃跑时画布可能会变得非常大3
  • 如果我的回答对您有帮助,请接受该解决方案,或编写您自己的答案(如果您找到了其他解决方案),以便关闭问题。

标签: c# unity3d canvas camera hololens


【解决方案1】:

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

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

最简单的解决方案; 将截锥体高度排除在外,您的解决方案非常简单;玩家越来越近增加规模。反之亦然

【讨论】:

  • 您对这个解决方案有什么好运气还是没有达到预期的效果?
  • 我考虑了你的建议。我认为由于_distance 经常用于计算和更新截锥体高度,它的变化已经作为基线考虑在内。截锥体计算从初始距离开始,并随着凸轮越来越远而不断更新……因为我不尝试标记或广告牌,我不确定我是否需要那种基线比较。如果您同意,请告诉我。另外,我的帖子中还有一个小问题,如果你也能告诉我你对此的看法。干杯
  • 你在整个游戏过程中的任何时候都改变了相机的平截头体吗?我认为你通过涉及截锥体高度使事情变得非常复杂。截锥体是相机如何处理这个世界,我认为你不应该在那里做任何与游戏大小相关的事情。
  • 如果你的平截头体高度没有改变,那么你基本上是一遍又一遍地加载相同的值,你为什么坚持使用平截头体,这样做有什么好处?
  • 不考虑截锥体高度,您的解决方案非常简单;玩家越来越近增加规模。反之亦然
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
相关资源
最近更新 更多