I think the issue tends to stem from duplicating textures in a way Unreal doesn’t handle well, so multiple textures end up with the same GUID. I’m not too sure why it would be giving you an error of duplicate texture GUIDs when all your textures are still reporting unique GUIDs.
-
My first idea would be that my program updated a GUID it couldn’t, so it thought there’s no conflict even though there is. In that case, I would expect the GUID to revert on an editor restart, so I don’t see that as too likely.
- To address this, I could change my plugin to update the GUID of all textures with a matching GUID, rather than letting the first texture retain its GUID. However, to do this, you’d need to reset the textures to a state before my plugin previously updated them, so the program could know which ones to update.
-
My second idea I have is that my plugin doesn’t update the GUID of textures that have an empty GUID. The reason I have it this way is that otherwise, the plugin ends up trying to update a bunch of engine textures, but I haven’t had any actual issues when the plugin includes textures with empty GUIDs.
- A simple change to the plugin should allow you to hit any textures that don’t have a GUID, although this will also result in the plugin always telling you that a texture has changed, since it will always attempt to fix the engine plugins (at least each time you restart the editor).
-
My last remaining idea would be that TObjectIterator (what my plugin uses to find all the textures) “does not include any class default objects.” Maybe if the problematic texture is an improperly copied version of whatever Unreal is considering to be a “class default object,” that could cause the issue? I’m not really sure.
- With a bit more work, I could probably figure out how to get all class default textures, but I’m not too sure how to do that offhand. I’d assume they’d have an empty GUID anyways, so I’d assume the second solution fixes it. Otherwise, if you’d duplicated a “class default object” multiple times, solution one would also be enough.
I’ve made a version of my plugin on a new branch that has the fix for the first and second idea. It also includes the full path name of updated textures, which should help make debugging a tad easier.
EDIT: Plugin is now available for free on the Unreal Marketplace!