public void CreateTree(Vector3 center, Vector3 size, TreeType treeType, int quadTreeDepth = 5)
        {
            m_TreeType = treeType;
            switch (m_TreeType)
            {
            case TreeType.LinearOcTree:
                m_Tree = new LinearSceneOcTree <SceneObject>(center, size, quadTreeDepth);
                break;

            case TreeType.LinearQuadTree:
                m_Tree = new LinearSceneQuadTree <SceneObject>(center, size, quadTreeDepth);
                break;

            case TreeType.OcTree:
                m_Tree = new SceneTree <SceneObject>(center, size, quadTreeDepth, true);
                break;

            case TreeType.QuadTree:
                m_Tree = new SceneTree <SceneObject>(center, size, quadTreeDepth, false);
                break;

            default:
                m_Tree = new LinearSceneQuadTree <SceneObject>(center, size, quadTreeDepth);
                break;
            }
        }
Beispiel #2
0
    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name="center">场景区域中心</param>
    /// <param name="size">场景区域大小</param>
    /// <param name="asyn">是否异步</param>
    /// <param name="maxCreateCount">最大创建数量</param>
    /// <param name="minCreateCount">最小创建数量</param>
    /// <param name="maxRefreshTime">更新区域时间间隔</param>
    /// <param name="maxDestroyTime">检查销毁时间间隔</param>
    /// <param name="quadTreeDepth">四叉树深度</param>
    public void Init(Vector3 center, Vector3 size, bool asyn, int maxCreateCount, int minCreateCount, float maxRefreshTime, float maxDestroyTime, TreeType treeType, int quadTreeDepth = 5)
    {
        if (m_IsInitialized)
        {
            return;
        }

        switch (treeType)
        {
        case TreeType.LinearOcTree:
            m_Tree = new LinearSceneOcTree <SceneObject>(center, size, quadTreeDepth);
            break;

        case TreeType.LinearQuadTree:
            m_Tree = new LinearSceneQuadTree <SceneObject>(center, size, quadTreeDepth);
            break;

        case TreeType.OcTree:
            m_Tree = new SceneTree <SceneObject>(center, size, quadTreeDepth, true);
            break;

        case TreeType.QuadTree:
            m_Tree = new SceneTree <SceneObject>(center, size, quadTreeDepth, false);
            break;

        default:
            m_Tree = new LinearSceneQuadTree <SceneObject>(center, size, quadTreeDepth);
            break;
        }

        m_LoadedObjectLinkedList = new LinkedList <SceneObject>();
        m_PreDestroyObjectQueue  = new PriorityQueue <SceneObject>(new SceneObjectWeightComparer());
        m_TriggerHandle          = new TriggerHandle <SceneObject>(this.TriggerHandle);

        m_MaxCreateCount = Mathf.Max(0, maxCreateCount);
        m_MinCreateCount = Mathf.Clamp(minCreateCount, 0, m_MaxCreateCount);
        m_MaxRefreshTime = maxRefreshTime;
        m_MaxDestroyTime = maxDestroyTime;
        m_Asyn           = asyn;

        m_IsInitialized = true;

        m_RefreshTime = maxRefreshTime;
    }
 void OnDestroy()
 {
     if (m_Tree != null)
     {
         m_Tree.Clear();
     }
     m_Tree = null;
     if (m_ProcessTaskQueue != null)
     {
         m_ProcessTaskQueue.Clear();
     }
     if (m_LoadedObjectLinkedList != null)
     {
         m_LoadedObjectLinkedList.Clear();
     }
     m_ProcessTaskQueue       = null;
     m_LoadedObjectLinkedList = null;
     m_TriggerHandle          = null;
 }