Skip to content

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

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.

All commands accept -uioProfile <asset path or GUID>, -uioRoot <folder>, -uioReport <path> and -uioReportFormat <json|markdown|csv|junit>.

CommandWhat it does
UnityIO.Cli.ValidateProjectValidates every candidate asset under -uioRoot. Always a full measurement; never reads or writes the cache.
UnityIO.Cli.ValidateChangedAssetsIncremental. 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.ImportPackageStages, validates and publishes -uioSource (file, in-project path or folder).
UnityIO.Cli.CheckProfilesChecks that the requested profile resolves and its content is usable.
UnityIO.Cli.CheckCacheReports the project’s asset cache server (Unity Accelerator) configuration and whether this editor is connected to it.
UnityIO.Cli.ExportReportValidates -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.

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.

FlagMeaning
-uioNoCacheForces 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.

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.

Report an issue with this tool

Opens our feedback form in a new tab with the tool name pre-filled.