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; } }
/// <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; }