【Unity必备商业级前缀树红点系统】

案例视屏地址

视屏教程案例地址:商业级高性能前缀树红点系统 点我观看视屏教程

系统介绍

该系统基于前缀树结构去实现,在需要更新红点时,我们只需要更新对应的红点状态,该红点状态发生改变会自动通知其父节点的红点更新以此类推,直至到树顶。

我们把红点系统分为逻辑层和表现层,逻辑层主要负责红点逻辑的判断,由逻辑层去决定该不该显示红点,而表现层则只需要根据逻辑层的红点状态去及时的更新红点的显示/隐藏的状态即可。
这样可以更清晰的去梳理我们的红点逻辑,而不至于与UI相关的代码混为一谈。完美剥离代码与UI的关联 。

主要用于游戏中需要红点,但是各各地方的构建导致代码结构杂乱,只需要一行代码即可解决红点问题,逻辑清晰,流程简单。

设计思路

请添加图片描述

功能列表

1.普通红点显示:只显示红点不显示数字。
.
2.子节点数字红点:显示红点数量,具体的数量由子节点显示的红点个数决定。系统会自动寻找子节点显示的红点,进行计数,最终显示的我们需要的节点上。
.
3.数据数字红点:由程序跟据数据或消息数量自定义红点数量,UI层会根据逻辑层的红点数量以及状态自动显示或隐藏。

红点显示隐藏规则

红点的隐藏规则由逻辑层去通知,UI层只负责监听逻辑层的事件,只单纯的做表现的事情。
逻辑层通知由开发者在需要更新的时机,去调用 UpdateRedDotState进行触发更新逻辑,后续的一系列显示、隐藏以及父节点的更新/父节点的父节点…等更新流程由系统内部进行管理。

使用介绍

红点更新:

RedDotSystem.Instance.UpdateRedDotState(RedDotDefine.Task_Box1);

红点逻辑:

 	void Awake()
    {
    
    
        //自定义红点逻辑使用演示,以非继承的形式演示红点的使用方式
        RedDotTreeNode store_Gold_Node = new RedDotTreeNode {
    
     parentNode=RedDotDefine.StoreRoot, node = RedDotDefine.Store_Gold, logicHander = OnStoreGoldRedDotLogicHandler };
    }

    public void OnStoreGoldRedDotLogicHandler(RedDotTreeNode redNode)
    {
    
    
        redNode.redDotActive = RedDotDataMgr.Store_Gold_isRead == false;
        Debug.Log("OnStoreGoldRedDotLogicHandler:"+ redNode.redDotActive);
    }

红点UI监听:
请添加图片描述

猜你喜欢

转载自blog.csdn.net/qq_42461824/article/details/127483689