自学内容网 自学内容网

【解决】Layout 下创建槽位后,执行 Image 同步槽位位置后表现错误的问题。

开发平台:Unity 6.0
编程语言:CSharp
编程平台:Visual Studio 2022

一、问题背景 | 开发库存系统


图1 位置同步失败问题
图2 位置正常同步效果表现

黑框 作用于 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() 等来自继承类的方法来更新布局,但实际上,问题表现仍然存在。


原文地址:https://blog.csdn.net/qq_51026638/article/details/143746058

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!