UnityEQLabs Essentials
Unity I/O
Unity I/O is the EQLabs Essentials asset-intake pipeline: it stages an incoming asset, applies a profile’s importer settings, validates it against ~35 rules, and publishes it to its destination with GUIDs and inbound references intact.
Menu: Tools/EQLabs/Workflow/Unity I/O
What it does
Section titled “What it does”Stage → validate → publish. An external file is copied into a staging folder and the profile’s
importer settings are applied to the copy; an in-project asset is treated as its own working copy
and is not reimported before the validation gate. Publishing uses AssetDatabase.MoveAsset, so
the asset keeps its GUID and every scene, prefab and material that referenced it keeps working.
The destination is never overwritten: a name collision blocks the publish unless you explicitly ask
for a versioned name.
Confirm before write. The plan preview shows the classification, the destination and the exact
importer deltas before anything happens. “Apply Safe Fixes” quotes the affected asset count and the
per-setting old → new values, batches the writes, runs behind a cancelable progress bar, and writes
a rollback journal to ProjectSettings/EQLabs/ before the first change. Material Import mode is
reported as drift (UIO-META-005) but never auto-fixed — changing it deletes a model’s embedded
material sub-assets.
Validation rule families. UIO-META-* metadata and importer drift · UIO-MSH-* mesh budgets,
UVs, LODs, runtime hygiene · UIO-RIG-* / UIO-ANM-* rig and animation expectations ·
UIO-MAT-* material assignment · UIO-TEX-* texture role, colour space, size, compression ·
UIO-DCC-* source-manifest provenance · UIO-RPL-* render-pipeline consistency ·
UIO-ADR-* Addressables registration · UIO-TRN-* transform expectations.
Profile layers. A profile resolves DCC, asset, render-pipeline, platform and validation identifiers, and can inherit from layer assets for validation, destination, Addressables and render pipeline so several profiles share one policy.
Provenance. The active profile id, plan hash, source hash and publish time are recorded in the
imported asset’s importer.userData.
Source manifests. A .uiomanifest sidecar next to an incoming file supplies DCC provenance
(tool, version, export settings) that the UIO-DCC-* rules check.
Reports. Every run can export JSON, Markdown, CSV and JUnit XML under
Assets/EQLabs/Generated/Essentials/UnityIO/Reports.
Addressables. After a successful publish the asset can be registered into the profile’s
Addressables group with its labels. This no-ops cleanly when com.unity.addressables is absent.
Batch-mode entry points
Section titled “Batch-mode entry points”All commands accept -uioProfile <asset path or GUID>, -uioRoot <folder>, -uioReport <path> and
-uioReportFormat <json|markdown|csv|junit>.
| Command | What it does |
|---|---|
UnityIO.Cli.ValidateProject | Validates every candidate asset under -uioRoot. Always a full measurement; never reads or writes the cache. |
UnityIO.Cli.ValidateChangedAssets | Incremental. With -uioAssets / -uioAssetList, validates exactly those assets. With neither, covers every candidate under -uioRoot but reuses recorded verdicts for assets whose fingerprint has not changed. |
UnityIO.Cli.ImportPackage | Stages, validates and publishes -uioSource (file, in-project path or folder). |
UnityIO.Cli.CheckProfiles | Checks that the requested profile resolves and its content is usable. |
UnityIO.Cli.CheckCache | Reports the project’s asset cache server (Unity Accelerator) configuration and whether this editor is connected to it. |
UnityIO.Cli.ExportReport | Validates -uioRoot and writes all four report formats. |
Exit-code contract. In batch mode a command exits non-zero when the report contains any
Critical or Error result, and 0 otherwise. A -uioProfile that is supplied but cannot be
resolved is an error, not a silent fallback to defaults.
Incremental validation
Section titled “Incremental validation”ValidateChangedAssets keeps a per-asset cache of validation outcomes so a CI job that changed three
assets does not pay to reload every mesh and texture in the project. Coverage is unchanged — the
report still spans the whole scan root; only the cost is proportional to what moved.
| Flag | Meaning |
|---|---|
-uioNoCache | Forces a full measurement. Nothing is read from, or written to, the cache. |
-uioCache <path> | Overrides the cache file. Default: Library/EQLabs/UnityIO/ValidationCache.json. |
The cache lives under Library/ on purpose: it is a derived per-machine file, so it is never
committed, never shipped, and a deleted Library simply means the next run measures everything.
What invalidates it. An entry is reused only when everything the rules read is unchanged: the
asset and its importer settings (via Unity’s own import-dependency hash), the resolved import plan,
the .uiomanifest sidecar, and the asset’s Addressables group. The whole cache is discarded when
the active profile’s content, a profile layer, the rule set, the active render pipeline, the tool
version or the Unity version changes — a pipeline switch alone changes verdicts with no asset
changing at all.
Reading the report. JSON reports are UnityIO.ValidationReport.v2, which adds validationMode
(Full, Incremental, or Full (cache rejected: …)) and reusedAssets in the header, plus
reusedFromCache on each asset record. Everything a v1 reader consumed is unchanged and in the same
place. A rejected cache is reported, not silently downgraded, so a clean result always states how
much of it was measured in that run.
In the command center, Validate Changed Only is the same thing; Validate Folder stays a full measurement. The summary line always shows the mode and the reused/measured split.
Starter profile
Section titled “Starter profile”Create one from the Unity I/O command center, or use the shipped starter profile at:
Assets/EQLabs/Editor/Essentials/Profiles/UnityIO/UnityIO_StaticMesh_Prop_URP_PC.asset
Automatic import enforcement (the AssetPostprocessor path) is off by default. Enable it only
after setting an active profile.
Opens our feedback form in a new tab with the tool name pre-filled.