So when I tried to do this by making a separate texture for the numbers, I ran into the same problem you did, not knowing how to move and scale down an image precisely. So I can’t answer that. But I didn’t really like how you were doing things based on UV coordinates (a personal choice), so I did this using a second texture where the numbers masks are already placed in the upper left corner of a texture. It is an incredible waste of pixels, but makes up for itself by avoiding alpha channels (which double your memory usage) and being very customizable. If you don’t know about “channel packing” already, I suggest you get started by reading this
(UDK | TextureOptimizationTechniques Packing and Consolidation) it’s made for UDK, but the principle still applies.
So here’s what I’ve got for you. It looks super complicated, and it is for a beginner, but I want to get you started on this technique early.
In the R, G, B channels of a texture, I have the numbers 1, 2, 3, as white. They are placed where they need to be in the final material, and will act as masks. The texture will have rainbow colors, but the channels are separated in the material editor.
In a different texture, I used your texture map you already have. Because it is almost 100% grayscale, I put it into a single channel of this new texture file. That way, I have two other channels to play with and I can sneak 3 (or 4) textures into a single map. I randomly chose to paste your texture in the red channel, and I painted a white mask for the orange paint to go into the green channel. The blue channel was empty, so I made a quick (and ugly) tiling scratch effect.
In the editor, I lerped between a Vector3 parameter (customizable color) and white, using the number mask as the alpha. I plugged the number mask texture into a Static Component Mask Parameter. This allows us to change which mask is used in each instance of this material. I then lerped together the normal main texture with the newly created orange paint decal using the custom mask in our green channel as the alpha. So the orange decal is now on top of our main texture.
The rest is extra. **I made the painted masks non-metallic. I made a duplicate texture sampler for our main texture so that I could use a Texture Coordinate to tile the blue channel separately from everything else. I didn’t want to tile our main texture. I then added that blue channel (the scratched stuff) into the main texture to make a roughness map that has some extra variation to it.
I created Material Instances of this material and applied them to different objects. Inside the instance, I changed the color of the painted decal and chose which number mask to use.
I’m not good at explaining this stuff in one big chunk, so feel free to ask questions and clarify this stuff. Maybe this isn’t what you’re looking for, or it’s too limited by only having 3 channels for number masks.
Tl;dr: I’m using an extra texture as a mask for numbers, and I’m taking advantage of using multiple channels inside each texture in order to add variation.