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

相关推荐
真鬼1231 小时前
【Unity AI】Untiy链接cursor与MCP
unity·游戏引擎
WarPigs3 小时前
Unity设置人物位置无效的原因
unity
程序员正茂3 小时前
Unity3d行为树Behavior Designer Pro
unity·行为树
玖玥拾5 小时前
Lua 基础语法(八) Unity Huatuo (HybridCLR)
开发语言·unity·游戏引擎·lua
平行云5 小时前
国产GPU云渲染适配实战:驱动兼容、编码调优与多路并发
unity·ue5·webrtc·webgl·实时云渲染·云桌面·像素流送
不吃凉粉1 天前
Unity与AS通信
unity·游戏引擎
两水先木示2 天前
【Unity】探索小地图迷雾散开Shader效果(基础版)
unity·游戏引擎
WarrenMondeville2 天前
AI复刻街头霸王到 Unity
unity·游戏引擎
玖玥拾2 天前
Lua 基础语法(六)xLua Lua 调用 C# 交互
开发语言·unity·c#·lua
xcLeigh3 天前
Unity基础:MonoBehaviour的生命周期——Awake、OnEnable、Start、Update执行顺序
unity·游戏引擎