如何将Canvas设置为统一的世界单位中的特定大小?

时间:2017-05-23 13:58:31

标签: unity3d

假设我有一个UI Canvas,它被设置为' World Space'绝对位于我的立方体之上的世界。

我的多维数据集在运行时调整大小。

如果没有缩放画布,如何设置画布的大小以匹配我的多维数据集的已知世界单位宽度?

我知道您可以在画布单元中设置画布。使用:

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

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

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

2 个答案:

答案 0 :(得分:4)

你可以简单地做到:

  • 画布组件渲染模式属性设置为 World (您已经这样做了)
  • 删除 CanvasScaler 组件
  • 您的画布现在是3D对象:使用 RectTransform 宽度高度
  • 设置其大小

请记住,您的画布不会处理非常小的元素(默认图片是100x100,这将比您的 Canvas )。

希望这有帮助,

答案 1 :(得分:3)

  

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

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