UnityAI新规则

This commit is contained in:
2026-10-20 10:15:09 +08:00
parent 2fcb5c0fdf
commit ab4fbfa628
7 changed files with 137 additions and 33 deletions

View File

@@ -49,7 +49,26 @@ HFFunCatalogue.UIManager.OpenWindow<ExampleWindow>();
## 三、单列虚拟列表
单列或单行滚动使用 LoopListView2 包装接口:
### 选择当前项目支持的接口
动态列表优先通过项目的 `SFUI_ScrollRect` 使用。先检查当前源码、Prefab 和相似窗口,确认使用 `BindEvent` 还是 SuperScrollView 包装;两套入口不要混用,也不要仅因本文示例而迁移已有列表。视觉、共享页签和 Item 复用规则见 [界面拼接](界面拼接.md)。
### BindEvent 接口
支持该接口的项目,通过以下四个回调绑定列表;名称与类型以目标项目实际签名为准:
| 参数 | 职责 |
|---|---|
| `Func<int> _getItemCount` | 返回当前数据数量,数据未就绪时返回 `0` |
| `Func<int, GameObject> _getItemTemplete` | 按数据索引返回模板 GameObject;相同结构返回同一模板 |
| `Action<SFUI_ScrollRectItem> _updateItem` | 依据当前 Item 的数据索引完整刷新显示 |
| `Func<SFUI_ScrollRectItem, ISimulateBehaviour> _funcBindSimulateBehaviour` | 为 Item 绑定项目模拟行为脚本,避免重复绑定 |
模板选择回调返回的是模板对象,不是 LoopListView2 的模板索引。绑定后按当前实现的刷新入口更新列表;不要照搬另一套包装的 `RefreshDataTotalCount`。同时检查空列表、尺寸变化、布局缓存与初始化要求。模板组件遵循项目序列化方式,不预先重复挂载列表动态添加的组件。
### LoopListView2 包装接口
已接入该包装的项目,单列或单行滚动使用以下接口:
```csharp
m_List.SetLoopListViewItemPrefabs(
@@ -83,7 +102,7 @@ m_List.RefreshDataTotalCount(m_DataList == null ? 0 : m_DataList.Count);
## 四、多列虚拟列表
存在固定列数、`GridLayoutGroup` 语义或二维排布时使用 LoopGridView:
已接入 SuperScrollView 包装的项目,存在固定列数、`GridLayoutGroup` 语义或二维排布时使用 LoopGridView:
```csharp
m_Grid.SetLoopGridViewItemPrefabs(
@@ -114,9 +133,9 @@ m_Grid.RefreshGridDataTotalCount(m_DataList == null ? 0 : m_DataList.Count);
- 模板节点保持 `SetActive(false)`,但必须位于窗口层级中以便引用收集。
- `SFUI_ScrollRect`、viewport、content 和模板引用必须完整。
- 虚拟列表初始化会关闭旧 `LayoutGroup` 和 `ContentSizeFitter`,运行时布局由 SuperScrollView 管理。
- 不要因为这些旧组件在运行时被关闭就重新勾选或依赖它们计算虚拟列表尺寸。
- 检查模板上的 `LoopListViewItem2` 或 `LoopGridViewItem`;包装层会补组件,但 Prefab 结构仍需正确。
- SuperScrollView 包装初始化会关闭旧 `LayoutGroup` 和 `ContentSizeFitter`,运行时布局由该包装管理;不要重新勾选或依赖旧组件计算尺寸。
- 使用 `BindEvent` 时检查其实际布局与初始化机制,不套用 SuperScrollView 的组件关闭规则。
- 使用 SuperScrollView 包装时检查模板上的 `LoopListViewItem2` 或 `LoopGridViewItem`;包装层会补组件,但 Prefab 结构仍需正确。
- UIMono 收集需要包含 inactive 子节点,不能只扫描激活节点。
## 六、验证清单