如何将画布设置为以世界单位为单位的特定大小



假设我有一个UI画布,它设置为"世界空间",并且绝对位于我的立方体上方的世界中。

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

在不缩放画布的情况下,如何设置画布的大小以匹配立方体的已知世界单位宽度?

我知道您可以使用以下方法以"画布单位"设置画布:

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

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

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

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

  • "画布组件呈现模式"属性设置为"世界"(您已经这样做了(
  • 删除画布缩放器组件
  • 您的画布现在是一个 3D 对象:使用矩形变换宽度高度设置其大小

请记住,您的画布不会处理非常小的元素(默认图像为 100x100,它将比您的画布大得多(。

希望这有帮助,

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

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

最新更新