Unity UI 缩放和实例化预制件

Posted

技术标签:

【中文标题】Unity UI 缩放和实例化预制件【英文标题】:Unity UI scaling and instanced prefabs 【发布时间】:2021-10-27 19:06:21 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于Unity UI 缩放和实例化预制件的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D日常开发UI预制体的实例化实操演示

Unity:使用动画师实例化预制件

Unity Photon:实例化非预制对象?

Unity2D:在订单中禁用实例化的预制件

Unity快速入门教程-详解预制体(Prefab)及其实例化Instantiate

在 Unity C# 中实例化游戏对象列表