首页 > 解决方案 > Unity UI 缩放和实例化预制件

问题描述

我正在尝试设置从预制件实例化的 UI 元素。我习惯SetParent将它们放在直接位于 Canvas 下方的 UI 元素下。问题是当 UI 缩放时,这些预制元素不会粘在它们需要的屏幕部分。Canvas 设置为 Scale with Screen Size,我只对 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);

标签: unity3duser-interfaceinstantiation

解决方案


我找到了解决方案。这并不像这篇文章中的板球交响乐似乎暗示的那样明显。可以做的是在统一编辑器中将预制件的副本添加到项目中,定位它,缩放它,然后将其关闭。然后可以将其用作从代码实例化的副本的引用,您需要做的是将sizeDelta,localScale和 position 与引用对象匹配。然后,任何位置偏移量只需要乘以画布的比例,并且从代码实例化的所有 UI 元素都将在所有屏幕尺寸上很好地放置(可能会忽略非均匀缩放的尺寸 - 我没有测试过)。


推荐阅读