Как правильно сгенерировать игровое поле?
Смотря какая сложность игры и что потом будет происходить. Я недавно сделал простую игру типа 2048 целиком на UnityUI. То есть у меня есть только Canvas и все что есть в игре сделано при помощи UI. Там есть для построения сеток GridLayoutGroup.
Нашел такой крутой скрипт и использовал его вместо  GridLayoutGroup: www.justapixel.co.uk/ugui-auto-scaling-grid-layout-code 
По сути тоже помогает организовать сетку, только этот еще и растягивает по размеру в зависимости от размера Canvas.
Если это не подходит, можно для каждого тайла создать Canvas, перевести в WorldSpace и показывать на нем GUI Text. На счет производительности такого решения не знаю, но по идее все должно получиться.
Забыл написать - есть еще TextMesh. Тоже подходит для отображения текста. Самое простое в Вашем случае по - моему. А никто еще не предлагал его.
Если прямоугольное поле, то перебором по массиву(длина, ширина) рисуем квадраты на канвасе со смещением на длину ячейки. Что отображать внутри ячейки решает объект, лежащий в массиве: какая цифра - такую и рисуем или вставляем подготовленный спрайт.
По сути будет просто картинка на канвасе. Затем начинается работа с мышью, определение координат щелчка и определение той ячейки, которая отвечает за определенный участок игрового поля. Затем вызываем метод кликнутой ячейки. Все просто вроде...