开发平台:Unity 6.0
编程语言:CSharp
编程平台:Visual Studio 2022
一、问题背景 | 开发库存系统
| |
黑框 作用于 UnityEngine.UI.GridLayoutGruop,形成 4x6 布局,如图1所示。
图标 同步至 黑框位置。
public class Example : MonoBehaivour
{//...void Start() {this.m_InventoryUI = FindFirstObjectByType<InventoryUI>();this.m_InventoryUI.InitEnvironment();this.m_InventoryUI.InitInventory(4, 6);// 添加图标this.m_InventoryUI.Add(ItemType.Capsule);this.m_InventoryUI.Add(ItemType.Cube);this.m_InventoryUI.Add(ItemType.Sphere);}
}
二、问题原因
在执行添加物品时,UnityEngine.UI.GridLayoutGruop 并未完成对 黑框 布局的调整任务。
三、解决方法
3.1 延迟帧/秒 执行添加任务
Utils.TimeCoroutine.Delay(1, ()=> { // 添加操作 })
即 使用 StartCoroutine
推迟添加的操作。
3.2 在执行添加任务前,强制刷新
Canvas.ForceUpdateCanvases();
这是强制 Canvas 所有UI更新信息。在仅针对少量 UI 上是有效,但 UI 量一旦增大。则应该考虑下类执行代码:
LayoutRebuilder.ForceRebuildLayoutImmediate(RectTranform rt);
其中 rt
为布局组件对象上的 RectTransform
组件。即 手动强制更新。
其他
尝试过直接使用 layout.SetHorizontalLayout()
等来自继承类的方法来更新布局,但实际上,问题表现仍然存在。