{"id":50177079,"url":"https://github.com/hchia93/ue-map-utils","last_synced_at":"2026-05-25T05:03:50.336Z","repository":{"id":355630778,"uuid":"1215635416","full_name":"hchia93/ue-map-utils","owner":"hchia93","description":"Unreal Engine 5 editor plugin for level designers: StaticMesh reference audit, session change review, and AI-consumable context export.","archived":false,"fork":false,"pushed_at":"2026-05-12T15:57:15.000Z","size":155,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-12T17:40:34.654Z","etag":null,"topics":["content-pipeline","gameplay-tools","ue5","ue5-plugin"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hchia93.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-20T05:34:01.000Z","updated_at":"2026-05-12T16:45:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hchia93/ue-map-utils","commit_stats":null,"previous_names":["hchia93/ue-map-utils"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hchia93/ue-map-utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hchia93%2Fue-map-utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hchia93%2Fue-map-utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hchia93%2Fue-map-utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hchia93%2Fue-map-utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hchia93","download_url":"https://codeload.github.com/hchia93/ue-map-utils/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hchia93%2Fue-map-utils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33461092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T02:24:28.008Z","status":"ssl_error","status_checked_at":"2026-05-25T02:23:23.339Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["content-pipeline","gameplay-tools","ue5","ue5-plugin"],"created_at":"2026-05-25T05:03:48.929Z","updated_at":"2026-05-25T05:03:50.332Z","avatar_url":"https://github.com/hchia93.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ue-map-utils\n\n**English** | [中文](README_CN.md)\n\n![Claude Code](https://img.shields.io/badge/Claude_Code-black?style=flat\u0026logo=anthropic\u0026logoColor=white)\n![Unreal Engine 5](https://img.shields.io/badge/Unreal_Engine-5.7-blue?logo=unrealengine\u0026logoColor=white)\n![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)\n\nA Level Designer workflow plugin: in-editor actor-level integrity audit, session-level change review, plus context export for AI toolchains.\n\n## What problem it solves\n\nIn UE whitebox / blockout / maintenance workflows for level designers, the following scenarios keep recurring:\n\n- **StaticMeshActor mesh refs get null-ed out**: the asset was deleted, a merge went wrong, a redirector was lost. The level still opens but stuff is missing, and nobody notices before playtest / QA\n- **\"I don't remember what I touched this round\"**: a single editor session moves dozens of actors and tweaks properties. Before Ctrl+S you want to review what changed and how, but UE does not surface this directly\n- **Native Map Check (F7) is per-level manual**: only looks at the currently open level, does not aggregate results, LDs rarely open it on their own\n\nThe common thread: the problem lives at the **in-level actor layer** (not the asset itself), and needs an editor-resident, interactive tool panel.\n\n## How it solves it\n\nThe plugin is an Editor-only UE plugin that exposes a dockable Slate panel under the Level Editor's Window menu.\n\nTwo features are currently stable:\n\n- **Audit StaticMesh References**: scans the current level for `AStaticMeshActor` whose mesh ref is null, writes each to Message Log with a click-to-actor token (double-click selects in the Outliner)\n- **Review Modified Objects**: reads the `GEditor-\u003eTrans` transaction buffer and lists every actor touched during the current session. Each entry has a Details button that shows which properties and which sub-objects changed (per-property delta from `FTransaction::GenerateDiff`). You can also tick a subset of rows and move them as a group to another sub-level\n\nOther entries are still being iterated on, see \"Feature status\" below.\n\n## Comparison with related approaches\n\nWith the same author's [`uasset-json-exporter`](https://github.com/hchia93/uasset-json-exporter), the split is by responsibility, not exclusivity:\n\n| Dimension | ue-map-utils (this plugin) | uasset-json-exporter |\n|---|---|---|\n| Run mode | In-editor, Slate panel + menu | Commandlet (editor closed) |\n| Output | Message Log, interactive dialogs, (planned) topic-focused JSON | Full structural JSON (delta-from-archetype) |\n| Data grain | Session / in-level actor layer | Entire level / BP / DataTable / ... |\n| Suitable tasks | LD day-to-day audit, session change review | Static analysis, AI-consumed full structure, asset-batch audit |\n\nCompared with UE native tooling:\n\n| Mechanism | Shortcoming | How this plugin covers it |\n|---|---|---|\n| Map Check (F7) | Per-level manual, does not aggregate, LDs rarely open it | Message Log can accumulate across levels, click-to-actor |\n| Transaction History | Can undo but cannot \"just view\", no per-property diff UI | Review Modified lists every session-touched actor, with property-level delta |\n| Reference Viewer | Resolves asset dependencies, not actor-level ref nulls | Direct `TActorIterator\u003cAStaticMeshActor\u003e` scan |\n\n## Feature status\n\n| Feature | Entry | Status |\n|---|---|---|\n| Audit StaticMesh References | Window → Map Utils → Audit button | ✅ Stable |\n| Review Modified Objects | Window → Map Utils → Review button | ✅ Stable |\n| Move Checked Actors to Level | \"Move to Level\" inside the Review dialog | 🧪 Ships with Review, happy path works, edge cases not fully covered |\n| Export StaticMesh Context | Window → Map Utils → Export button | 🧪 Code present, not yet exercised in production |\n| Export Collision Context | Same as above | 🧪 Code present, not yet exercised in production |\n| Replace StaticMesh | Outliner right-click on `AStaticMeshActor` → \"Map Utils \u003e Replace StaticMesh...\" | 🧪 Code present, not yet exercised in production |\n| Convert Selected to Blocking Volume | Window → Map Utils → Action button | ❌ Currently not working, entry preserved pending fix |\n\n## Usage\n\n### Open the panel\n\nUnder the Level Editor's **Window** menu, find **Map Utils** and click to open. The panel is a `NomadTab`, dockable next to Details, under Outliner, or anywhere you like.\n\n### Audit StaticMesh References\n\n1. Open the target level\n2. Map Utils panel → click \"Audit StaticMesh References\"\n3. The `MapUtils` category in Message Log lists every null-mesh actor, each with a click-to-actor token that locates it in the Outliner\n\nRead-only. Does not touch the level.\n\n### Review Modified Objects\n\n1. Work normally in the editor: move actors, tweak properties, spawn / delete\n2. Map Utils panel → click \"Review Modified Objects\"\n3. A dialog lists every actor recorded in this session's transaction buffer, sorted by level then actor name\n4. To see what changed on one actor: select the row → click \"Details\" to pop up a per-property / per-sub-object delta list\n5. To bulk-move a group to another sub-level: tick the rows → click \"Move to Level\" and pick the destination\n\nThe data source is the `GEditor-\u003eTrans` transaction buffer, which follows the editor session, **cleared on editor restart**. Destroyed / GC'd actors are skipped automatically.\n\n## Integrating into your project\n\n### Option 1: as a project plugin\n\n1. Copy the contents of `src/` into your project's `Plugins/MapUtils/`\n2. Add to the `Plugins` array in `.uproject`:\n\n```json\n{\n    \"Name\": \"MapUtils\",\n    \"Enabled\": true\n}\n```\n\nThe plugin sets `EnabledByDefault: false`, so it will not auto-load. The host `.uproject` must enable it explicitly.\n\n3. Regenerate project files and build (Development Editor)\n4. Open the editor, \"Map Utils\" should appear in the Window menu\n\n### Option 2: as an engine plugin\n\nCopy the contents of `src/` into `\u003cUE_PATH\u003e/Engine/Plugins/Editor/MapUtils/`, shared by all projects.\n\n### Prerequisites\n\n- Unreal Engine 5.7\n- Editor-only module (not packaged into runtime)\n- Only verified on Win64 so far (other platforms should work in theory, untested)\n\n## Roadmap\n\n- Fix Convert to Blocking Volume\n- Production-validate Context Export and settle the division of labor with `uasset-json-exporter`\n- More audit topics: Lighting / Materials / Geometry overlap / Blueprint refs\n- Add cross-session snapshot / persistence to the Review dialog, to remove the \"editor restart wipes it\" limitation\n\n## License\n\n[MIT](LICENSE) - Hyrex Chia\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhchia93%2Fue-map-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhchia93%2Fue-map-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhchia93%2Fue-map-utils/lists"}