【发布时间】: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