/// <summary>
        /// 初始化场景Cubes
        /// </summary>
        /// <param name="prefabCube"></param>
        /// <param name="row"></param>
        /// <param name="colomn"></param>
        private void InitCubes(UnityEngine.GameObject prefabCube)
        {
            Vector3 firstCubePosition = new Vector3(-GlobalConfig.ITEM_SIZE * 0.5f * (m_Colomn - 1), 0, GlobalConfig.ITEM_SIZE * 0.5f * (m_Row - 1));
            int     index             = 0;

            for (int i = 0; i < m_Row; i++)
            {
                for (int j = 0; j < m_Colomn; j++)
                {
                    Vector3 initPosition = new Vector3(firstCubePosition.x + GlobalConfig.ITEM_SIZE * j, 0,
                                                       firstCubePosition.z - GlobalConfig.ITEM_SIZE * i);
                    GameObject cube = UnityEngine.GameObject.Instantiate(prefabCube, initPosition, Quaternion.identity);
                    cube.transform.SetParent(m_CubeContainer);
                    cube.name = $"CubeItem{index}";
                    cube.transform.localEulerAngles = new Vector3(-90, 0, 0);

                    m_TempCubeItem = m_CubeItemPool.Alloc();
                    m_TempCubeItem.Init(i, j, cube.GetComponent <Transform>());
                    m_CubeItems.Add(m_TempCubeItem);
                    index++;
                }
            }
            m_FirstPosition = m_CubeItems[0].Transform.position;
            m_LastPosition  = m_CubeItems[m_CubeItems.Count - 1].Transform.position;
            Kernel.AssetManager.ReleaseGameObjectAsync(m_CubePrefab);
        }
        public override void OnRelease()
        {
            m_CubeItems.Clear();
            m_TargetList.Clear();
            m_SlideTransforms.Clear();
            m_SlideOriginPositions.Clear();
            Kernel.EventCenter.RemoveListen((int)SlideEventNames.CubeSlide, OnCubeSlide);

            ClearCubeContainer();
            m_CubeContainer = null;
            m_CurrentItem   = null;
            m_CubeItemPool.Release(m_TempCubeItem);
        }
        private List <CubeItem> GetTargetRowList(CubeItem item)
        {
            List <CubeItem> m_RetList = new List <CubeItem>();
            int             count     = m_CubeItems.Count;

            for (int i = 0; i < count; i++)
            {
                if (m_CubeItems[i].BelongRow == item.BelongRow)
                {
                    m_RetList.Add(m_CubeItems[i]);
                }
            }
            return(m_RetList);
        }
        /// <summary>
        /// Cube滑动事件
        /// </summary>
        /// <param name="eventId"></param>
        /// <param name="isImmediately"></param>
        /// <param name="data"></param>
        private void OnCubeSlide(int eventId, bool isImmediately, IUserData data)
        {
            if (m_CanSlide)
            {
                return;
            }
            SlideData slideData = (SlideData)data;

            if (CheckSlideCondition(slideData.startPosition, slideData.endPosition))
            {
                m_CurrentItem    = GetHitCubeItem(slideData.transform);
                m_SlideDirection = GetSlideDirection(slideData.startPosition, slideData.endPosition);
                if (m_CurrentItem == null)
                {
                    //Debug.Log("hit is null!");
                    return;
                }
                m_TargetList.Clear();
                m_SlideTransforms.Clear();
                m_SlideOriginPositions.Clear();

                if (m_SlideDirection == Vector3.left)
                {
                    m_TargetList = GetTargetRowList(m_CurrentItem);
                    DoLeftOrder(m_TargetList);
                }
                else if (m_SlideDirection == Vector3.right)
                {
                    m_TargetList = GetTargetRowList(m_CurrentItem);
                    DoRightOrder(m_TargetList);
                }
                else if (m_SlideDirection == Vector3.forward)
                {
                    m_TargetList = GetTargetColomnList(m_CurrentItem);
                    DoUpOrder(m_TargetList);
                }
                else
                {
                    m_TargetList = GetTargetColomnList(m_CurrentItem);
                    DoDownOrder(m_TargetList);
                }
            }
        }