Kirino 的游戏宝藏
← Back to issue 022
Game observation

A Thirty-Three-Minute Incremental Bill and an Indivisible Parcel: How Unity Content Directories Pin the Bottleneck Back onto the Content Loading Unit in Slime Rancher 2

If for the past twenty years Unity projects have defaulted to packing “content shipped outside the Player” into indivisible AssetBundles—where one wrong layout tax hits download…

Saved articles ↗

If for the past twenty years Unity projects have defaulted to packing “content shipped outside the Player” into indivisible AssetBundles—where one wrong layout tax hits download size, memory peaks, and load waits at once—then on 22 September 2026 Unity Senior Engineering Manager George Ing’s official blog post laid that twenty-year bill on the table and circled another line in red at the bottom of a partner lab sheet. The title is Monomi Park’s *Slime Rancher 2*. Editor build Unity 6.6 Beta (6000.6.0b10), machine a MacBook Pro M5 Max. Same Addressables project, backend switched from AssetBundle to content directory; Unity says zero code changes. Incremental build fell from 32 minutes 16 seconds to 3 minutes 4 seconds. Clean build from 58 minutes 6 seconds to 37 minutes 13 seconds. Player size from 4 GB to 2.88 GB—about 1.12 GB gone. Boot to menu to gameplay load from 45 seconds to 30 seconds.

I cross-checked the official post, the Unity 6.6 manual introduction, and a technical digest still circulating that day. The numbers and mechanisms below come from public materials. This essay has no access to their project source and does not pretend to be a playtest report.

The through-line images are that thirty-three-minute incremental bill and the “indivisible parcel.” They sound like file-format talk; as a production ethic they are a refusal to keep paying tax for layout guessing. Make artifacts independently loadable first, then argue about how pretty the groups look. Minutes and gigabytes saved must leave evidence. The expensive line must be named—not habitually blamed on “Addressables groups still not drawn right.”

Unity blog hero image for Content Directories

1. Twenty years of default: content equals an indivisible parcel

Since Unity 2.1, AssetBundles have underpinned content shipped outside the Player binary. For twenty years an extraordinary number of games have used them as their data representation, including some of the largest titles. The basic specification is hard. Each Bundle is an indivisible unit for distribution, storage, and loading. Dependencies are tracked at Bundle level, so many assets are welded into larger monoliths that, for efficiency, usually have to be downloaded, loaded, and unloaded together.

That specification almost forces a grammar of production. How a title cuts its Bundle layout presses directly on runtime behaviour and download size—whether you use AssetBundles directly or through the Addressables package. Teams learn to draw groups in the editor, guess co-location, and fear “changing one texture dragging half a world.” Players and developers learn the same vocabulary for hitch and package size: groups too coarse, dependency chains too long, one hot update downloads too much. That mutual understanding makes “keep drawing a better grouping map” a forgivable production habit.

Titles like *Slime Rancher 2*—already shipping, already on Addressables—raise the cost of that habit into concrete numbers. Content is already large. Incremental builds often run past half an hour. The Player already sits around 4 GB. From boot to real play still costs a load measured in three-quarters of an hour. The default asks how to slice groups finer and guess co-location better. They asked whether, once local shipped-with-Player content is already this large, the indivisible unit itself is taxing every build and every enter-gameplay, and whether what should reach the runtime is only independently identifiable artifacts.

The fork is here. Keep polishing Bundle layout and you are hunting cheaper seats inside the citizen tax. Change the loading unit and you admit the tax line was written wrong.

Steam store screenshot of Slime Rancher 2

2. Independently loadable artifacts, stable ids, and a content-hash lookup table

Unity 6.6 writes content directories as an alternative path for AssetBundles shipped locally with the Player. Nail the wording. It is an alternative path, not a retirement notice for AssetBundles. The docs state that content directory builds currently support local content only and do not support remote distribution. Fine-grained OTA is deferred to the Unity 7 generation. Remotely, AssetBundles can still be used.

Mechanically, they refuse to keep baking assets into large loadable units. The runtime can independently identify, load, and unload individual artifacts—meshes, textures, and the rest—with implicit deduplication. For projects already using Addressables for content bundled with the Player, Unity says you can switch to the content directory backend with zero code changes. The *Slime Rancher 2* partner numbers ride that path.

Build runs inside the asset importer framework. Each asset is built by an importer, sandboxed, out of process, deterministic, with asset-database caching, full multi-core saturation, and accelerator shared caches. George Ing puts it plainly: this is the same foundation teased as the multi-process build pipeline in Unity 2023.1. Output is a loose set of fine-grained artifacts, a small manifest tracking dependencies, and clearer diagnostic files.

Addressing looks like git. Open a build and filenames are content hashes. Names like `c0152db4dd710be51b2decb997325f34.cf` are content-addressed, not random. The runtime can therefore deduplicate identical content as a native feature. But if artifacts reference each other by content hash, updating B changes B’s hash, A’s hash shakes when A references B, and the cascade climbs the chain. Content directories solve this by referencing via stable id. The manifest keeps a small lookup table mapping stable ids to content hashes. Stable identity and content fingerprint are split; cascade churn is cut.

Load mounts the directory, reads the manifest, resolves stable-id dependencies between artifacts, then lets each artifact load and unload on its own. Async read and deserialize run in parallel, using platform async read APIs. The underlying format is the next generation of the content file format introduced with DOTS, bringing multi-threaded Entities loading to a wider set of asset types. The engine also gains a modern loadable reference type, `Loadable<T>`. The sample is short.

`Loadable<Mesh> bodyMesh;``bodyMesh.Load();`

A Loadable pulls the object into the build but does not load it until you call Load. Paired with familiar ScriptableObject organisation, dynamic content no longer has to be designed around Bundle layout maps. Pieces of a character creator, chunks of streamed terrain—each can become an independently loadable unit.

Unity blog diagram: source files become loadable artifacts through the build importer

3. Four rows on the partner sheet, and the fifteen seconds missing from entering play

Numbers hold the rhetoric down. Unity’s public comparison table has only four rows, and they are hard enough.

Incremental build: Addressables on the AssetBundle backend at 32 minutes 16 seconds; after switching to content directory, 3 minutes 4 seconds—about twenty-nine minutes saved. Clean build: 58 minutes 6 seconds to 37 minutes 13 seconds. Player size: 4 GB to 2.88 GB. Boot to menu to gameplay: 45 seconds to 30 seconds. Players can feel the fifteen seconds gone. Store pages and disks can feel the 1.12 GB gone. Production schedules can feel the twenty-nine minutes of incremental time gone.

Conditions are locked too. Unity Editor 6000.6.0b10, MacBook Pro M5 Max, existing Addressables project, backend switch, zero code changes. This is a comparison where the loading unit changed while the Addressables surface could still speak. It is not a three-month content-pipeline rewrite victory story. For small teams, that second reading is sharper. You may not persuade a producer to open a three-month rewrite window; you can often persuade them to change one backend setting and paste build logs into the weekly report.

Boundaries must stay clear. The 6.6 cut targets local shipped-with-Player content. Remote hot updates, CDN diffs, on-demand fetch are deferred by Unity to the Unity 7 generation and into 2027. The future sketch is a small hash-driven manifest that can name exactly which artifacts a device lacks, download only those, and update at individual-artifact grain. Reading the post as “AssetBundles can already be thrown away” skews the claim. Local Player-bundled content has an alternative path. Remote may still travel by Bundle. The docs’ “local only” is a boundary.

Closing: independence means willingness to pin the bottleneck on the loading unit

Put this September post back into the autumn 2026 Unity indie and mid-size floor, and what it first hits is a quiet production habit. Content is assumed to be an indivisible parcel. Stuck builds, stuck package size, stuck enter-gameplay are assumed to be Addressables groups not drawn well enough. “One more layout meeting” is assumed to be enough. Few ask whether, once local content is already multi-gigabyte, the citizen tax already costs more than grouping aesthetics; whether a thirty-three-minute incremental build is expensive because of machine power, or because the loading unit forces whole-parcel rebuilds.

For small teams the material is especially useful. You do not need a *Slime Rancher 2*-scale ranch, or an M5 Max. You do have your own “defaults are already enough” list. Shipped-with-Player content still co-located in coarse Bundles. An optimisation meeting that opens with “slice the groups again.” A hot-update package that downloads half a world because co-location was guessed wrong. A half-hour incremental build where nobody dares propose a backend switch. Docs that say local only while the weekly report claims the remote problem was solved too. George Ing and the partner sheet write the cost in plain dirt: zero-code switch, four-row comparison, stable id against content hash, explicit Loadable loads. What is expensive is willingness to pin the bottleneck back onto the loading unit, and willingness to admit on the receipt that the local alternative path is open while the remote ticket must be bought separately.

Executable notes are short.

  • Separate whether your pain is local shipped-with-Player content or remote hot update. Content directories in 6.6 cover only the former.
  • If you already use Addressables and content rides with the Player, try the official switch to the content directory backend and keep build logs for before/after.
  • Log at least four rows: incremental build, clean build, Player size, boot to gameplay. Without numbers, a backend switch is mood.
  • Open the build output and confirm content-hash filenames and the stable-id lookup table appear as documented. Cascade churn is the old tax; the lookup table is the new receipt.
  • Prefer `Loadable<T>` explicit loads for new content; do not weld “in memory” to a large unit.
  • Ban “AssetBundles are retired” from weekly reports. The correct phrase is a local alternative path. Remote strategy is a separate ticket.
  • Treat Unity 7 / 2027 fine-grained OTA as foresight, not a current delivery promise.

Thirty-two minutes sixteen seconds of incremental time, an indivisible parcel, a stable-id-to-content-hash table, and the fifteen seconds missing from a forty-five-second enter-gameplay. Before store copy turns “faster and smaller” into a slogan, production has already written the audit standard into a public blog post. Put artifacts back into independently loadable units first, then pin the charge on the correct loading unit.

小光

Sources and further reading

  • George Ing, Unity Blog (2026-09-22), Content Directories Beyond the AssetBundle (https://unity.com/blog/content-directories-beyond-the-assetbundle)

Unity Manual 6.6 Introduction to content directories

Digest check Unity Content Directories × Slime Rancher 2

Steam Slime Rancher 2

X circulation (2026-10-24) @TamaminiGrok

Sign in to keep your reading history.

View your likes and saved articles across devices.

Sign in