protected virtual void CreateTreeView()
        {
            if (m_TreeViewState == null)
            {
                m_TreeViewState = new TreeViewState();
            }

            var needsCacheState = false;

            if (m_HierarchyViewState == null)
            {
                m_HierarchyViewState = new HierarchyState();
                needsCacheState      = true;
            }

            m_HierarchyTreeView = new HierarchyTreeView(m_TreeViewState, m_HierarchyViewState, IsEnvironmentHierarchy, needsCacheState);

            Reload();
        }
        public HierarchyTreeView(TreeViewState treeViewState, HierarchyState hierarchyState, bool isEnvironmentHierarchy, bool needsStateCached)
            : base(treeViewState)
        {
            m_IsEnvironmentHierarchy = isEnvironmentHierarchy;
            m_SimHierarchyState      = hierarchyState;
            Reload();

            if (!isEnvironmentHierarchy)
            {
                k_SimulatedContentHierarchies.Add(this);
            }

            EditorApplication.hierarchyChanged += OnHierarchyChange;

            if (needsStateCached)
            {
                CacheState();
            }
            else
            {
                RestoreState();
            }
        }