假设我有一个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