It's not that simple.
The whole purpose of Asset Bundles is to update game content without patching the game. I could simply patch the game frequently to add new assets to the Resources folder, or embedded in the game data, but I'm trying to avoid that so I can potentially target non-patchable platforms like mobile. My whole architecture is based on the ability to have game logic in assets using FSMs/Behavior Trees, so I can include them in Asset Bundles and update actual game logic without patching the game executable.
I wouldn't want to embed binary assets, such as Meshes, Textures, Sounds, Particle Systems, etc. in an external scene format like NodeData or any other system, I'd prefer to reference them using prefabs or paths to the resource folder, like you mentioned, but I can't update the resources folder without patching the game.
You are correct that there is a problem with embedding shaders, but it's on Unity's list of things to fix as per this thread:
http://forum.unity3d.com/threads/loading-assets-from-assetbundles-makes-assets-appear-pink-in-editor.326541/Apparently the problem is that shaders get precompiled per platform, and it is loading the wrong shader in the editor. I think this problem will go away soon due to shaders no longer being precompiled and instead the shader source will be included and compiled dynamically on each platform.
As far as assets referencing assets in other bundles, my understanding is that as long as each asset belongs to an asset bundle, a reference and dependency is used instead. For example, a texture in bundle A is used in a material on a mesh in bundle B, the second bundle will not embed the texture but instead have a reference to the texture in bundle a and there is then a dependency to bundle A added to bundle B, such that when bundle B is downloaded it also downloads bundle A. The system should work like this, and if it doesn't then it's a bug and will eventually get fixed, hopefully long before I launch my game.
So, can we leave that alone for now and answer my questions about how to work within the constraints of my game architecture?
Can I dynamically add and remove prefabs from the TNManager.objects list for each channel I join? So, before joining a channel, I populate the objects list with one that is specific to the scene that will be loaded?
I think the answer is yes, with caveats that if the object list changes that any TNManager.Create'd objects already in the channel will have problems, so I'll avoid that.
I also believe I'll be able to integrate the AssetBundleManager.LoadLevelAsync call to replace the Application.LoadLevelAsync call within TNManager.
Thanks, and hopefully I don't sound too confrontational. I really like TNet's design, I bought it quite a while back and have been basing my networking system on it from a design perspective, so now I just have to go in and start implementing it.
To be clear, I'm making a persistent multiplayer world, and TNet's channels, saved RFCs, etc. are all very elegant for handling a non authoritative multiple scene based world. Most of my logic executes on the client, and the idea of having a semi-authoritative host is perfect for what I need. Much better than other networking systems because of how simple yet powerful it is. I'm using my own system for persistence, using REST calls to a web server to query and store persistent data and also perform some of the more secure logic like applying experience points, leveling up characters, and giving out loot to the player, and am also using socket.io for sending messages back to the client from the web server and for chat.
I should also say that I've been lurking for a while, and some time back you mentioned the idea of having sub channels within a channel that would allow you to join multiple sub channels to segregate messages. I can't remember the exact terminology you used, but the idea is that as you walk around in a scene, you could be joining and leaving channels based on your location so you only receive messages from objects within your vicinity. Now, to me this sounds like a great idea but I'm not sure how you'd handle "host" migration because at the moment I think you base the migration on the assumption that every player has all data synchronized, so a client can take over as "host" at any time. Anyhow, the concept sounded great - any progress on this?
My game wouldn't be possible without TNet, so thanks!