obsidian/笔记文件/2.笔记/前缀树红点_第四章.md
2025-03-26 00:02:56 +08:00

3.6 KiB
Raw Permalink Blame History

ReddotTreeView函数接口继承自TreeView是红点树界面的相关逻辑声明了对应ReddotTreeViewItem类型的m_Root根节点还有m_Id的int整型数据后续会用来递增作为编辑器红点树的节点唯一id

!Pasted image 20240423141101.png

Repaint重绘函数调用的是父类TreeView自身的重绘逻辑

!Pasted image 20240423141412.png

!Pasted image 20240423141447.png

红点树对应的构造函数也是调用了自身的Reload重载函数接口会重新加载红点树的data数据 然后,再把红点管理器 ReddotMananger 的 NodeNumChangeCallback 和 NodeValueChangeCallback 两个Action回调函数绑定了红点的 Reload 和 Repaint 逻辑;

!Pasted image 20240423141552.png

!Pasted image 20240423141638.png

PreOrder函数接口是用于节点的预加载其中每创建一个新的ReddotTreeViewItem红点实体就会让 m_Id 自增一次; 完成树节点TreeNode数据类型的传参root构建后如果 ChildrenCount 子节点总数大于0也会foreach遍历子节点再递归调用自身PreOrder函数接口继续创建新的 ReddotTreeViewItem 编辑器 红点节点;

!Pasted image 20240423141947.png

OnDestory函数接口就是解绑俩函数回调即可

!Pasted image 20240423142541.png

BuildRoot函数接口就是把红点管理器对应的Root根节点作为传参进行预加载然后设置depth深度为-1再调用内置的SetupDepthsFromParentsAndChildren函数接口完成树状各节点和对应子节点的深度关系设置参考SetupDepthsFromParentsAndChildren

!Pasted image 20240423142618.png

!Pasted image 20240423142802.png

编辑器对应实际游戏的红点关系窗体声明了红点树ReddotTreeView数据类型的m_TreeView变量还有搜索区域SearchField数据类型对应的m_SearchField变量 编辑器入口,是"Window/红点树视图窗口",通过 isPlaying 的布尔判断,需要运行游戏,实例化出,红点前缀树,才能打开该编辑器窗体;

!Pasted image 20240423143145.png

OnEnable 使能函数接口,完成 红点树的 ReddotTreeView 初始化构建,然后再完成,搜索框 SearchField 的逻辑构建,用来检索 节点; 而OnPlayModeStateChange函数接口是绑定了编辑器的状态变更 EditorApplication.playModeStateChanged其他mode模式都不进行操作只有 ExitingPlayMode 退出运行模式的时候就会调用Close函数关闭窗体即可 因为 红点树 编辑器面板,是依赖于,运行时的,生成实际红点树,所以退出运行模式,自然关闭, 红点树 编辑器面板 窗体;

!Pasted image 20240423143448.png

OnDestroy函数接口就是解绑即可

!Pasted image 20240423144155.png

编辑器的GUI更新包含几个函数分别是m_SearchField搜索框的OnGUI刷新还有红点树 m_TreeView 的OnGUI刷新底部有俩Button按钮分别对应 ExpandAll 和 CollapseAll → 展开、收缩 红点树

!Pasted image 20240423144235.png

在OnGUI刷新函数调用它们即可

!Pasted image 20240423144516.png

运行游戏后,点击新增,各个红点,然后,编辑器页面入口,点击打开

!Pasted image 20240423144607.png

各UI搜索框、红点树、展开/收缩按钮,显示正常

!Pasted image 20240423144743.png

搜索逻辑,正常

!Pasted image 20240423144828.png

退出运行触发ExitingPlayMode窗体自动关闭逻辑表现正常

!Pasted image 20240423144854.png