Пример #1
0
    /// <summary>
    /// 检测可能碰撞到的物体
    /// </summary>
    /// <param name="returnBounds"></param>
    /// <param name="pBounds"></param>
    /// <returns></returns>
    public List <CollisionObject> Retrieve(CollisionObject pBounds)
    {
        //切割的矩形列表
        List <CollisionObject> SliceArr   = new List <CollisionObject>();
        List <CollisionObject> resultList = new List <CollisionObject>();

        if (childNodes.Count > 0)
        {
            int index = GetIndex(pBounds);

            if (index != -1)
            {
                resultList.AddRange(childNodes[index].Retrieve(pBounds));
            }
            else
            {
                SliceArr = pBounds.Carve(center.x, center.z);
                for (int i = SliceArr.Count - 1; i >= 0; i--)
                {
                    index = GetSliceIndex(SliceArr[i]);
                    //Debug.Log(pBounds.objectName + "的" + SliceArr[i].objectName + "在第" + index + "象限" + "深度为:"+SliceArr[i].depth);
#if UNITY_EDITOR
                    if (-1 == index)
                    {
                        UnityEditor.EditorApplication.isPaused = true;

                        pBounds.drawColor = Color.red;
                        Debug.LogFormat("{0}的{1}", pBounds.objectName, SliceArr[i].objectName);
                        //Debug.LogFormat("{0}的{1}的象限{2}~~{3}~~{4}~~{5}", pBounds.objectName,SliceArr[i].objectName, topQuadrant, bottomQuadrant, rightQuadrant, leftQuadrant);
                    }
                    else
                    {
                        resultList.AddRange(childNodes[index].Retrieve(pBounds));
                    }
#else
                    resultList.AddRange(childNodes[index].Retrieve(pBounds));
#endif
                }
            }
        }
        resultList.AddRange(objectsList);
        return(resultList);
    }