public bool OverlapBox(OBB obb, List <GameObject> gameObjects) { gameObjects.Clear(); if (!_objectTree.OverlapBox(obb, _nodeBuffer)) { return(false); } var boundsQConfig = new ObjectBounds.QueryConfig(); boundsQConfig.ObjectTypes = GameObjectTypeHelper.AllCombined; boundsQConfig.NoVolumeSize = Vector3Ex.FromValue(_nonMeshObjectSize); foreach (SphereTreeNode <GameObject> node in _nodeBuffer) { GameObject sceneObject = (GameObject)node.Data; if (sceneObject == null || !sceneObject.activeInHierarchy) { continue; } OBB worldOBB = ObjectBounds.CalcWorldOBB(sceneObject, boundsQConfig); if (obb.IntersectsOBB(worldOBB)) { gameObjects.Add(sceneObject); } } return(gameObjects.Count != 0); }
public List <GameObject> OverlapBox(OBB obb) { List <SphereTreeNode <GameObject> > overlappedNodes = _objectTree.OverlapBox(obb); if (overlappedNodes.Count == 0) { return(new List <GameObject>()); } var boundsQConfig = new ObjectBounds.QueryConfig(); boundsQConfig.ObjectTypes = GameObjectTypeHelper.AllCombined; boundsQConfig.NoVolumeSize = Vector3Ex.FromValue(RTScene.Get.Settings.NonMeshObjectSize); var overlappedObjects = new List <GameObject>(); foreach (SphereTreeNode <GameObject> node in overlappedNodes) { GameObject sceneObject = (GameObject)node.Data; if (sceneObject == null || !sceneObject.activeInHierarchy) { continue; } OBB worldOBB = ObjectBounds.CalcWorldOBB(sceneObject, boundsQConfig); if (obb.IntersectsOBB(worldOBB)) { overlappedObjects.Add(sceneObject); } } return(overlappedObjects); }