Hi Bill,
first of all congratulations for this new addressable asset system, that’s a great improvement and also something I needed so much for my ongoing project. I need, just like OP, this “theme” functionality in my game. The approach you described in your post is clear and would work on most scenarios I need.
However, I’m not sure about what’s the best way to tackle some scenarios in my mobile game:
1) UI elements.
How should I manage them? If I had to turn an UI.Image into a “themed” component, what’s the best strategy? Should I make the Sprite addressable? Or maybe make the whole UI.Image object a prefab, and make that addressable? That would increase dramatically the number of prefabs.
I thought that making the lowest level resource an addressable (the Sprite / png itself), could be the best approach.
2) UI elements, and their default appearance in Scene View.
Depending on how scenario 1 is managed, I’m afraid that in Scene View I could end up seeing empty / white images and UI components.
Of course I want to avoid those side effects, and I’d rather see at least one default theme. Best solution would be to be able to switch themes also in Scene View to see if everything looks fine without actually running the game.
3) In-game labels.
I would use addressables to localize some labels, is that a good idea in your opinion? My original plan was to use some sort of dictionary file, a txt, csv, json, anything would be fine. From that file, I would get the localized strings by loading the addressable with LoadAsset. This seems to work right now; do you see any problem with this approach?
4) One-time full bundle download.
I guess they are not called bundles anymore, is it groups now? However, when the user switch the theme, I want it to be a one-time only action. The old theme is unloaded and - ideally - deleted to use less space as possible, while the new theme is loaded. Nothing unusual: blocking pop-up, download percentage shows up, when everything is downloaded the new theme is loaded.
I know that quite some stuff, maybe a bit too specific, but I’m kinda stuck since the addressable system is quite new. I’m afraid that if I choose the wrong strategy now, I might have to rewrite lots of code later. Thanks for taking time to read this 