2017-05-23 21 views
0

假设我有一个UI画布,它被设置为'世界空间',并且绝对位于我的立方体上方的世界中。如何在统一的世界单位中将Canvas设置为特定尺寸?

我的立方体在运行时调整大小。

没有缩放画布,我如何设置画布的大小以匹配我的立方体的已知世界单位宽度?

我知道,你可以使用设置在“画布单位的画布:

var rect = canvas.GetComponent<RectTransform>(); 
rect.sizeDelta = new Vector2(200, 200); 

然而,200x200的是帆布的单位,而不是世界的单位;我的立方体宽4个单位; sizeDelta应该设置为什么?

我认为这与CanvasScale组件有关,但我无法弄清楚; referenceUnitsPerPixel是100,这是完全错误的比例因子,并且dynamicPixelsPerUnit就像1,这也是错误的。

回答

2

你可以简单地做到这一点:

  • 设置帆布组件渲染模式属性世界(你已经这样做)
  • 删除CanvasScaler组件
  • 现在你的画布是一个3D对象:设置其大小用RectTransform宽度高度

只要记住你的帆布不会非常小的尺寸元素处理(默认图片是100x100这将比你的帆布)大得多。

希望这有助于

+0

我不太明白为什么这会起作用(或者更重要的是,Canvas Scaler实际上是这样做,使得它现在不工作),但这完全有效,谢谢! – Doug

+1

基本上,** CanvasScaler **在这里可以自动调整您的用户界面到多种屏幕尺寸/分辨率。在你的情况下(以及大多数情况下,当_RenderMode_设置为_World_时),不需要调整它,因为你可以用世界单位调整它:例外情况可能是例如3D HUD的宽度,如果你希望它“填充“4:3,16:9或21:9屏幕上的整个屏幕。希望我已经清楚了:否则我会试着在我的回答中进一步解释它:) – Kardux

0

如果您希望它具有以米为单位的特定宽度,则可以使用meter_size/canvas_width来计算所需的比例。例如,如果您希望它的宽度为2米,Canvas宽度为800,则您将拥有2/800 = 0.0025。然后,您将X,Y和Z上的“画布上的矩形变换”的“缩放”属性设置为0.0025,以确保其均匀缩放。

https://docs.unity3d.com/Manual/HOWTO-UIWorldSpace.html

+1

你的答案--->“你再设置变换的矩形的Scale属性” ......我的问题--->“**无需缩放**画布。 ..' – Doug

+0

我会保留它,因为它的统一首选设置世界画布的大小的方式 – Anders

+0

如果你想在这里留下答案,当然,但回答一个问题的解决方案*特别要求*不是在问题中使用正确值得下调。这不是一个最佳实践讨论网站;这是一个Q/A网站,你只是平坦的没有看到这个问题。另外,请*不要*污蔑这个问题。 – Doug