Vector3 findBasePosition() { Vector3 randomPosition = RandomUtilities.GenerateRandomInsideRectangleXZ(Vector3.zero, terrainSize - terrainSizeOffset, terrainSize - terrainSizeOffset); NavMeshHit hit; int tries = 0; bool isValidPosition = NavMesh.SamplePosition(randomPosition, out hit, 3f, NavMesh.AllAreas) && !IsAnotherBaseNear(hit.position); while (!isValidPosition) { tries++; randomPosition = RandomUtilities.GenerateRandomInsideRectangleXZ(Vector3.zero, terrainSize - terrainSizeOffset, terrainSize - terrainSizeOffset); isValidPosition = NavMesh.SamplePosition(randomPosition, out hit, 3f, NavMesh.AllAreas) && !IsAnotherBaseNear(hit.position); } print(tries); return(hit.position); }