Unity Compiling Confusion

I’ve been using Unity for around 3 years now and I always notice games which are structured the same way as Unity-compiled games. Let me explain, when I compile my Unity games, the final product (for PC) is the exe file and the Data folder, right.

I’ve seen games like Audiosurf 2, Distance, Kerbal Space and Race The Sun which do have the Data folder and the exe file but they have a lot of other folders e.g. Sounds, Objects, Plugins, Internals etc.
So are these games created with Unity?
If so, what plugin/code did the creators use to get in all the files/folders to be read by the game.
If not, what program did they use to get the same compling structure, or is that default in most game design programs?

I’m experienced with Unity but not with the whole folder structure business. Please teach (or at least direct) me in the basics of how Unity renders games.

I think they load everything dynamically. This is good solution when you have to change your asset.

Let’s imagine, you compile a very big game BUT you need to change one sound (for example) after the build.

This could be a problem when all your asset are built with the project.
With a dynamic asset system, you just replace your sound and that’s it.

As you know, there are a lot of way to load dynamically asset : AssetBundles, Resources folder, WWW, etc…

But this is just an idea and supposition.

To check if a game is build in Windows, download a dependency walker (or similar app):
http://www.dependencywalker.com/
and see if the Unity libraries show up as dependencies for that executable. I think all you do is drag the main .exe game application file into the depends window, been a while since I used it. You may also see other game engines linked in and be able to tell which game engine is used that way.

You can access any files outside of the Unity environment, you just have to use a full path (or …/)when you are accessing them (with exception for the Web based apps). Note, by access, I mean you can load and read/write these files but not use the built-in functions like Resources.Load(), so if you want to load a texture, it will be brute force (actually Unity still makes that pretty darn easy with the Texture2D.LoadImage() method.

Any files inside your Unity folder outside of the Assets folder, at build time, will not be copied to the final output I believe, so you would need to add them manually or use a post-build script. The files located in Assets are generally only going to be copied at compile time if they are used (i.e. assigned/referenced by a game object or prefab in use), with the exception of the References directory under Assets, which will copy all contents so they are available to load dynamically. See Unity - Scripting API: Resources.Load

Additionally, Asset Bundles will allow you to download additional content after the game has been distributed. That’s a big topic in itself, but you basically export assets (i.e. textures, scripts (except on iOS), and prefabs (and even scenes), then serve them on a server, then download them from the game and unpack them, then load them dynamically.

As far as being able to decipher the contents of the Data folder or other folders, that would probably be illegal, definitely if the information was made available, but I don’t really know. Also, note that Unity provides the best design in my opinion with regard to protecting 3rd party licensers and licensees. Many licenses for music, sound effects, and textures will require that your game or application make a reasonable attempt to protecting their copyrighted material. By building it into a compiled format, end users at least can’t come in and pull the files out easily (like the folder structures you mentioned above). This stimulates growth of providers on the Asset Store.