unity3d - 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);
解决方案
我找到了解决方案。这并不像这篇文章中的板球交响乐似乎暗示的那样明显。可以做的是在统一编辑器中将预制件的副本添加到项目中,定位它,缩放它,然后将其关闭。然后可以将其用作从代码实例化的副本的引用,您需要做的是将sizeDelta
,localScale
和 position 与引用对象匹配。然后,任何位置偏移量只需要乘以画布的比例,并且从代码实例化的所有 UI 元素都将在所有屏幕尺寸上很好地放置(可能会忽略非均匀缩放的尺寸 - 我没有测试过)。
推荐阅读
- php - 带有 preUpdate、prePersist 的 Doctrine 命令行插入
- arrays - 在 perl 中将数组写入文本文件
- graphql - 如何修复 Shopify GraphQL 错误:“在线商店渠道已锁定。”
- sql - 创建触发器以在更新同一表中的特定列后更新某些列
- javascript - 引导轮播不滑动
- sockets - 客户端 <> 上的套接字错误,与 Paho MQTT-SN 网关和 ESP8266 客户端断开连接
- ios - 如何在部分单元格的页脚单元格中获得总数?
- python - Python:使用 range() 函数或 np.arrange() 作为参数 arr[range(m), y]
- c++ - WIC 工厂在 windows7 上将始终为 nullptr(使用“什么是纱架?”教程)
- javascript - 不需要时返回 BehaviorSubject 值。有时会重置实际需要的值