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

开发平台:Unity 6.0

编程语言:CSharp

编程平台:Visual Studio 2022

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


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

黑框 作用于 UnityEngine.UI.GridLayoutGruop ,形成 4x6 布局,如图1所示。
图标 同步至 黑框位置。

csharp 复制代码
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 延迟帧/秒 执行添加任务

csharp 复制代码
Utils.TimeCoroutine.Delay(1, ()=> { // 添加操作 })

即 使用 StartCoroutine 推迟添加的操作。

3.2 在执行添加任务前,强制刷新


csharp 复制代码
Canvas.ForceUpdateCanvases();

这是强制 Canvas 所有UI更新信息。在仅针对少量 UI 上是有效,但 UI 量一旦增大。则应该考虑下类执行代码:

csharp 复制代码
LayoutRebuilder.ForceRebuildLayoutImmediate(RectTranform rt);

其中 rt 为布局组件对象上的 RectTransform 组件。即 手动强制更新。

其他

尝试过直接使用 layout.SetHorizontalLayout() 等来自继承类的方法来更新布局,但实际上,问题表现仍然存在。

相关推荐
zhchyun200820 小时前
【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(05)
ui·unity·游戏引擎
_ZHOURUI_H_1 天前
不做完整 ECS,只优化数据布局:Unity EasyECS 到底是什么
unity·性能优化·游戏引擎
郝学胜-神的一滴2 天前
Horse3D 游戏引擎研发笔记(七):Clydesdale——从流式日志到多输出订阅
c++·qt·unity·游戏引擎·图形渲染·unreal engine·opengl
小贺儿开发3 天前
Unity 程序员编曲花絮:汪峰《河流》细节修复
科技·学习·unity·程序员·音乐·demo·写代码
598866753@qq.com3 天前
Unity UniText笔记
unity·unitext
鼎艺创新科技3 天前
不依赖 UE/Unity:我们如何从零搭建一套国产三维 GIS 渲染引擎
人工智能·算法·unity·游戏引擎·三维电子沙盘
huihui3614 天前
校友网管理软件技术选型框架:基于功能核验与系统架构的量化评估
unity·系统架构·游戏引擎
五仁烧饼4 天前
Unity性能优化系列设置篇 - URP 移动端设置基线与分档策略
unity·游戏引擎
新手unity自用笔记4 天前
unity基于Socket的网络学习
网络·网络协议·学习·unity·c#·游戏引擎
心前阳光4 天前
Unity之XR Interaction Toolkit | IPointerDownHandler问题
unity·游戏引擎·xr