Quick answer: Import textures alongside the FBX (or embed them), then use the importer's material extraction/remap so slots bind to real materials by name.
An imported model that arrives uniformly gray has lost its material assignments. FBX usually stores only references to texture files, so if those files are not next to the model or the material slots are not extracted, the engine substitutes a plain default.
How to fix it
1. Bring the textures with the model
Place the texture files in the same folder or embed them in the FBX on export. The importer can then resolve the references and rebuild the materials instead of showing gray.
2. Extract materials and textures
In Unity's Materials import tab, use Extract Materials and Extract Textures so the slots become real assets you can edit and that survive reimport.
3. Remap by name
Set material naming to From Model's Material and search mode to project-wide so existing materials auto-bind to matching slots. Consistent slot names make this reliable across reimports.
Catching the ones you can't reproduce
The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.
Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.
This is where a tool like Bugnet earns its place. Its SDK captures every error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.
Most of the time the fix is small. Seeing the failure clearly is the part that actually costs you.