I’ll leave my feedback here, as kind of a continuation of the original thread:Working Multi-Resolution Sprite Sheets - Unity Engine - Unity Discussions
I did manage to get it working originally. But in the end i found my own workaround for multiple textures and scraped using the bundles.( i have a few ideas for it in the future though)
At the time the way the api was presented seemed simple. But i never understood a few things.
Originally you guys said that asset bundles handle dependencies on their own, yehi!
Execpt, clearly they don’t, or the manager wouldn’t need a dependency loading segment…
Also it leaves me wondering about situations like, what if an asset is on bundle A and it depends on another something on bundle B, will the system know to do that through whatever is written in the manifest? will it load the whole bundle B or just what’s needed?
That leads to reflection number 2, when loading a bundle you load it to memory, then you load, say the scene… does that mean that for a while you are using 2x the memory, until the bundle is unloaded? or is it reading from the ‘loaded’ stuff.(because 2x memory consumption even if for a second would kill the purpose for reducing the memory cost on low-end)
Overall what the bundles really are and how they work was not really properly explain from my pov, leading a more critical dev uncertain over how to properly use it, or if to use it. That said…
I’m gonna borrow gskinner’s comment and say that this is a huge time sink, I’ve said this before and was ignored, but i know asset bundles are going to continue being bloat, until you guys do as follows:
They have to be a GUI solution, period. They are basically zip archives with pronto unity integration, why is it so hard to have them be managed via visual interface? why dont we have the ability to see at least thumbnails and descriptions of whats inside, after they are created? Check here:https://feedback.unity3d.com/suggestions/editor-display-asset-bundles-in
For a suggestion made long ago on the subject, i expanded on it.
All in all we should be able to create, control, and view them in the editor by clicking on stuff, and all of this should be integrated into the engine for maximum performance, not made into c# scripts. Unity already does this sort of thing with the new gui system, and we have ready-made modules and whatnot for most use cases.
If a low level-ish api is also going to be made explicit, that’s great also, and better in some cases.
But, as he pointed out, for most scenarios it really shouldn’t be.
2DToolkit, has a bunch of checks that you can set(visually, read: through the inspector), for ratios, resolutions, youNameIt, and when that checks a certain variant is loaded, or whatever is done. You guys could go even more indepth on that sort of thing, reaching the corner cases. Unity at times seems reluctant to build tooling for us, but this type of tooling is rather essential.
Now, this is my latest experience with the current assetManager package you guys leverage:
1)I open the project and get:
Assets/AssetBundleSample/Scripts/Editor/BuildResources.cs(3,19): error CS0234: The type or namespace name iOS' does not exist in the namespace UnityEditor’. Are you missing an assembly reference?
Assets/AssetBundleServer/AssetBundleServer.cs(3,24): error CS0234: The type or namespace name Tasks' does not exist in the namespace System.Threading’. Are you missing an assembly reference?
Originally i had the server script in there also, i deleted that, and deleted the BuildResources, which was only good for iOS anyways.
2)Not my first time using this, but i forgot i had to turn on simulation mode, and to me, the readme didn’t do a good job at telling me to. Then i got this:
Development Server URL could not be found.
UnityEngine.Debug:LogError(Object)
AssetBundles.AssetBundleManager:SetDevelopmentAssetBundleServer() (at Assets/AssetBundleManager/AssetBundleManager.cs:180)
LoadVariants:InitializeSourceURL() (at Assets/AssetBundleSample/Scripts/LoadVariants.cs:92)
c__IteratorB:MoveNext() (at Assets/AssetBundleSample/Scripts/LoadVariants.cs:121)
3)Later on i remembered, oh yeah simulation mode, so set that and now it worked, but i still had consistent issues:
Failed AssetBundleLoadAssetOperation on canvas from the AssetBundle banner.
UnityEngine.Debug:LogError(Object)
c__Iterator9:MoveNext() (at Assets/AssetBundleSample/Scripts/LoadTanks.cs:179)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
c__Iterator6:MoveNext() (at Assets/AssetBundleSample/Scripts/LoadTanks.cs:108)
There is no asset with name “canvas” in banner
UnityEngine.Debug:LogError(Object)
AssetBundles.AssetBundleManager:LoadAssetAsync(String, String, Type) (at Assets/AssetBundleManager/AssetBundleManager.cs:554)
c__Iterator9:MoveNext() (at Assets/AssetBundleSample/Scripts/LoadTanks.cs:176)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
Resource file has already been unloaded.
This came from the tank scene in particular.
Also, on the variants scene, i haven’t gotten the sd to load.
In my own script, back in the day, in the post i mentioned, it was very small and simple, based on what mike geig and others posted back in the day, everything just worked, and i got it to work based on any resolution i choose to filter from. So anything lower then X&Y rez. would load sd instead, all of that exposed in the inspector, perfect.
Which is why, if you guys want this to be a script based solution, its better to give us an outstanding documentation, with load of comments, pink poneys, and happy pokemons, explaning how to implement things in 10k diferent ways, than giving us a ready-made script.
That’s just my opinion though, i wasnt satisfied with the material that we had at the time, and had to do my own research to figure it out… time-sink.
So this manager that you guys made, it seems to work, i guess, i didn’t fully push it. It’s certainly a move in the right direction, and its better than leaving us alone with a feature that only exists for the devs who created them.
But, my official feedback remains in line with what gskinner, and frankly anyone, would say: we need a GUI solution, that is straight forward, essentially a no-brainer, something that hopefully even the dumbest art guy can handle, and that just works for most use cases in the end of the day.
Having the api is great for people that really need it.
I hope that along with the new cinema/director tools, and revamped 2d animation system that are coming, unity realizes, that coupling proper tooling with the editor is more essential to the engine’s success than services like cloud build or whatnot.
Good luck Paul, i know you are making the effort.
PS: also i have a question, now with the whole multi scene functionality, i saw you guys made a scene that had sub scenes in it, with certain relevant game objects that were organized and coupled together. Is this the recommended approach to scene building from now on? are there any performance penalties on using multi scenes, versus simply having your typical buncha objects in a single scene?
I also noticed, and then read in the docs, that now dontDestroyOnLoad creates its own, scene, but that using it is not recommended anymore…
In the case we do it the recommended way(wtih a manager scene), the docs state:
“Cross-scene references are not supported but also not prevented.” Isnt this a serious issue, that defeats the purpose of a multi-scene form factor? Would that lead to any problems for a manager being used in endless ways by scripts on other ‘scenes’? Maybe its better to stick with DDOnLoad, and a single scene setup after all?
Or maybe that comment is there to avoid something specific, and that reason is not made clear.
You guys should make a blog post on recommended usage and the possible pros and cons, performance evaluations, etc., of the new system.
It seems that unity hardly ever makes a point at further explaining these core features when they get implemented, and they are way more essential than “Updated webgl benchmarks” or most blog posts for that matter.
Thanks again.