I doing it by set some direction vector, then multiply it on time with speed, and get Frac from it’s X, Y and Z.
Append X with Y or with Z, depends on texture projection, and add this vector2 to uv’s. I my case uv’s is world position XY multiplied on scale.