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