UI层的信息推送,小红点系统

来源:互联网 发布:矩阵的奇异值分解方法 编辑:程序博客网 时间:2024/05/12 15:15

小红点系统

模块预览图:

图1
图1
图2
图2

图1为子层,图2为主层,当子层拥有信息时,往主层通知。思路:子层绑定主层。当消息状态来了,通知主层,主层亮起红点。这就意味着,我们要把这个系统写成树形结构。

首先我们要有个根节点,根节点下有许多子节点,子节点下又会拥有许多子节点。这点必须要清楚。
理清上面关系后,开始整理代码

首先:

我们需要创建和绑定根节点
图1

当我传入的第一个节点是空的,那么默认设置它为根节点,否则就会往它下面增加子节点

再然后就是一个创建普通节点的重载方法
t

这里我们会通过它的Key去找到对应的父节点,找到后,往父节点下创建子节点。

然后我们的每个节点都会有个小红点,所以我们需要把对应的节点绑定对应的UI。包括节点的获取
这里写图片描述

public class BaseNode    {        public string key;        public BaseNode parent;        public BaseNode rootNode;        public bool nodeValue;        public bool localValue;        public GameObject ui;        public List<BaseNode> childNode_list = new List<BaseNode>();        public BaseNode() { }        public BaseNode(string urlKey, bool value)        {            this.key = urlKey;            this.nodeValue = value;        }        /// <summary>        /// 根据Key找到父节点        /// </summary>        /// <param name="nKey"></param>        public void AddChild(BaseNode node)        {            if (!this.childNode_list.Contains(node))            {                this.childNode_list.Add(node);                node.parent = this;            }            this.Update();        }        protected void Update()        {            this.nodeValue = this.localValue;            if (!this.localValue)            {                for (int i = 0; i < this.childNode_list.Count; i++)                {                    this.nodeValue |= this.childNode_list[i].nodeValue;                }            }            UpdateUI();            if (this.parent != null)            {                this.parent.Update();            }        }        public void SetValue(bool vals)        {            this.localValue = vals;            Update();        }        private void UpdateUI()        {            if (ui != null)            {                ui.SetActive(this.nodeValue);            }        }        public void BindUI(GameObject ui)        {            this.ui = ui;            UpdateUI();        }    }

上面的代码是节点类,这节点类里面包含它所有的子节点,同理,如果是子节点,那么它也会包含它所有的子节点。

AddChild : 添加节点,当我们需要动态添加节点,可添加进入后调用Update的更新节点
this.localValue : 表示当前节点的状态,true是亮起,false是熄灭。都会调用Update去更新
BindUI:绑定节点对应的小红点,通过 SetValue 来控制状态

大致就是这样,不是很难,当初我竟然想去写二叉树,脑袋秀了

原创粉丝点击