Adding Modding Support - Asset References

I’ve been wanting to add full modding support to my game - aka being able to modify prefabs, textures, meshes, sounds, and scriptable objects. The most powerful solution would be to be able to modify the “pointer” that connects the reference to the asset, since it would mean no file modifications. Addressables solves this, but requires that every moddable asset is a addressable, something that is absolutely impossible for my project at this point.

There are some solutions out there that involve modifying the asset bundles of a build:
UABE: Very powerful tool that allows for export / import of assets
UtinyRipper: Tool that only exports assets

The former is what I will probably end up using. However, it would be incredible if there was a way to instead modify a build to change how asset loading works entirely - aka instead of merely reading from the .assets files, it would have a little bit of code that would first check if a replacement asset exists somewhere specific in a folder or file. This would allow for a more “drag and drop” approach to modding (having mod files separate from original assets), a lot like the Creation Engine, as opposed to modifying (and thus possibly destroying) the asset files.

I’m sure this is essentially impossible, but I figured I’d ask if this is even reasonable. It would have to be a modification to the build exe, since reference stuff is not accessible via C# of course.

Have you looked at the third-part assets in the store for allowing modding.

Textures and meshes can be loaded at runtime, from file. No big challenge here.

Generally materials, you could write simple in game editor, which allow create materials at runtime. You could save data to file. Not the material itself. So these are possible already, you could do on your own.

But yes, there are various assets, which handle these.

Regarding scripting, few solutions there, but look Mini Scrip.

There is also large nodding tool, which is used by many known Unity games. However, I forgot its name.

My goal is to allow every asset to be moddable. In other words, a solution that involves loading textures during runtime won’t really work, since that would involve any uses of that texture to have custom logic for modifying the reference