public Transform ReturnNearest(Facility facility, Vector3 pos) { float minDistance = float.MaxValue; Transform nearestLocation = null; GameObject[] objectsArray = null; switch (facility) { case Facility.WaterSource: objectsArray = waterSources; break; case Facility.Chair: objectsArray = chairs; break; case Facility.ExitLoc: objectsArray = exitLocations; break; case Facility.Cashier: objectsArray = cashiers; break; default: break; } for (int i = 0; i < objectsArray.Length; i++) { //TODO clean for performance FacilityObject facilityObject = objectsArray[i].GetComponent <FacilityObject>(); if (facilityObject.IsInUse()) { continue; } float sqrDist = Vector3.SqrMagnitude(pos - objectsArray[i].transform.position); if (sqrDist < minDistance) { minDistance = sqrDist; nearestLocation = objectsArray[i].transform; } } return(nearestLocation); }