Unity UI 缩放和实例化预制件

Unity UI scaling and instanced prefabs

我正在尝试设置从预制件实例化的 UI 元素。我使用 SetParent 将它们放在直接位于 Canvas 下的 UI 元素下。问题是当 UI 缩放时,这些预制元素不会粘在屏幕上它们需要的部分。 Canvas 设置为随屏幕尺寸缩放,我只对 16:9 屏幕感兴趣,对移动设备不感兴趣。 是否有一种标准的方法来放置这些实例化的预制件,以便它们与其他所有东西的相对位置不会随屏幕分辨率而改变?

statFlag = Instantiate(_infoBox);
statFlag.GetComponent<RectTransform>().position = gameObject.GetComponent<RectTransform>().position + new Vector3(-50, -250 - _displayedStats.Count * 50, 0);
statFlag.transform.SetParent(transform, true);
statFlag.transform.localScale = new Vector3(1/statFlag.transform.lossyScale.x, 1/statFlag.transform.lossyScale.y, 1/statFlag.transform.lossyScale.z);

我找到了解决方案。它并不像 post 中的板球交响曲所暗示的那样明显。可以做的是在 unity 编辑器中将预制件的副本添加到项目中,定位它,缩放它,然后将其关闭。然后可以将其用作从代码实例化的副本的引用,您需要做的是将 sizeDeltalocalScale 和位置与引用对象匹配。然后任何位置偏移只需要乘以 canvas 的比例,所有从代码实例化的 UI 元素将在所有屏幕尺寸上很好地就位(可能会降低非均匀缩放的尺寸 - 我没测试过)。