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

小红点系统

模块预览图:

图1
UI层的信息推送,小红点系统_第1张图片
图2
图2

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

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

首先:

我们需要创建和绑定根节点
UI层的信息推送,小红点系统_第2张图片

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

再然后就是一个创建普通节点的重载方法
UI层的信息推送,小红点系统_第3张图片

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

然后我们的每个节点都会有个小红点,所以我们需要把对应的节点绑定对应的UI。包括节点的获取
UI层的信息推送,小红点系统_第4张图片

public class BaseNode
    {

        public string key;

        public BaseNode parent;

        public BaseNode rootNode;

        public bool nodeValue;

        public bool localValue;

        public GameObject ui;


        public List childNode_list = new List();


        public BaseNode() { }
        public BaseNode(string urlKey, bool value)
        {
            this.key = urlKey;
            this.nodeValue = value;
        }

        /// 
        /// 根据Key找到父节点
        /// 
        /// 
        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 来控制状态

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

你可能感兴趣的:(Unity基础)