Надо не b[i] на null проверять, его там никогда не будет, а проверять длину массива b.
Ну и по-хорошему int.Parse для каждого числа использовать только один раз, а не на каждую проверку.
Вы создали пустой массив Coor под элементы. Но самих элементов у вас там нет. Надо new Coordinates делать на весь массив, каждый элемент. И научитесь пользоваться отладкой своего кода.
Лучше не читать по каждому значению из памяти, а мапить её на готовое описание структуры Marshal.PtrToStructure, там и float, там и string различных форматов задавать можно.
Более того у transform можно запрашивать его дочерние объекты. Это уж точно лучше, чем искать объекты во всей сцене.
Но в вашем случае где, все элементы канвасы - идеально GetComponentsInChildren<Canvas>(), если конечно там глубже их нет.