跳转至

主要依靠GUI的TreeView控件实现

刷新与重绘

在我们更新数据后,树不会重新绘制,我们需要调用base.Repaint()来保证数据的刷新

新数据绘制在前面

对于每个TreeItem,他的子列表children是通过一个List维护的。 + AddChild()函数是自动放在这个List后面的,并提供了children的初始化功能 + 而children最开始并没有初始化,直接Insert有可能会导致找不到引用 这样就可以实现每次绘制新的数据在前面了。

                    if (actorNode.children != null) 
                        actorNode.children.Insert(0,pRoot);
                    else
                        actorNode.AddChild(pRoot);

通过选择树选项,跳转到Hierarchy视图选择对应的物体

由于对象名带有/符号,使用GameObject.Find无法正确的识别到对应的物体。 这里采用搜索组件的方式来获得相关组件,并通过id来判断是否为选择的物体

    private void OnSelectionHierachyShow(BulletAnalyzeTreeItem item)
    {

        var bullets = BulletRoot.GetComponentsInChildren<BulletBase>(); //Bullet使用Find找到的根节点
        foreach(BulletBase bullet in bullets)
        {
            if (bullet.InstanceId == item.instanceID)
            {
                Selection.activeGameObject = bullet.gameObject;
            }

        }
    }