I'm creating a spaceship generator, creating little ships you can walk around inside of. I have a 'base material', and at runtime I create a new instance of that material, change that instance's color, and then apply that new material to all the exterior faces of the spaceship. The trouble here from what I've read is you generally don't want to do this since material instances, even identical ones, are considered unique by unity and have subsequent performance impacts. My larger issue is in order to have collision geometry, these ships contains lots of instances of this material instance. The other issue is memory leaks. I have a few questions: If I create that one instance of my base material and then apply only that to multiple game objects, does unity consider all those to still be using the same material, thus mostly negating the batching issue? I feel like it intuitively wouldn't be the case, but some things I've read suggest it is. I plan on there being quite a few modified materials at runtime. What's the best way to clean up old material instances when all game objects using it have been unloaded? I read about Resources.UnloadUnusedAssets(), is it that simple? Is there a better way to do what I'm doing?