В щейдер дописываешь (в CGPROGRAM)
Матрицу устанавливаешь кодом
material.SetMatrix("_MainTexMatrix", matrix);
В вершинном шейдере рассчитываешь uv
void vert (inout appdata_full v, out Input o)
{
v.texcoord = mul(_MainTexMatrix, v.texcoord);
}
Я для своей задачи считал матрицу вот так
private Matrix4x4 BuildTextureTransformMatrix()
{
float ang = Mathf.Clamp(angle, 0, 360);
Matrix4x4 rot = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, ang), Vector3.one);
Matrix4x4 pos = Matrix4x4.TRS(new Vector3(offset.x, offset.y), Quaternion.identity, Vector3.one);
Matrix4x4 scale = Matrix4x4.Scale(new Vector3(tile.x, tile.y));
Matrix4x4 mat = pos * scale * rot;
return mat;
}