Relink - Repair SerializeReference Data After a Rename in Unity 6
A downloadable tool
Rename a class, move it to another namespace or another assembly, and every [SerializeReference] value of that class goes null in the Inspector. The data is still in your scene, prefab and ScriptableObject files, under the old type name. Relink finds every one of those entries across the project, proposes the class each one belongs to now, and points them at it, so the values come back.
What it does
- Scans the files, not just what is loaded. Relink reads the text of every scene, prefab and asset under Assets (and embedded or local packages), so assets nobody has opened are covered.
- Sees the entries Unity's own check misses. A value added through a prefab instance's overrides is stored as an override line. Measured on 6000.5.7f1: after a rename, Unity's HasManagedReferencesWithMissingTypes returns false for that instance and the only trace is console errors when the scene opens. Relink reads and repairs the override lines too.
- Proposes the right class from your own data. The class name, and the field names Unity kept under the missing entry. A class that only moved is matched by name; a renamed class by its stored fields plus name similarity.
- Refuses to guess. When two classes fit equally well, the card says PICK ONE and lists them. Relink all confident only applies matches that clear the bar.
- Generic types and nested classes. A renamed class used as a generic argument (Empowered<Fireball>) is rewritten inside the argument list.
- Two ways to repair. Rewrite the assets (only the type lines change; every other line is compared before a file is written; originals are journaled and Revert puts them back), or write Unity's own [MovedFrom] attribute onto the renamed class so branches you have not merged yet load it too. Measured: Unity does not apply [MovedFrom] inside a generic argument, so Relink rewrites those instead and says why.
- Notices the moment you rename. After each compile, if a class disappeared and asset files still name it, you get one warning and a banner in the window.
- A CI check that exits 1 when anything is missing, and an Apply step driven by a version controlled map file for the cases it will not guess.
Measured (Unity 6000.5.7f1)
- On the demo after a simulated refactor (a case change, a namespace move, three renames and one class split in two), Unity itself loads 3 of 13 spell entries. After Relink: 13 of 13, read in a fresh Unity process.
- Break the demo, then repair it with Relink: all three files come back byte for byte identical to what Unity originally wrote (sha256 compared).
- Build machine:
RelinkCI.Checkexits 0 on the clean demo and 1 after the refactor;RelinkCI.Applyrewrites the 8 confident type lines and exits 1 on the one it will not guess; one line in the map file and it exits 0. 13 of 13 checks by process exit code across 14 Unity processes. - Installed from the shipped .unitypackage into a blank Unity 6000.5.7f1 project: 19 files, 0 missing scripts in the demo scene, and 33 of 33 of its own tests passing on the installed bytes.
- 10,000 asset files with managed references scanned in 14.68 s (12.92 s warm) on a busy shared machine: a sample, not a promise.
The demo
Open the demo scene and press Play: a spellbook lists 13 spell effects held through [SerializeReference] on a scene component, in a ScriptableObject and on a prefab instance with an override. Window, CSAF, Relink Demo, Simulate a Rename breaks them the way a refactor does. Press Play again and 10 are lost. Scan in the Relink window, pick one class where it asks, repair, and all 13 are back.
Good to know
- Unity 6, tested on 6000.5.7f1. Text serialization (Force Text, the default): binary assets are listed, never counted as clean.
- Relink repairs the type an entry names. A renamed field inside a class is a job for Unity's FormerlySerializedAs.
- Registry packages in the package cache are read only and are not scanned.
- Editor only: nothing ships in your builds. Full C# source, a numbered guide, and a demo scene. No Resources folder.
From the same studio
Renamed a FIELD rather than a class? That is a different failure: the value still loads through [FormerlySerializedAs] while the old key stays in every file. Reserialize proves that migration actually happened. More Unity editor tools: Roomlight bakes lighting into prefab rooms you spawn at runtime, and Ledgeline generates the jump up, drop and gap NavMesh links Unity's bake leaves out. And if you would rather play than build: SKEIN, our latest game.
AI disclosure: Relink's code and documentation are AI written, and the demo and store images were built and captured by an AI agent from Relink running in Unity.
| Published | 4 days ago |
| Status | Released |
| Category | Tool |
| Author | CSAF — Core Systems Asset Factory |
| Made with | Unity |
| Tags | csharp, data-management, debugging, editor-extension, serialization, source-code, tool, Unity, unity6, unity-editor |
| Languages | English |
| AI Disclosure | AI Assisted, Code, Graphics |
Purchase
In order to download this tool you must purchase it at or above the minimum price of $6.99 USD. You will get access to the following files:








Leave a comment
Log in with itch.io to leave a comment.