Пример #1
0
    // Use this for initialization
    void Start()
    {
        RootNode.ShowSelf(true);
        // 构建树状结构
        // 一级菜单
        for (int i = 0; i < 2; ++i)
        {
            string       str   = "一级:" + i;
            Color        color = new Color(0, 0, 0);
            TreeViewNode node1 = InitNode(str, color);
            // 添加子节点
            RootNode.AddChildNode(node1);
            // 子节点的消隐
            node1.ShowSelf(true);
            // 节点的点击操作,这边用的是Toggle
            node1.gameObject.GetComponent <Toggle>().onValueChanged.AddListener((bool bValue) =>
            {
                node1.ShowChild(bValue);
            });

            // 二级菜单
            for (int j = 0; j < 3; ++j)
            {
                str   = "一级:" + i + "/二级:" + j;
                color = new Color(0.5f, 0.5f, 0.5f);
                TreeViewNode node2 = InitNode(str, color);
                node1.AddChildNode(node2);
                node2.ShowSelf(false);
                node2.gameObject.GetComponent <Toggle>().onValueChanged.AddListener((bool bValue) =>
                {
                    node2.ShowChild(bValue);
                });

                // 三级菜单
                for (int k = 0; k < 4; ++k)
                {
                    str   = "一级:" + i + "/二级:" + j + "/三级:" + k;
                    color = new Color(1.0f, 1.0f, 1.0f);
                    TreeViewNode node3 = InitNode(str, color);
                    node3.ShowSelf(false);

                    node2.AddChildNode(node3);
                }

                node2.ShowChild(false);
            }
        }

        // 对树状结构进行深度遍历,然后将其展开成数组
        List <TreeViewNode> listNodes = new List <TreeViewNode>();

        // 展开成数组
        RootNode.SortTreeIntoList(listNodes);
        listNodes.Remove(RootNode);

        /*
         *  设置UI中的父子关系,首先清除掉父子关系
         *  不清除掉的话,重新设置父子关系无法重新排布顺序
         *  因为原先都是属于RootNode的子物体
         */
        foreach (TreeViewNode node in listNodes)
        {
            node.gameObject.transform.SetParent(null);
        }

        foreach (TreeViewNode node in listNodes)
        {
            node.gameObject.transform.SetParent(RootNode.gameObject.transform);
        }
    }