Пример #1
0
        /// <summary>
        /// 加载N宫格
        /// </summary>
        /// <param name="idx"></param>
        void LoadCurrNTrunk(Vector2_Bit idx)
        {
            for (int i = 0; i < trunkEdgeNum; i++)
            {
                for (int j = 0; j < trunkEdgeNum; j++)
                {
                    //idx 是N宫格的中心,idx.x - trunkOffset 是左下角
                    Vector2_Bit idxTrunk = new Vector2_Bit(i + idx.x - trunkOffset, j + idx.y - trunkOffset);
                    string      path     = string.Format("terrainslicing/{0}/{1}_{2}_{3}",
                                                         slicingData.terrainName, slicingData.terrainName,
                                                         idxTrunk.x, idxTrunk.y);
                    GameObject trunkGo = null;
                    if (!trunkDic.TryGetValue(idxTrunk.BitData, out trunkGo))
                    {
                        trunkDic.Add(idxTrunk.BitData, null);
                        ResHelper.LoadGameObjectAsync(path, (getter) =>
                        {
                            trunkGo = getter.Get();
                            float x = trunkSize.x * idxTrunk.x;
                            float y = trunkSize.y * idxTrunk.y;

                            trunkGo.transform.position = new Vector3(x, 0, y);

                            trunkGo.transform.SetParent(terrainRootTrans);
                            trunkDic[idxTrunk.BitData] = trunkGo;
                        });
                    }
                }
            }
        }
Пример #2
0
        void LoadTrunkAsync(Vector3 pos)
        {
            int NonNullCount = trunkDic.GetNonNullCount();//GetTrunkDicNonCount();

            if (NonNullCount < (trunkEdgeNum * trunkEdgeNum) && NonNullCount != 0)
            {
                return;
            }

            Vector2_Bit idx = LocateTrunk(pos);

            //加载当前的N宫格
            LoadCurrNTrunk(idx);
            //释放之前N宫格不在当前N宫格内的trunk
            UnLoadPreNTrunk(idx);
        }
Пример #3
0
        /// <summary>
        /// 释放之前N宫格不在当前N宫格内的trunk
        /// 因为是异步加载,可能本次释放不完。
        /// </summary>
        /// <param name="idx"></param>
        void UnLoadPreNTrunk(Vector2_Bit idx)
        {
            int x = idx.x;
            int y = idx.y;

            if (trunkDic.GetNonNullCount() <= (trunkEdgeNum * trunkEdgeNum))
            {
                return;
            }

            unloadTrunkLst.Clear();
            foreach (var kv in trunkDic)
            {
                Vector2_Bit preIdx = new Vector2_Bit(kv.Key);
                int         preX   = preIdx.x;
                int         preY   = preIdx.y;

                if (Mathf.Abs(preX - x) > trunkOffset || Mathf.Abs(preY - y) > trunkOffset)
                {
                    //Debug.Log(preIdx);
                    if (kv.Value != null)
                    {
                        ResHelper.DestroyGameObject(kv.Value);
                        unloadTrunkLst.Add(kv.Key);
                    }
                }
            }

            for (int i = 0; i < unloadTrunkLst.Count; i++)
            {
                trunkDic.Remove(unloadTrunkLst[i]);
            }

            //释放bundle
            ResHelper.RealseAllUnUse();
        }