this is nuts.
don’t get me wrong, its also kinda cool but sort of very pointless.
First thing first, you have a very simple model. there is really no reason to make such a complex rig with the eye blink for what is essentially a texture swap.
If you are trying to do other things with it - maybe. But even then you would be better off working with Morph Targets for facial expressions so they can be completely separate from any animation and added in as simple curves.
As far as blinking goes.
adding a material sot for the eye is probably cheaper than adding a bone to the skeletal mesh. (Extra draw call vs a skin computation and and extra bone).
Or using a texture atlas which I think is a mix of what you are saying you are doing now.
Regardless of this, you can probably fix the issue of scrolling by flooring or ceiling the scalar value for the UV before use within the material.
if the idea is to move it in full pixel steps you may have to do some more work, but if you have .5 and you need a full 1, then using a Ceil node will do just that.
Personally, because the model is low poly, and because of the extreme simplicity of it, I would look into using different decals for the eye expressions.
animating a decal is bound to be cheaper then the bone on the mesh overall. Even if it is at least one extra draw call.
The benefit of the decal is that you can move it, rotate it, and animate it complete separate. Also the background color of the eye can be changed on the fly without having to mess with multiple materials.
If, on the other hand, you are not using a decal or texture, and the eye is somehow skinned - which is nuts because that’s literally a ton of tris on an otherwise low poly model but whatever.
Then the interpolation between blender and unreal is completely different. Bone tracks in unreal are always made “fluid” because of the way the engine steps from frame rate to framerate.
That is: the bone track value between 2 frames is always decimal if the frame before and after value are different integers.
To work around that you may be able to force the value to he more then. 5 quicker by giving the frame after a bigger integer value. This will however overshoot the eye blink probably so it’s not really a solution…