nccgs 2.1.1 → 3.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +76 -235
- package/LICENSE +1 -1
- package/README.md +87 -206
- package/THIRD_PARTY_NOTICES.md +6 -34
- package/bin/nccgs.mjs +96 -0
- package/cli/doctor.mjs +82 -0
- package/cli/feedback.mjs +13 -0
- package/cli/install.mjs +111 -0
- package/cli/release.mjs +59 -0
- package/cli/run.mjs +35 -0
- package/cli/spawn.mjs +20 -0
- package/cli/uninstall.mjs +43 -0
- package/cli/update-check.mjs +66 -0
- package/docs/EVIDENCE-VERIFICATION.md +22 -0
- package/package.json +23 -30
- package/runtime/core/diag.mjs +43 -0
- package/runtime/core/feedback-policy.mjs +54 -0
- package/runtime/core/fs.mjs +80 -0
- package/runtime/core/job-object.mjs +73 -0
- package/runtime/core/modes.mjs +87 -0
- package/runtime/core/process-tree.mjs +109 -0
- package/runtime/core/project.mjs +113 -0
- package/runtime/core/snapshot.mjs +114 -0
- package/runtime/hooks/common.mjs +22 -0
- package/runtime/hooks/done-guard.mjs +15 -0
- package/runtime/hooks/guard-mcp.mjs +8 -0
- package/runtime/hooks/guard-shell.mjs +16 -0
- package/runtime/hooks/guard-write.mjs +25 -0
- package/runtime/hooks/session-log.mjs +7 -0
- package/runtime/hooks/session-start.mjs +40 -0
- package/runtime/hooks/unity-transport.mjs +12 -0
- package/runtime/modes.json +39 -0
- package/runtime/task/cost.mjs +103 -0
- package/runtime/task/criteria.mjs +128 -0
- package/runtime/task/feedback.mjs +136 -0
- package/runtime/task/ledger.mjs +109 -0
- package/runtime/task/plan.mjs +69 -0
- package/runtime/task/project.mjs +79 -0
- package/runtime/task/report.mjs +252 -0
- package/runtime/task/task.mjs +238 -0
- package/runtime/unity/assets.mjs +51 -0
- package/runtime/unity/playtest.mjs +145 -0
- package/runtime/unity/unity.mjs +350 -0
- package/scripts/check-job-object.mjs +18 -0
- package/scripts/sync-unity-skills.mjs +35 -119
- package/template/CLAUDE.md +39 -0
- package/template/agents/fast-fix.md +9 -0
- package/template/agents/implementer.md +19 -0
- package/template/agents/playtester.md +15 -0
- package/template/agents/reviewer.md +19 -0
- package/template/agents/scout.md +9 -0
- package/template/ponytail/README.md +8 -0
- package/{.claude/nccgs/packages → template}/ponytail/engineering.md +10 -0
- package/template/protocols/evidence.md +52 -0
- package/template/protocols/playtest.md +45 -0
- package/template/protocols/review.md +34 -0
- package/template/protocols/unity-cli-notes.md +56 -0
- package/template/settings.fragment.json +33 -0
- package/template/skills/art-bible/SKILL.md +19 -0
- package/template/skills/asset-spec/SKILL.md +19 -0
- package/template/skills/brainstorm/SKILL.md +17 -0
- package/template/skills/feedback/SKILL.md +16 -0
- package/template/skills/map-systems/SKILL.md +25 -0
- package/template/skills/playtest/SKILL.md +17 -0
- package/template/skills/status/SKILL.md +18 -0
- package/template/skills/test/SKILL.md +34 -0
- package/template/skills/unity-foundation/SKILL.md +17 -0
- package/template/skills/vertical-slice/SKILL.md +17 -0
- package/template/skills/work/SKILL.md +65 -0
- package/tools/feedback-worker/README.md +12 -0
- package/tools/feedback-worker/worker.js +39 -0
- package/tools/feedback-worker/wrangler.toml +12 -0
- package/unity-skills/2d-pixel-perfect/SKILL.md +208 -0
- package/unity-skills/2d-pixel-perfect/references/api-reference.md +81 -0
- package/unity-skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
- package/unity-skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
- package/unity-skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
- package/unity-skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
- package/unity-skills/asset-transformer-toolkit/SECURITY.md +15 -0
- package/unity-skills/asset-transformer-toolkit/SKILL.md +39 -0
- package/unity-skills/asset-transformer-toolkit/references/create-importer.md +121 -0
- package/unity-skills/asset-transformer-toolkit/references/lods.md +61 -0
- package/unity-skills/asset-transformer-toolkit/references/rule-api.md +154 -0
- package/unity-skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
- package/unity-skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
- package/unity-skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
- package/unity-skills/audio-setup-mixers/SECURITY.md +16 -0
- package/unity-skills/audio-setup-mixers/SKILL.md +127 -0
- package/unity-skills/audio-setup-mixers/references/api.md +162 -0
- package/unity-skills/build-gtk/SKILL.md +242 -0
- package/unity-skills/build-gtk/references/graph-api.md +324 -0
- package/unity-skills/build-gtk/references/pitfalls.md +86 -0
- package/unity-skills/build-gtk/references/runtime-and-visualization.md +196 -0
- package/unity-skills/build-gtk/references/state-machine-api.md +286 -0
- package/unity-skills/build-live-game/SKILL.md +255 -0
- package/{.claude/skills → unity-skills}/build-live-game/references/achievements.md +132 -154
- package/{.claude/skills → unity-skills}/build-live-game/references/apis.md +10 -19
- package/{.claude/skills → unity-skills}/build-live-game/references/authentication.md +14 -20
- package/{.claude/skills → unity-skills}/build-live-game/references/battlepass.md +269 -225
- package/unity-skills/build-live-game/references/blueprints-and-samples.md +75 -0
- package/unity-skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
- package/unity-skills/build-live-game/references/cloud-code-modules.md +1276 -0
- package/unity-skills/build-live-game/references/cloud-code.md +58 -0
- package/{.claude/skills → unity-skills}/build-live-game/references/cloud-save.md +15 -25
- package/{.claude/skills → unity-skills}/build-live-game/references/deployment.md +33 -18
- package/{.claude/skills → unity-skills}/build-live-game/references/player-account.md +31 -23
- package/{.claude/skills → unity-skills}/build-live-game/references/tooling.md +0 -56
- package/unity-skills/build-live-game/references/ugs-cli.md +86 -0
- package/unity-skills/craft-game-floors/SECURITY.md +23 -0
- package/unity-skills/craft-game-floors/SKILL.md +134 -0
- package/unity-skills/craft-game-floors/references/art-direction.md +85 -0
- package/unity-skills/craft-game-floors/references/camera-rigs.md +51 -0
- package/unity-skills/craft-game-floors/references/character-motion.md +35 -0
- package/unity-skills/craft-game-floors/references/game-audio.md +47 -0
- package/unity-skills/craft-game-floors/references/game-feel.md +68 -0
- package/unity-skills/craft-game-floors/references/game-shell.md +45 -0
- package/unity-skills/craft-game-floors/references/live-floor.md +35 -0
- package/unity-skills/craft-game-floors/references/placeholder-assets.md +35 -0
- package/unity-skills/craft-game-floors/references/scene-lighting.md +52 -0
- package/unity-skills/craft-game-floors/references/toon-shading.md +34 -0
- package/unity-skills/craft-game-floors/references/vfx.md +40 -0
- package/unity-skills/craft-game-floors/references/visual-scorecard.md +43 -0
- package/unity-skills/create-2d-physics/SECURITY.md +16 -0
- package/unity-skills/create-2d-physics/SKILL.md +128 -0
- package/unity-skills/create-2d-physics/references/2d-physics-core.md +155 -0
- package/unity-skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/SKILL.md +12 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +35 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +212 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/references/ruletile.md +90 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
- package/unity-skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
- package/unity-skills/generate-editor-search-query/SECURITY.md +17 -0
- package/unity-skills/generate-editor-search-query/SKILL.md +117 -0
- package/unity-skills/generate-editor-search-query/references/open-search-window.md +70 -0
- package/unity-skills/generate-editor-search-query/references/query-patterns.md +124 -0
- package/{.claude/skills → unity-skills}/implement-in-app-purchases/SKILL.md +1 -2
- package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/api-notes.md +25 -28
- package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-convert-native-google-billing.md +1 -1
- package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-implement-iap-d2c.md +40 -5
- package/{.claude/skills → unity-skills}/initialize-ai-navigation/SKILL.md +4 -4
- package/{.claude/skills → unity-skills}/initialize-ai-navigation/references/navigation-system.md +3 -3
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/CHANGELOG.md +12 -0
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/README.md +9 -5
- package/unity-skills/levelplay-unity-integration/SKILL.md +442 -0
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/banner-api.md +15 -8
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/best-practices.md +604 -536
- package/unity-skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/ilrd-api.md +2 -2
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/initialization-api.md +221 -0
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/interstitial-api.md +11 -3
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/ios-setup.md +6 -34
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/migration-sdk-9.md +1 -1
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/privacy-settings.md +14 -29
- package/{.claude/skills → unity-skills}/levelplay-unity-integration/references/rewarded-api.md +20 -4
- package/unity-skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
- package/unity-skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
- package/unity-skills/localization/SKILL.md +347 -0
- package/{.claude/skills → unity-skills}/localization/references/api-notes.md +4 -0
- package/unity-skills/localization/resources/L10nBatchProcessor.cs +191 -0
- package/unity-skills/manage-sprite-atlas/SKILL.md +351 -0
- package/unity-skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
- package/unity-skills/manage-sprite-atlas/references/api.md +382 -0
- package/unity-skills/manage-sprite-atlas/references/best-practices.md +183 -0
- package/unity-skills/manage-sprite-atlas/references/common-errors.md +123 -0
- package/unity-skills/manage-sprite-atlas/references/custom-packing.md +147 -0
- package/unity-skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
- package/unity-skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
- package/unity-skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
- package/unity-skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
- package/unity-skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
- package/unity-skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
- package/unity-skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
- package/unity-skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
- package/unity-skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
- package/unity-skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
- package/unity-skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
- package/unity-skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
- package/unity-skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
- package/unity-skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
- package/unity-skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
- package/unity-skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
- package/unity-skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
- package/unity-skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
- package/unity-skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
- package/unity-skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
- package/unity-skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
- package/unity-skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
- package/unity-skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
- package/unity-skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
- package/unity-skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
- package/unity-skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
- package/unity-skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
- package/unity-skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
- package/unity-skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
- package/unity-skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
- package/unity-skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
- package/unity-skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
- package/unity-skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
- package/unity-skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
- package/unity-skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
- package/unity-skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
- package/unity-skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
- package/unity-skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
- package/unity-skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
- package/unity-skills/manifest.json +1155 -0
- package/unity-skills/migrate-birp-to-urp/SECURITY.md +16 -0
- package/unity-skills/migrate-birp-to-urp/SKILL.md +543 -0
- package/unity-skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
- package/unity-skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
- package/unity-skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
- package/unity-skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
- package/unity-skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
- package/unity-skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
- package/unity-skills/new-unity-project/SECURITY.md +26 -0
- package/unity-skills/new-unity-project/SKILL.md +386 -0
- package/unity-skills/new-unity-project/references/skill-setup.md +66 -0
- package/unity-skills/optimize-audio/SECURITY.md +16 -0
- package/{.claude/skills → unity-skills}/optimize-audio/SKILL.md +17 -17
- package/{.claude/skills → unity-skills}/optimize-audio/resources/audio-import-api.md +8 -5
- package/{.claude/skills → unity-skills}/optimize-text-mesh-pro/SKILL.md +1 -11
- package/unity-skills/optimize-web/SECURITY.md +16 -0
- package/{.claude/skills → unity-skills}/optimize-web/SKILL.md +164 -27
- package/unity-skills/optimize-web/scripts/WebOptimizer.cs +46 -0
- package/unity-skills/optimize-web/scripts/toktx-examples.sh +11 -0
- package/{.claude/skills → unity-skills}/physics-3d-collision/SKILL.md +2 -2
- package/unity-skills/physics-3d-collision/references/troubleshooting.md +8 -0
- package/unity-skills/project-auditor-fixes/SKILL.md +64 -0
- package/{.claude/skills → unity-skills}/setup-multiplayer-services/SKILL.md +1 -4
- package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/SKILL.md +1 -1
- package/{.claude/skills → unity-skills}/shader-graph-create-custom-node/SKILL.md +1 -1
- package/unity-skills/sprite-editor/SECURITY.md +16 -0
- package/{.claude/skills → unity-skills}/sprite-editor/SKILL.md +9 -9
- package/{.claude/skills → unity-skills}/sprite-editor/references/templates.md +1 -1
- package/unity-skills/sprite-segment-3x3grid/SKILL.md +136 -0
- package/unity-skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
- package/{.claude/skills → unity-skills}/ui/SKILL.md +1 -1
- package/{.claude/skills → unity-skills}/ui-imgui/SKILL.md +1 -7
- package/{.claude/skills → unity-skills}/ui-ugui/SKILL.md +3 -9
- package/{.claude/skills → unity-skills}/ui-uitk/SKILL.md +8 -14
- package/{.claude/skills → unity-skills}/ui-uitk/references/custom-elements.md +1 -1
- package/unity-skills/unity-cli/CHANGELOG.md +515 -0
- package/unity-skills/unity-cli/SECURITY.md +68 -0
- package/unity-skills/unity-cli/SKILL.md +723 -0
- package/unity-skills/unity-cli/references/auth-license-cloud.md +318 -0
- package/unity-skills/unity-cli/references/build-run-test.md +555 -0
- package/unity-skills/unity-cli/references/cloud-automation.md +736 -0
- package/{.claude/skills → unity-skills}/unity-cli/references/collaboration.md +166 -105
- package/unity-skills/unity-cli/references/config-hub.md +239 -0
- package/unity-skills/unity-cli/references/diagnostics-maintenance.md +720 -0
- package/unity-skills/unity-cli/references/docs-workflow.md +179 -0
- package/unity-skills/unity-cli/references/editors-install.md +476 -0
- package/unity-skills/unity-cli/references/integration-advanced.md +1130 -0
- package/unity-skills/unity-cli/references/playmode-verification-loop.md +279 -0
- package/unity-skills/unity-cli/references/projects-templates.md +996 -0
- package/unity-skills/unity-cli/references/version-control.md +612 -0
- package/{.claude/skills → unity-skills}/unity-package-management/SKILL.md +60 -12
- package/{.claude/skills → unity-skills}/unity-package-management/references/select-packages.md +39 -21
- package/unity-skills/unity-pipeline/SECURITY.md +17 -0
- package/unity-skills/unity-pipeline/SKILL.md +335 -0
- package/unity-skills/urp-postprocessing/SECURITY.md +16 -0
- package/{.claude/skills → unity-skills}/urp-postprocessing/SKILL.md +12 -12
- package/{.claude/skills → unity-skills}/urp-postprocessing/references/code-templates.md +39 -8
- package/{.claude/skills → unity-skills}/validate-urp-render-graph-renderer-feature/SKILL.md +1 -1
- package/.claude/agents/nccgs-adversarial-reviewer.md +0 -43
- package/.claude/agents/nccgs-engine-programmer.md +0 -27
- package/.claude/agents/nccgs-fast-implementer.md +0 -30
- package/.claude/agents/nccgs-game-designer.md +0 -26
- package/.claude/agents/nccgs-gameplay-programmer.md +0 -26
- package/.claude/agents/nccgs-qa-engineer.md +0 -27
- package/.claude/agents/nccgs-task-scout.md +0 -24
- package/.claude/agents/nccgs-ui-programmer.md +0 -27
- package/.claude/agents/nccgs-unity-build-specialist.md +0 -27
- package/.claude/agents/nccgs-unity-implementer.md +0 -28
- package/.claude/agents/nccgs-unity-systems-specialist.md +0 -27
- package/.claude/agents/nccgs-unity-ui-specialist.md +0 -27
- package/.claude/agents/nccgs-verification-engineer.md +0 -27
- package/.claude/nccgs/MEMORY.md +0 -66
- package/.claude/nccgs/THIRD_PARTY_NOTICES.md +0 -29
- package/.claude/nccgs/VERSION +0 -1
- package/.claude/nccgs/agent-library/nccgs-accessibility-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-adversarial-reviewer.md +0 -41
- package/.claude/nccgs/agent-library/nccgs-ai-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-analytics-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-art-direction-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-audio-direction-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-creative-director.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-documentation-manager.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-economy-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-engine-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-fast-implementer.md +0 -28
- package/.claude/nccgs/agent-library/nccgs-game-design-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-game-designer.md +0 -24
- package/.claude/nccgs/agent-library/nccgs-gameplay-programmer.md +0 -24
- package/.claude/nccgs/agent-library/nccgs-level-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-live-ops-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-localization-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-narrative-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-network-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-performance-analyst.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-producer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-production-coordinator.md +0 -22
- package/.claude/nccgs/agent-library/nccgs-programming-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-prototyper.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-qa-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-qa-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-release-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-release-lead.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-security-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-sound-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-systems-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-task-scout.md +0 -22
- package/.claude/nccgs/agent-library/nccgs-technical-architect.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-technical-artist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-technical-director.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-tools-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-ui-programmer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-build-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-content-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-implementer.md +0 -26
- package/.claude/nccgs/agent-library/nccgs-unity-rendering-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-systems-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-unity-ui-specialist.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-ux-designer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-verification-engineer.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-world-builder.md +0 -25
- package/.claude/nccgs/agent-library/nccgs-writer.md +0 -25
- package/.claude/nccgs/constitution.md +0 -187
- package/.claude/nccgs/hooks/agent-audit.mjs +0 -16
- package/.claude/nccgs/hooks/closure-guard.mjs +0 -59
- package/.claude/nccgs/hooks/common.mjs +0 -42
- package/.claude/nccgs/hooks/post-compact.mjs +0 -1
- package/.claude/nccgs/hooks/pre-compact.mjs +0 -8
- package/.claude/nccgs/hooks/protect-git.mjs +0 -22
- package/.claude/nccgs/hooks/protect-write.mjs +0 -17
- package/.claude/nccgs/hooks/runtime-observation.mjs +0 -11
- package/.claude/nccgs/hooks/session-start.mjs +0 -29
- package/.claude/nccgs/hooks/session-stop.mjs +0 -7
- package/.claude/nccgs/hooks/unity-transport-guard.mjs +0 -11
- package/.claude/nccgs/packages/ponytail/README.md +0 -46
- package/.claude/nccgs/packages/ponytail/manifest.json +0 -24
- package/.claude/nccgs/pipeline.json +0 -260
- package/.claude/nccgs/protocols/agent-contract.md +0 -101
- package/.claude/nccgs/protocols/astra-claude.md +0 -111
- package/.claude/nccgs/protocols/bounded-repair.md +0 -246
- package/.claude/nccgs/protocols/context-packets.md +0 -23
- package/.claude/nccgs/protocols/delivery-acceptance.md +0 -105
- package/.claude/nccgs/protocols/design-lifecycle.md +0 -139
- package/.claude/nccgs/protocols/editor-session-evidence.md +0 -52
- package/.claude/nccgs/protocols/evidence.md +0 -31
- package/.claude/nccgs/protocols/model-routing.md +0 -46
- package/.claude/nccgs/protocols/orchestration.md +0 -74
- package/.claude/nccgs/protocols/review-handoff.md +0 -101
- package/.claude/nccgs/protocols/shared-workflow-context.md +0 -33
- package/.claude/nccgs/protocols/standalone-gates.md +0 -329
- package/.claude/nccgs/protocols/standalone-pilot.md +0 -144
- package/.claude/nccgs/protocols/standalone.md +0 -207
- package/.claude/nccgs/protocols/task-autonomy.md +0 -55
- package/.claude/nccgs/protocols/task-gates.md +0 -144
- package/.claude/nccgs/protocols/task-slices.md +0 -106
- package/.claude/nccgs/protocols/unity-boundary.md +0 -31
- package/.claude/nccgs/routing.generated.md +0 -49
- package/.claude/nccgs/settings.fragment.json +0 -213
- package/.claude/nccgs/studio.json +0 -472
- package/.claude/nccgs/tools/approve-overrides.mjs +0 -81
- package/.claude/nccgs/tools/autonomy.mjs +0 -40
- package/.claude/nccgs/tools/command-process.mjs +0 -50
- package/.claude/nccgs/tools/command-tokens.mjs +0 -22
- package/.claude/nccgs/tools/compile-policy.mjs +0 -121
- package/.claude/nccgs/tools/configure-models.mjs +0 -96
- package/.claude/nccgs/tools/criteria.mjs +0 -121
- package/.claude/nccgs/tools/delivery-budget.mjs +0 -52
- package/.claude/nccgs/tools/design-readiness.mjs +0 -158
- package/.claude/nccgs/tools/editor-session-evidence.mjs +0 -66
- package/.claude/nccgs/tools/evidence.mjs +0 -153
- package/.claude/nccgs/tools/gates.mjs +0 -297
- package/.claude/nccgs/tools/handoff.mjs +0 -51
- package/.claude/nccgs/tools/hook-transport.mjs +0 -34
- package/.claude/nccgs/tools/inputs.mjs +0 -108
- package/.claude/nccgs/tools/installation-guard.mjs +0 -55
- package/.claude/nccgs/tools/integrity.mjs +0 -69
- package/.claude/nccgs/tools/lifecycle.mjs +0 -542
- package/.claude/nccgs/tools/native-completion.mjs +0 -30
- package/.claude/nccgs/tools/orchestration.mjs +0 -680
- package/.claude/nccgs/tools/paths.mjs +0 -60
- package/.claude/nccgs/tools/policy.mjs +0 -107
- package/.claude/nccgs/tools/process-lock.mjs +0 -74
- package/.claude/nccgs/tools/repair-packet.mjs +0 -106
- package/.claude/nccgs/tools/returned-handoff.mjs +0 -47
- package/.claude/nccgs/tools/review-budget.mjs +0 -171
- package/.claude/nccgs/tools/review-handoff.mjs +0 -66
- package/.claude/nccgs/tools/runtime.mjs +0 -71
- package/.claude/nccgs/tools/session-budget.mjs +0 -67
- package/.claude/nccgs/tools/shared-context-guard.mjs +0 -60
- package/.claude/nccgs/tools/shared-context.mjs +0 -25
- package/.claude/nccgs/tools/task-slices.mjs +0 -147
- package/.claude/nccgs/tools/task.mjs +0 -145
- package/.claude/nccgs/tools/tool-guard.mjs +0 -120
- package/.claude/nccgs/tools/unity-repair.mjs +0 -128
- package/.claude/nccgs/tools/unity-transport.mjs +0 -170
- package/.claude/nccgs/tools/verification-jobs.mjs +0 -171
- package/.claude/nccgs/tools/verification-worker.mjs +0 -71
- package/.claude/nccgs/tools/windows-compiler-server.cs +0 -163
- package/.claude/nccgs/tools/windows-job.cs +0 -103
- package/.claude/nccgs/unity-skills-manifest.json +0 -727
- package/.claude/nccgs/workflow-catalog.json +0 -654
- package/.claude/rules/nccgs-canonical-docs.md +0 -19
- package/.claude/rules/nccgs-editor-tools.md +0 -12
- package/.claude/rules/nccgs-localization.md +0 -12
- package/.claude/rules/nccgs-networking.md +0 -13
- package/.claude/rules/nccgs-performance.md +0 -14
- package/.claude/rules/nccgs-rendering.md +0 -16
- package/.claude/rules/nccgs-security.md +0 -13
- package/.claude/rules/nccgs-tests.md +0 -18
- package/.claude/rules/nccgs-ui.md +0 -14
- package/.claude/rules/nccgs-unity-assets.md +0 -21
- package/.claude/rules/nccgs-unity-code.md +0 -22
- package/.claude/skills/accessibility-review/SKILL.md +0 -22
- package/.claude/skills/accessibility-review/references/astra.md +0 -17
- package/.claude/skills/accessibility-review/references/legacy.md +0 -7
- package/.claude/skills/architecture-decision/SKILL.md +0 -22
- package/.claude/skills/architecture-decision/references/astra.md +0 -12
- package/.claude/skills/architecture-decision/references/legacy.md +0 -7
- package/.claude/skills/asset-audit/SKILL.md +0 -22
- package/.claude/skills/asset-audit/references/astra.md +0 -17
- package/.claude/skills/asset-audit/references/legacy.md +0 -7
- package/.claude/skills/audit/SKILL.md +0 -22
- package/.claude/skills/audit/references/astra.md +0 -17
- package/.claude/skills/audit/references/dimensions.md +0 -46
- package/.claude/skills/audit/references/legacy.md +0 -9
- package/.claude/skills/balance-review/SKILL.md +0 -22
- package/.claude/skills/balance-review/references/astra.md +0 -17
- package/.claude/skills/balance-review/references/legacy.md +0 -7
- package/.claude/skills/bug-triage/SKILL.md +0 -22
- package/.claude/skills/bug-triage/references/astra.md +0 -27
- package/.claude/skills/bug-triage/references/legacy.md +0 -7
- package/.claude/skills/build-live-game/SKILL.md +0 -317
- package/.claude/skills/build-live-game/references/cloud-code.md +0 -563
- package/.claude/skills/closure/SKILL.md +0 -22
- package/.claude/skills/closure/references/astra.md +0 -15
- package/.claude/skills/closure/references/legacy.md +0 -7
- package/.claude/skills/compatibility-review/SKILL.md +0 -22
- package/.claude/skills/compatibility-review/references/astra.md +0 -17
- package/.claude/skills/compatibility-review/references/legacy.md +0 -7
- package/.claude/skills/context-pack/SKILL.md +0 -22
- package/.claude/skills/context-pack/references/astra.md +0 -12
- package/.claude/skills/context-pack/references/legacy.md +0 -7
- package/.claude/skills/dependency-review/SKILL.md +0 -22
- package/.claude/skills/dependency-review/references/astra.md +0 -17
- package/.claude/skills/dependency-review/references/legacy.md +0 -7
- package/.claude/skills/design/SKILL.md +0 -24
- package/.claude/skills/design/references/astra.md +0 -12
- package/.claude/skills/design/references/legacy.md +0 -13
- package/.claude/skills/design-review/SKILL.md +0 -24
- package/.claude/skills/design-review/references/astra.md +0 -17
- package/.claude/skills/design-review/references/legacy.md +0 -7
- package/.claude/skills/evidence-review/SKILL.md +0 -22
- package/.claude/skills/evidence-review/references/astra.md +0 -17
- package/.claude/skills/evidence-review/references/legacy.md +0 -7
- package/.claude/skills/hotfix/SKILL.md +0 -22
- package/.claude/skills/hotfix/references/astra.md +0 -30
- package/.claude/skills/hotfix/references/legacy.md +0 -7
- package/.claude/skills/incident-recovery/SKILL.md +0 -22
- package/.claude/skills/incident-recovery/references/astra.md +0 -27
- package/.claude/skills/incident-recovery/references/legacy.md +0 -7
- package/.claude/skills/levelplay-unity-integration/SKILL.md +0 -1126
- package/.claude/skills/localization/SKILL.md +0 -135
- package/.claude/skills/localization/resources/L10nBatchProcessor.cs +0 -69
- package/.claude/skills/localize-game/SKILL.md +0 -22
- package/.claude/skills/localize-game/references/astra.md +0 -27
- package/.claude/skills/localize-game/references/legacy.md +0 -7
- package/.claude/skills/migrate-project/SKILL.md +0 -22
- package/.claude/skills/migrate-project/references/astra.md +0 -30
- package/.claude/skills/migrate-project/references/legacy.md +0 -19
- package/.claude/skills/migrate-project/references/procedure.md +0 -96
- package/.claude/skills/milestone-review/SKILL.md +0 -22
- package/.claude/skills/milestone-review/references/astra.md +0 -12
- package/.claude/skills/milestone-review/references/legacy.md +0 -7
- package/.claude/skills/nccgs-code-review/SKILL.md +0 -22
- package/.claude/skills/nccgs-code-review/references/astra.md +0 -21
- package/.claude/skills/nccgs-code-review/references/legacy.md +0 -7
- package/.claude/skills/new-unity-project/SKILL.md +0 -179
- package/.claude/skills/performance-audit/SKILL.md +0 -22
- package/.claude/skills/performance-audit/references/astra.md +0 -17
- package/.claude/skills/performance-audit/references/legacy.md +0 -7
- package/.claude/skills/physics-3d-collision/references/troubleshooting.md +0 -41
- package/.claude/skills/plan-feature/SKILL.md +0 -22
- package/.claude/skills/plan-feature/references/astra.md +0 -12
- package/.claude/skills/plan-feature/references/legacy.md +0 -7
- package/.claude/skills/playtest/SKILL.md +0 -22
- package/.claude/skills/playtest/references/astra.md +0 -31
- package/.claude/skills/playtest/references/legacy.md +0 -7
- package/.claude/skills/project-stage/SKILL.md +0 -22
- package/.claude/skills/project-stage/references/astra.md +0 -12
- package/.claude/skills/project-stage/references/legacy.md +0 -7
- package/.claude/skills/prototype-feature/SKILL.md +0 -22
- package/.claude/skills/prototype-feature/references/astra.md +0 -31
- package/.claude/skills/prototype-feature/references/legacy.md +0 -7
- package/.claude/skills/qa-plan/SKILL.md +0 -22
- package/.claude/skills/qa-plan/references/astra.md +0 -12
- package/.claude/skills/qa-plan/references/legacy.md +0 -7
- package/.claude/skills/release/SKILL.md +0 -22
- package/.claude/skills/release/references/astra.md +0 -30
- package/.claude/skills/release/references/legacy.md +0 -11
- package/.claude/skills/release-readiness/SKILL.md +0 -22
- package/.claude/skills/release-readiness/references/astra.md +0 -17
- package/.claude/skills/release-readiness/references/legacy.md +0 -7
- package/.claude/skills/retrospective/SKILL.md +0 -22
- package/.claude/skills/retrospective/references/astra.md +0 -12
- package/.claude/skills/retrospective/references/legacy.md +0 -7
- package/.claude/skills/review/SKILL.md +0 -22
- package/.claude/skills/review/references/astra.md +0 -21
- package/.claude/skills/review/references/legacy.md +0 -9
- package/.claude/skills/security-audit/SKILL.md +0 -22
- package/.claude/skills/security-audit/references/astra.md +0 -17
- package/.claude/skills/security-audit/references/legacy.md +0 -7
- package/.claude/skills/sprint-plan/SKILL.md +0 -22
- package/.claude/skills/sprint-plan/references/astra.md +0 -12
- package/.claude/skills/sprint-plan/references/legacy.md +0 -7
- package/.claude/skills/status/SKILL.md +0 -22
- package/.claude/skills/status/references/astra.md +0 -19
- package/.claude/skills/status/references/legacy.md +0 -9
- package/.claude/skills/story-readiness/SKILL.md +0 -24
- package/.claude/skills/story-readiness/references/astra.md +0 -17
- package/.claude/skills/story-readiness/references/legacy.md +0 -7
- package/.claude/skills/test/SKILL.md +0 -22
- package/.claude/skills/test/references/astra.md +0 -27
- package/.claude/skills/test/references/legacy.md +0 -9
- package/.claude/skills/ui-review/SKILL.md +0 -22
- package/.claude/skills/ui-review/references/astra.md +0 -17
- package/.claude/skills/ui-review/references/legacy.md +0 -7
- package/.claude/skills/unity-cli/CHANGELOG.md +0 -233
- package/.claude/skills/unity-cli/SECURITY.md +0 -22
- package/.claude/skills/unity-cli/SKILL.md +0 -414
- package/.claude/skills/unity-cli/references/auth-license-cloud.md +0 -146
- package/.claude/skills/unity-cli/references/build-run-test.md +0 -349
- package/.claude/skills/unity-cli/references/config-hub.md +0 -103
- package/.claude/skills/unity-cli/references/diagnostics-maintenance.md +0 -326
- package/.claude/skills/unity-cli/references/editors-install.md +0 -327
- package/.claude/skills/unity-cli/references/integration-advanced.md +0 -472
- package/.claude/skills/unity-cli/references/projects-templates.md +0 -574
- package/.claude/skills/work/SKILL.md +0 -22
- package/.claude/skills/work/references/astra.md +0 -32
- package/.claude/skills/work/references/classification.md +0 -41
- package/.claude/skills/work/references/closure.md +0 -60
- package/.claude/skills/work/references/feature-contracts.md +0 -36
- package/.claude/skills/work/references/legacy.md +0 -29
- package/.claude/skills/work/references/verification.md +0 -26
- package/CLAUDE.md +0 -10
- package/MEMORY.md +0 -109
- package/UPGRADING.md +0 -130
- package/VERSION +0 -1
- package/docs/ARCHITECTURE.md +0 -131
- package/docs/ASSET-PRODUCTION-GRAPHIFY-PLAN.md +0 -230
- package/docs/BOUNDED-REPAIR.md +0 -80
- package/docs/EDITOR-SESSION-EVIDENCE.md +0 -52
- package/docs/HANDOFF-AUTOMATION.md +0 -144
- package/docs/HUONG-DAN-MIGRATE-VA-SU-DUNG.md +0 -117
- package/docs/MIGRATION-MATRIX.md +0 -23
- package/docs/NCCGS-1.3.md +0 -13
- package/docs/NCCGS-1.4.1.md +0 -149
- package/docs/NCCGS-1.4.md +0 -184
- package/docs/NCCGS-1.5-IMPLEMENTATION-PLAN.md +0 -378
- package/docs/NCCGS-1.5-PILOT.md +0 -130
- package/docs/NCCGS-1.5.md +0 -237
- package/docs/PHASE-1-OPERATIONS.md +0 -278
- package/docs/PHASE-2-OPERATIONS.md +0 -183
- package/docs/PROJECT-POLICY.md +0 -94
- package/docs/RELEASE-STATUS.md +0 -150
- package/docs/TASK-SLICING.md +0 -57
- package/docs/UNINSTALL.md +0 -134
- package/docs/UPGRADE-QUALIFICATION.md +0 -45
- package/docs/WFK17-HOOK-REPAIR.md +0 -71
- package/docs/WORKFLOWS.md +0 -85
- package/package-assets/nccgs-project.gitignore +0 -2
- package/package-assets/setup-vivox-voice-chat-evals.gitignore +0 -7
- package/scaffold/.nccgs/autonomy.json +0 -4
- package/scaffold/.nccgs/bugs/.gitkeep +0 -1
- package/scaffold/.nccgs/closures/.gitkeep +0 -1
- package/scaffold/.nccgs/context/.gitkeep +0 -1
- package/scaffold/.nccgs/decisions/.gitkeep +0 -1
- package/scaffold/.nccgs/evidence/.gitkeep +0 -1
- package/scaffold/.nccgs/execution.json +0 -10
- package/scaffold/.nccgs/features/.gitkeep +0 -1
- package/scaffold/.nccgs/gates.json +0 -7
- package/scaffold/.nccgs/inputs.json +0 -6
- package/scaffold/.nccgs/migrations/.gitkeep +0 -1
- package/scaffold/.nccgs/playtests/.gitkeep +0 -1
- package/scaffold/.nccgs/project.yaml +0 -109
- package/scaffold/.nccgs/requirements.yaml +0 -10
- package/scaffold/.nccgs/reviews/.gitkeep +0 -1
- package/scaffold/.nccgs/state.md +0 -40
- package/scaffold/.nccgs/templates/agent-handoff.md +0 -37
- package/scaffold/.nccgs/templates/architecture-decision.md +0 -27
- package/scaffold/.nccgs/templates/closure-record.md +0 -62
- package/scaffold/.nccgs/templates/context-packet.yaml +0 -17
- package/scaffold/.nccgs/templates/design-contract.json +0 -34
- package/scaffold/.nccgs/templates/evidence-record.md +0 -23
- package/scaffold/.nccgs/templates/feature-contract.md +0 -60
- package/scaffold/.nccgs/templates/implementation-report.md +0 -52
- package/scaffold/.nccgs/templates/migration-plan.md +0 -40
- package/scaffold/.nccgs/templates/repair-packet.json +0 -14
- package/scaffold/.nccgs/templates/repair-unity-code.json +0 -18
- package/scaffold/.nccgs/templates/repair-unity-editor.json +0 -21
- package/scaffold/.nccgs/templates/task-slices.json +0 -28
- package/scaffold/.nccgs/templates/waiver.md +0 -11
- package/scripts/benchmark-snapshot.mjs +0 -205
- package/scripts/benchmark-v15.mjs +0 -173
- package/scripts/cli.mjs +0 -205
- package/scripts/doctor.mjs +0 -261
- package/scripts/install.mjs +0 -530
- package/scripts/recover-session.mjs +0 -89
- package/scripts/run.mjs +0 -86
- package/scripts/supervise.mjs +0 -152
- package/scripts/uninstall.mjs +0 -292
- package/scripts/validate.mjs +0 -285
- package/scripts/work-handoff.mjs +0 -38
- package/tests/autonomy.test.mjs +0 -126
- package/tests/benchmark-v15.test.mjs +0 -65
- package/tests/design-readiness.test.mjs +0 -200
- package/tests/editor-session-evidence.test.mjs +0 -45
- package/tests/evidence.test.mjs +0 -186
- package/tests/fixtures/compiler-shutdown.cs +0 -67
- package/tests/fixtures/native-provider.mjs +0 -61
- package/tests/framework.test.mjs +0 -740
- package/tests/gates.test.mjs +0 -479
- package/tests/hook-repair.test.mjs +0 -106
- package/tests/lifecycle-v15.test.mjs +0 -346
- package/tests/native-completion-notices.test.mjs +0 -181
- package/tests/orchestration-v15.test.mjs +0 -596
- package/tests/phase1.test.mjs +0 -427
- package/tests/phase2.test.mjs +0 -250
- package/tests/policy-v15.test.mjs +0 -234
- package/tests/ponytail-package.test.mjs +0 -75
- package/tests/returned-handoff-notices.test.mjs +0 -170
- package/tests/review-budget.test.mjs +0 -177
- package/tests/runtime-v15.test.mjs +0 -1198
- package/tests/session-budget.test.mjs +0 -34
- package/tests/task-slices.test.mjs +0 -285
- package/tests/uninstall.test.mjs +0 -477
- package/tests/unity-generated.test.mjs +0 -140
- package/tests/unity-transport.test.mjs +0 -348
- /package/{.claude/nccgs/packages → template}/ponytail/LICENSE +0 -0
- /package/{.claude/nccgs/packages → template}/ponytail/NOTICE.md +0 -0
- /package/{.claude/nccgs/packages → template}/ponytail/complexity-review.md +0 -0
- /package/{.claude/skills → unity-skills}/build-live-game/references/remote-config.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/README.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/codeless-catalog.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-adapty.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-essentialkit.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-revenuecat.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/convert-unipay.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/migration-v4-to-v5.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-add-iap-to-new-project.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/path-convert-native-storekit.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/platform-notes.md +0 -0
- /package/{.claude/skills → unity-skills}/implement-in-app-purchases/references/pre-check.md +0 -0
- /package/{.claude/skills → unity-skills}/localization/resources/LocalizedFontAsset.cs +0 -0
- /package/{.claude/skills → unity-skills}/optimize-audio/resources/platform-settings.md +0 -0
- /package/{.claude/skills → unity-skills}/optimize-web/resources/WebOptimizer.cs +0 -0
- /package/{.claude/skills → unity-skills}/optimize-web/resources/toktx-examples.sh +0 -0
- /package/{.claude/skills → unity-skills}/physics-3d-collision/resources/CollisionDebugger.cs +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/dgs-entrypoint.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/entrypoints.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/examples.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/implementation-fit.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/underlying-services.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-multiplayer-services/references/workflows-prerequisites.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/.env.example +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/README.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/promptfooconfig.yaml +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/init-and-login.yaml +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/text-chat.yaml +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/evals/tests/voice-channels.yaml +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/events-and-participants.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/init-and-login.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/text-chat.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/troubleshooting.md +0 -0
- /package/{.claude/skills → unity-skills}/setup-vivox-voice-chat/references/voice-channels.md +0 -0
- /package/{.claude/skills → unity-skills}/shader-graph-create-custom-node/resources/all_hints.hlsl +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/references/api_reference.md +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/references/background.md +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/AutomaticSliceTexture.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GenerateNewSpriteRects.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GetTextureSourceImageSize.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GetTextureToSlice.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/GridSliceTexture.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/IsometricSliceTexture.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/README.md +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/SetPivotExample.cs +0 -0
- /package/{.claude/skills → unity-skills}/sprite-editor/scripts/SpriteToPng.cs +0 -0
- /package/{.claude/skills → unity-skills}/ui-imgui/references/gui-elements.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-imgui/references/templates.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-ugui/references/scrollview-setup.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/common-issues.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/painter2d.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/pointermanipulator-guide.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/svg-icons.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/ui-runtime-binding.md +0 -0
- /package/{.claude/skills → unity-skills}/ui-uitk/references/uss-guide.md +0 -0
- /package/{.claude/skills → unity-skills}/urp-postprocessing/references/effect-reference.md +0 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Custom Sprite Packing with ScriptablePacker
|
|
2
|
+
|
|
3
|
+
Guide for implementing custom sprite packing algorithms in SpriteAtlas V2.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Overview](#overview)
|
|
8
|
+
- [Use Cases](#use-cases)
|
|
9
|
+
- [ScriptablePacker API](#scriptablepacker-api)
|
|
10
|
+
- [Abstract Methods](#abstract-methods)
|
|
11
|
+
- [PackerData Structure](#packerdata-structure)
|
|
12
|
+
- [SpriteData Structure](#spritedata-structure)
|
|
13
|
+
- [SpritePack Output Structure](#spritepack-output-structure)
|
|
14
|
+
- [TextureData Structure](#texturedata-structure)
|
|
15
|
+
- [PackTransform Options](#packtransform-options)
|
|
16
|
+
- [Example: Grid-Based Packer](#example-grid-based-packer)
|
|
17
|
+
- [Example: Multi-Page Packer](#example-multi-page-packer)
|
|
18
|
+
- [Example: Size-Optimized Packer](#example-size-optimized-packer)
|
|
19
|
+
- [Assigning Custom Packer to Atlas](#assigning-custom-packer-to-atlas)
|
|
20
|
+
- [Best Practices](#best-practices)
|
|
21
|
+
- [Performance](#performance)
|
|
22
|
+
- [Correctness](#correctness)
|
|
23
|
+
- [Maintainability](#maintainability)
|
|
24
|
+
- [Common Pitfalls](#common-pitfalls)
|
|
25
|
+
- [Debugging Tips](#debugging-tips)
|
|
26
|
+
|
|
27
|
+
## Overview
|
|
28
|
+
|
|
29
|
+
`ScriptablePacker` is an abstract base class for creating custom packing algorithms. Extend it to implement specialized packing strategies beyond Unity's default algorithms.
|
|
30
|
+
|
|
31
|
+
**Namespace:** `UnityEditor.U2D`
|
|
32
|
+
**Location:** `SpriteAtlasAsset.bindings.cs`
|
|
33
|
+
|
|
34
|
+
## Use Cases
|
|
35
|
+
|
|
36
|
+
Custom packers are useful for:
|
|
37
|
+
- Non-standard sprite arrangements (circular, grid-based, specific patterns)
|
|
38
|
+
- Multi-page atlas generation with custom page selection
|
|
39
|
+
- Sprite preprocessing and optimization before packing
|
|
40
|
+
- Platform-specific packing strategies
|
|
41
|
+
- Domain-specific packing requirements (UI layouts, sprite sheets)
|
|
42
|
+
|
|
43
|
+
## ScriptablePacker API
|
|
44
|
+
|
|
45
|
+
### Abstract Methods
|
|
46
|
+
|
|
47
|
+
See [resources/scriptablepacker.cs](../resources/scriptablepacker.cs).
|
|
48
|
+
|
|
49
|
+
### PackerData Structure
|
|
50
|
+
|
|
51
|
+
Contains all input data for packing:
|
|
52
|
+
|
|
53
|
+
```csharp
|
|
54
|
+
struct PackerData
|
|
55
|
+
{
|
|
56
|
+
NativeArray<Color32> colorData; // Pixel data from source textures
|
|
57
|
+
NativeArray<SpriteData> spriteData; // Sprite information
|
|
58
|
+
NativeArray<TextureData> textureData; // Texture dimensions
|
|
59
|
+
NativeArray<int> indexData; // Sprite mesh indices
|
|
60
|
+
NativeArray<Vector2> vertexData; // Sprite mesh vertices
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Important:** Do NOT dispose these arrays - they're managed externally by Unity.
|
|
65
|
+
|
|
66
|
+
### SpriteData Structure
|
|
67
|
+
|
|
68
|
+
Information about each sprite:
|
|
69
|
+
|
|
70
|
+
See [resources/spritedata.cs](../resources/spritedata.cs).
|
|
71
|
+
|
|
72
|
+
### SpritePack Output Structure
|
|
73
|
+
|
|
74
|
+
Set this on each `SpriteData` to specify packing result:
|
|
75
|
+
|
|
76
|
+
See [resources/spritepack.cs](../resources/spritepack.cs).
|
|
77
|
+
|
|
78
|
+
### TextureData Structure
|
|
79
|
+
|
|
80
|
+
Source texture information:
|
|
81
|
+
|
|
82
|
+
See [resources/texturedata.cs](../resources/texturedata.cs).
|
|
83
|
+
|
|
84
|
+
### PackTransform Options
|
|
85
|
+
|
|
86
|
+
Sprite transformations during packing:
|
|
87
|
+
|
|
88
|
+
See [resources/packtransform.cs](../resources/packtransform.cs).
|
|
89
|
+
|
|
90
|
+
## Example: Grid-Based Packer
|
|
91
|
+
|
|
92
|
+
Simple example that arranges sprites in a grid pattern.
|
|
93
|
+
|
|
94
|
+
See [resources/gridspritepacker.cs](../resources/gridspritepacker.cs).
|
|
95
|
+
|
|
96
|
+
## Example: Multi-Page Packer
|
|
97
|
+
|
|
98
|
+
Distributes sprites across multiple atlas pages.
|
|
99
|
+
|
|
100
|
+
See [resources/multipagepacker.cs](../resources/multipagepacker.cs).
|
|
101
|
+
|
|
102
|
+
## Example: Size-Optimized Packer
|
|
103
|
+
|
|
104
|
+
Packs larger sprites first for better space utilization.
|
|
105
|
+
|
|
106
|
+
See [resources/sizeoptimizedpacker.cs](../resources/sizeoptimizedpacker.cs).
|
|
107
|
+
|
|
108
|
+
## Assigning Custom Packer to Atlas
|
|
109
|
+
|
|
110
|
+
Use `SpriteAtlasAsset.SetScriptablePacker()` to assign your custom packer.
|
|
111
|
+
|
|
112
|
+
See [resources/custompackersetup.cs](../resources/custompackersetup.cs).
|
|
113
|
+
|
|
114
|
+
## Best Practices
|
|
115
|
+
|
|
116
|
+
### Performance
|
|
117
|
+
|
|
118
|
+
1. **Minimize array access**: Cache NativeArray values when accessing multiple times
|
|
119
|
+
2. **Avoid allocations**: Don't create new arrays or collections in hot paths
|
|
120
|
+
3. **Use simple algorithms**: Complex packing algorithms can slow down import times
|
|
121
|
+
|
|
122
|
+
### Correctness
|
|
123
|
+
|
|
124
|
+
1. **Don't dispose input arrays**: Unity manages these - don't dispose them
|
|
125
|
+
2. **Validate output bounds**: Ensure sprites fit within atlas dimensions
|
|
126
|
+
3. **Handle edge cases**: Empty sprite lists, oversized sprites, etc.
|
|
127
|
+
4. **Return false on failure**: Let Unity know packing failed
|
|
128
|
+
|
|
129
|
+
### Maintainability
|
|
130
|
+
|
|
131
|
+
1. **Make packer configurable**: Add public properties for tweaking behavior
|
|
132
|
+
2. **Add debug logging**: Log packing statistics and warnings
|
|
133
|
+
3. **Document algorithm**: Explain packing strategy in comments
|
|
134
|
+
4. **Test with various inputs**: Different sprite sizes, counts, and arrangements
|
|
135
|
+
|
|
136
|
+
## Common Pitfalls
|
|
137
|
+
|
|
138
|
+
1. **Disposing input arrays**: Unity manages these - don't dispose them
|
|
139
|
+
2. **Forgetting to set `sprite.output`**: Each sprite needs output position
|
|
140
|
+
3. **Exceeding atlas bounds**: Validate that packed sprites fit within max texture size
|
|
141
|
+
4. **Not handling multi-page**: Set `sprite.output.page` correctly for multi-page atlases
|
|
142
|
+
5. **Modifying read-only fields**: Some fields like texture dimensions are read-only
|
|
143
|
+
6. **Forgetting to assign packer**: Use `SetScriptablePacker()` before saving atlas
|
|
144
|
+
|
|
145
|
+
## Debugging Tips
|
|
146
|
+
|
|
147
|
+
See [resources/packerdebugging.cs](../resources/packerdebugging.cs).
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Manual Authoring (Advanced - Not Default)
|
|
2
|
+
|
|
3
|
+
> ⚠ **WARNING**: Manual authoring is NOT the default approach. Only use these patterns when the user EXPLICITLY requests manual control or editor preview during development.
|
|
4
|
+
|
|
5
|
+
> 🚨 **DEFAULT APPROACH**: Use prebuild generation with `IPreprocessBuildWithReport` instead. See the main SKILL.md Quick Start section.
|
|
6
|
+
|
|
7
|
+
## When to Use Manual Authoring
|
|
8
|
+
|
|
9
|
+
**Manual authoring is appropriate ONLY for:**
|
|
10
|
+
- Hand-optimized sprite layouts where exact positioning matters
|
|
11
|
+
- Custom sprite ordering requirements
|
|
12
|
+
- Editor preview during authoring workflow
|
|
13
|
+
- Explicitly requested by user
|
|
14
|
+
|
|
15
|
+
**DO NOT use manual authoring when:**
|
|
16
|
+
- User asks to "create sprite atlas" (use prebuild)
|
|
17
|
+
- User asks to "optimize sprites" (use prebuild)
|
|
18
|
+
- User asks for automated workflow (use prebuild)
|
|
19
|
+
- No specific manual control requirement mentioned
|
|
20
|
+
|
|
21
|
+
## Create and Configure Master Atlas (Manual Pattern)
|
|
22
|
+
|
|
23
|
+
> 🚨 **REMINDER**: Only use this if explicitly requested. Default is prebuild with `IPreprocessBuildWithReport`.
|
|
24
|
+
|
|
25
|
+
See [resources/createandconfiguremasteratlas.cs](../resources/createandconfiguremasteratlas.cs).
|
|
26
|
+
|
|
27
|
+
## Create Variant Atlas (Manual Pattern)
|
|
28
|
+
|
|
29
|
+
> 🚨 **REMINDER**: Only use this if explicitly requested. Default is prebuild with `IPreprocessBuildWithReport`.
|
|
30
|
+
|
|
31
|
+
See [resources/variantatlas.cs](../resources/variantatlas.cs).
|
|
32
|
+
|
|
33
|
+
## Runtime Dynamic Loading
|
|
34
|
+
|
|
35
|
+
See [resources/runtimeatlasloader.cs](../resources/runtimeatlasloader.cs).
|
|
36
|
+
|
|
37
|
+
## Runtime Sprite Access
|
|
38
|
+
|
|
39
|
+
See [resources/runtimespriteaccess.cs](../resources/runtimespriteaccess.cs).
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
using UnityEditor;
|
|
3
|
+
using UnityEditor.U2D;
|
|
4
|
+
using UnityEngine;
|
|
5
|
+
using UnityEngine.U2D;
|
|
6
|
+
|
|
7
|
+
/// <summary>
|
|
8
|
+
/// Explains the critical distinction between editor authoring and runtime access.
|
|
9
|
+
/// SpriteAtlasAsset (editor) vs SpriteAtlas (runtime) - never mix them!
|
|
10
|
+
/// </summary>
|
|
11
|
+
public static class AuthoringVsRuntimeDocumentation
|
|
12
|
+
{
|
|
13
|
+
/// <summary>
|
|
14
|
+
/// SPRITEATLASASSET - Editor-Only Type
|
|
15
|
+
/// Used for creating, modifying, and configuring atlases in the editor.
|
|
16
|
+
/// Cannot be used at runtime.
|
|
17
|
+
/// </summary>
|
|
18
|
+
public static void Use_SpriteAtlasAsset_Editor()
|
|
19
|
+
{
|
|
20
|
+
// ✅ CORRECT: Using SpriteAtlasAsset in editor code
|
|
21
|
+
|
|
22
|
+
// Create new atlas asset
|
|
23
|
+
SpriteAtlasAsset asset = new SpriteAtlasAsset();
|
|
24
|
+
|
|
25
|
+
// Add sprites for authoring
|
|
26
|
+
Object[] sprites = AssetDatabase.LoadAllAssetsAtPath("Assets/Sprites/mySprite.png");
|
|
27
|
+
asset.Add(sprites);
|
|
28
|
+
|
|
29
|
+
// Save to disk
|
|
30
|
+
SpriteAtlasAsset.Save(asset, "Assets/MyAtlas.spriteatlasv2");
|
|
31
|
+
|
|
32
|
+
// Configure via importer (editor-only)
|
|
33
|
+
AssetDatabase.ImportAsset("Assets/MyAtlas.spriteatlasv2");
|
|
34
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath("Assets/MyAtlas.spriteatlasv2") as SpriteAtlasImporter;
|
|
35
|
+
importer.includeInBuild = true;
|
|
36
|
+
importer.SaveAndReimport();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// <summary>
|
|
40
|
+
/// SPRITEATLAS - Runtime-Only Type
|
|
41
|
+
/// Used for querying packed sprites at runtime.
|
|
42
|
+
/// Cannot be created or modified in editor code.
|
|
43
|
+
/// </summary>
|
|
44
|
+
public static void Use_SpriteAtlas_Runtime()
|
|
45
|
+
{
|
|
46
|
+
// ✅ CORRECT: Using SpriteAtlas at runtime
|
|
47
|
+
|
|
48
|
+
// Register for late-binding to load atlases on-demand
|
|
49
|
+
SpriteAtlasManager.atlasRegistered += OnAtlasLoaded;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private static void OnAtlasLoaded(SpriteAtlas atlas)
|
|
53
|
+
{
|
|
54
|
+
// Query sprites from loaded atlas (runtime only)
|
|
55
|
+
Object[] packables = atlas.GetPackables();
|
|
56
|
+
// ... use sprites ...
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/// <summary>
|
|
60
|
+
/// ❌ WRONG: Using SpriteAtlas in editor code.
|
|
61
|
+
/// SpriteAtlas is a runtime type and cannot be constructed in editor.
|
|
62
|
+
/// </summary>
|
|
63
|
+
public static void Wrong_UseSpriteAtlasInEditor()
|
|
64
|
+
{
|
|
65
|
+
// ❌ WRONG: Cannot construct SpriteAtlas in editor
|
|
66
|
+
// SpriteAtlas atlas = new SpriteAtlas(); // Compile error!
|
|
67
|
+
|
|
68
|
+
// ❌ WRONG: Cannot load SpriteAtlas in editor
|
|
69
|
+
// SpriteAtlas atlas = AssetDatabase.LoadAssetAtPath<SpriteAtlas>("path"); // Runtime error!
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/// <summary>
|
|
73
|
+
/// ❌ WRONG: Using SpriteAtlasAsset at runtime.
|
|
74
|
+
/// SpriteAtlasAsset is an asset file, not a runtime object.
|
|
75
|
+
/// </summary>
|
|
76
|
+
public static void Wrong_UseSpriteAtlasAssetRuntime()
|
|
77
|
+
{
|
|
78
|
+
// ❌ WRONG: Cannot use SpriteAtlasAsset in runtime code
|
|
79
|
+
// SpriteAtlasAsset asset = someReference; // This is an editor type!
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/// <summary>
|
|
83
|
+
/// ✅ CORRECT: Two-step V2 pattern for atlas creation.
|
|
84
|
+
/// Step 1: Create with SpriteAtlasAsset (editor)
|
|
85
|
+
/// Step 2: Use at runtime via SpriteAtlas
|
|
86
|
+
/// </summary>
|
|
87
|
+
public static void Correct_TwoStepPattern()
|
|
88
|
+
{
|
|
89
|
+
// ===== STEP 1: EDITOR AUTHORING (SpriteAtlasAsset) =====
|
|
90
|
+
|
|
91
|
+
// In editor script or prebuild processor:
|
|
92
|
+
SpriteAtlasAsset asset = new SpriteAtlasAsset();
|
|
93
|
+
asset.Add(AssetDatabase.LoadAllAssetsAtPath("Assets/Sprites/mySprite.png"));
|
|
94
|
+
SpriteAtlasAsset.Save(asset, "Assets/MyAtlas.spriteatlasv2");
|
|
95
|
+
AssetDatabase.ImportAsset("Assets/MyAtlas.spriteatlasv2");
|
|
96
|
+
|
|
97
|
+
// Configure via importer
|
|
98
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath("Assets/MyAtlas.spriteatlasv2") as SpriteAtlasImporter;
|
|
99
|
+
importer.includeInBuild = true; // Include in build for immediate loading
|
|
100
|
+
importer.SaveAndReimport();
|
|
101
|
+
|
|
102
|
+
// ===== STEP 2: RUNTIME ACCESS (SpriteAtlas) =====
|
|
103
|
+
|
|
104
|
+
// In runtime script:
|
|
105
|
+
/*
|
|
106
|
+
public class MyRuntimeScript : MonoBehaviour
|
|
107
|
+
{
|
|
108
|
+
private void Awake()
|
|
109
|
+
{
|
|
110
|
+
// Register for late-binding if using Addressables
|
|
111
|
+
SpriteAtlasManager.atlasRegistrationNeeded += OnAtlasRegistrationNeeded;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
private void OnAtlasRegistrationNeeded(Sprite sprite)
|
|
115
|
+
{
|
|
116
|
+
// Load atlas via Addressables/AssetBundles
|
|
117
|
+
// The loaded SpriteAtlas is what you query at runtime
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
*/
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/// <summary>
|
|
124
|
+
/// Summary table of when to use each type:
|
|
125
|
+
///
|
|
126
|
+
/// | Context | Type | Purpose |
|
|
127
|
+
/// |--------------|-------------------|--------------------------------------|
|
|
128
|
+
/// | Editor | SpriteAtlasAsset | Create, modify, configure atlases |
|
|
129
|
+
/// | Editor | SpriteAtlasImporter | Set texture, packing, platform settings |
|
|
130
|
+
/// | Runtime | SpriteAtlas | Query packed sprites (read-only) |
|
|
131
|
+
/// | Runtime | SpriteAtlasManager| Dynamic loading callbacks |
|
|
132
|
+
/// </summary>
|
|
133
|
+
public static void Summary_Table()
|
|
134
|
+
{
|
|
135
|
+
/*
|
|
136
|
+
+------------------+-------------------+--------------------------------------+
|
|
137
|
+
| Context | Type | Purpose |
|
|
138
|
+
+------------------+-------------------+--------------------------------------+
|
|
139
|
+
| Editor | SpriteAtlasAsset | Create, modify, configure atlases |
|
|
140
|
+
| Editor | SpriteAtlasImporter | Set texture, packing, platform settings |
|
|
141
|
+
| Runtime | SpriteAtlas | Query packed sprites (read-only) |
|
|
142
|
+
| Runtime | SpriteAtlasManager| Dynamic loading callbacks |
|
|
143
|
+
+------------------+-------------------+--------------------------------------+
|
|
144
|
+
*/
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/// <summary>
|
|
149
|
+
/// Example: Editor script that creates an atlas using the correct types.
|
|
150
|
+
/// </summary>
|
|
151
|
+
public static class CorrectEditorScript
|
|
152
|
+
{
|
|
153
|
+
[MenuItem("Tools/Create Atlas")]
|
|
154
|
+
public static void CreateAtlas()
|
|
155
|
+
{
|
|
156
|
+
// Use SpriteAtlasAsset for editor authoring
|
|
157
|
+
SpriteAtlasAsset asset = new SpriteAtlasAsset();
|
|
158
|
+
|
|
159
|
+
// Add sprites from a folder
|
|
160
|
+
string[] guids = AssetDatabase.FindAssets("t:Sprite", new[] { "Assets/Sprites" });
|
|
161
|
+
Object[] sprites = new Object[guids.Length];
|
|
162
|
+
for (int i = 0; i < guids.Length; i++)
|
|
163
|
+
{
|
|
164
|
+
sprites[i] = AssetDatabase.LoadAssetAtPath<Sprite>(
|
|
165
|
+
AssetDatabase.GUIDToAssetPath(guids[i]));
|
|
166
|
+
}
|
|
167
|
+
asset.Add(sprites);
|
|
168
|
+
|
|
169
|
+
// Save and import
|
|
170
|
+
string path = "Assets/Atlases/MyAtlas.spriteatlasv2";
|
|
171
|
+
SpriteAtlasAsset.Save(asset, path);
|
|
172
|
+
AssetDatabase.ImportAsset(path);
|
|
173
|
+
|
|
174
|
+
Debug.Log($"Created atlas at {path}");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
// [TYPE:POSTPROCESS-ADDRESSABLES]
|
|
3
|
+
// Generated by SpriteAtlas V2 Skill
|
|
4
|
+
// This script builds Addressables content after atlas generation
|
|
5
|
+
|
|
6
|
+
using UnityEditor;
|
|
7
|
+
using UnityEditor.Build;
|
|
8
|
+
using UnityEditor.Build.Reporting;
|
|
9
|
+
using UnityEngine;
|
|
10
|
+
|
|
11
|
+
#if UNITY_ADDRESSABLES
|
|
12
|
+
using UnityEditor.AddressableAssets;
|
|
13
|
+
using UnityEditor.AddressableAssets.Settings;
|
|
14
|
+
using UnityEditor.AddressableAssets.Build;
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
/// <summary>
|
|
18
|
+
/// Builds Addressables content after atlas generation
|
|
19
|
+
/// This ensures atlases are available for on-demand loading
|
|
20
|
+
/// </summary>
|
|
21
|
+
public class BuildAddressablesPostprocess : IPostprocessBuildWithReport
|
|
22
|
+
{
|
|
23
|
+
public int callbackOrder => 1; // Run after atlas generation (callbackOrder 0)
|
|
24
|
+
|
|
25
|
+
public void OnPostprocessBuild(BuildReport report)
|
|
26
|
+
{
|
|
27
|
+
#if UNITY_ADDRESSABLES
|
|
28
|
+
Debug.Log("[Addressables] Building Addressables content...");
|
|
29
|
+
|
|
30
|
+
var settings = AddressableAssetSettingsDefaultObject.Settings;
|
|
31
|
+
if (settings == null)
|
|
32
|
+
{
|
|
33
|
+
Debug.LogError("[Addressables] Addressables settings not found. Cannot build addressables content.");
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
try
|
|
38
|
+
{
|
|
39
|
+
// Build addressables content
|
|
40
|
+
AddressableAssetSettings.BuildPlayerContent(out AddressablesPlayerBuildResult result);
|
|
41
|
+
|
|
42
|
+
if (!string.IsNullOrEmpty(result.Error))
|
|
43
|
+
{
|
|
44
|
+
Debug.LogError($"[Addressables] Build failed: {result.Error}");
|
|
45
|
+
}
|
|
46
|
+
else
|
|
47
|
+
{
|
|
48
|
+
Debug.Log($"[Addressables] Build completed successfully. Duration: {result.Duration}");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (System.Exception ex)
|
|
52
|
+
{
|
|
53
|
+
Debug.LogError($"[Addressables] Build exception: {ex.Message}");
|
|
54
|
+
}
|
|
55
|
+
#else
|
|
56
|
+
Debug.LogWarning("[Addressables] Addressables package not installed. Skipping addressables build.");
|
|
57
|
+
#endif
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
using UnityEngine;
|
|
3
|
+
using UnityEngine.U2D;
|
|
4
|
+
using System.Collections.Generic;
|
|
5
|
+
|
|
6
|
+
/// <summary>
|
|
7
|
+
/// Demonstrates caching loaded SpriteAtlases for efficient reuse.
|
|
8
|
+
/// Avoid reloading the same atlas multiple times by caching loaded instances.
|
|
9
|
+
/// </summary>
|
|
10
|
+
public class CacheLoadedAtlases : MonoBehaviour
|
|
11
|
+
{
|
|
12
|
+
/// <summary>Cached dictionary of loaded atlases</summary>
|
|
13
|
+
private readonly Dictionary<string, SpriteAtlas> _loadedAtlases = new Dictionary<string, SpriteAtlas>();
|
|
14
|
+
|
|
15
|
+
/// <summary>Reference to SpriteAtlasManager for loading</summary>
|
|
16
|
+
private SpriteAtlasManager _atlasManager;
|
|
17
|
+
|
|
18
|
+
private void Awake()
|
|
19
|
+
{
|
|
20
|
+
RegisterCallbacks();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
private void OnDestroy()
|
|
24
|
+
{
|
|
25
|
+
UnregisterCallbacks();
|
|
26
|
+
ClearCache();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private void RegisterCallbacks()
|
|
30
|
+
{
|
|
31
|
+
SpriteAtlasManager.atlasRegistered += OnAtlasLoaded;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private void UnregisterCallbacks()
|
|
35
|
+
{
|
|
36
|
+
SpriteAtlasManager.atlasRegistered -= OnAtlasLoaded;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// <summary>
|
|
40
|
+
/// Gets an atlas by name, loading it if not already cached.
|
|
41
|
+
/// Returns true if the atlas was found (cached or newly loaded).
|
|
42
|
+
/// </summary>
|
|
43
|
+
public bool GetAtlas(string atlasName, out SpriteAtlas atlas)
|
|
44
|
+
{
|
|
45
|
+
// Check cache first
|
|
46
|
+
if (_loadedAtlases.TryGetValue(atlasName, out atlas))
|
|
47
|
+
{
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Not cached - load it
|
|
52
|
+
return LoadAndCacheAtlas(atlasName);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// <summary>
|
|
56
|
+
/// Loads an atlas and adds it to the cache.
|
|
57
|
+
/// </summary>
|
|
58
|
+
private bool LoadAndCacheAtlas(string atlasName)
|
|
59
|
+
{
|
|
60
|
+
// Example: Load from Resources (not recommended for production)
|
|
61
|
+
// SpriteAtlas atlas = Resources.Load<SpriteAtlas>($"Atlases/{atlasName}");
|
|
62
|
+
|
|
63
|
+
// For production, use Addressables or AssetBundle loading
|
|
64
|
+
// SpriteAtlas atlas = await Addressables.LoadAssetAsync<SpriteAtlas>($"Atlases/{atlasName}").Task;
|
|
65
|
+
|
|
66
|
+
Debug.Log($"Loading and caching atlas: {atlasName}");
|
|
67
|
+
|
|
68
|
+
// Placeholder - replace with actual loading logic
|
|
69
|
+
SpriteAtlas atlas = null; // Replace with actual loaded atlas
|
|
70
|
+
|
|
71
|
+
if (atlas != null)
|
|
72
|
+
{
|
|
73
|
+
_loadedAtlases[atlasName] = atlas;
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/// <summary>
|
|
81
|
+
/// Gets a cached atlas without attempting to load it.
|
|
82
|
+
/// Returns false if not found in cache.
|
|
83
|
+
/// </summary>
|
|
84
|
+
public bool TryGetCachedAtlas(string atlasName, out SpriteAtlas atlas)
|
|
85
|
+
{
|
|
86
|
+
return _loadedAtlases.TryGetValue(atlasName, out atlas);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// <summary>
|
|
90
|
+
/// Checks if an atlas is currently cached.
|
|
91
|
+
/// </summary>
|
|
92
|
+
public bool IsAtlasCached(string atlasName)
|
|
93
|
+
{
|
|
94
|
+
return _loadedAtlases.ContainsKey(atlasName);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// <summary>
|
|
98
|
+
/// Removes an atlas from the cache without destroying it.
|
|
99
|
+
/// The atlas can still be used, but will need to be reloaded if requested again.
|
|
100
|
+
/// </summary>
|
|
101
|
+
public bool RemoveFromCache(string atlasName)
|
|
102
|
+
{
|
|
103
|
+
return _loadedAtlases.Remove(atlasName);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/// <summary>
|
|
107
|
+
/// Clears all cached atlases.
|
|
108
|
+
/// Use this when switching scenes or cleaning up.
|
|
109
|
+
/// </summary>
|
|
110
|
+
public void ClearCache()
|
|
111
|
+
{
|
|
112
|
+
_loadedAtlases.Clear();
|
|
113
|
+
Debug.Log("Atlas cache cleared");
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/// <summary>
|
|
117
|
+
/// Gets the number of atlases currently in the cache.
|
|
118
|
+
/// </summary>
|
|
119
|
+
public int CachedAtlasCount => _loadedAtlases.Count;
|
|
120
|
+
|
|
121
|
+
/// <summary>
|
|
122
|
+
/// Logs all cached atlas names.
|
|
123
|
+
/// </summary>
|
|
124
|
+
public void LogCachedAtlases()
|
|
125
|
+
{
|
|
126
|
+
Debug.Log("Cached atlases:");
|
|
127
|
+
foreach (var kvp in _loadedAtlases)
|
|
128
|
+
{
|
|
129
|
+
Debug.Log($" - {kvp.Key}");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/// <summary>
|
|
134
|
+
/// Callback when an atlas is loaded by SpriteAtlasManager.
|
|
135
|
+
/// Adds the loaded atlas to our cache for future use.
|
|
136
|
+
/// </summary>
|
|
137
|
+
private void OnAtlasLoaded(SpriteAtlas atlas)
|
|
138
|
+
{
|
|
139
|
+
if (atlas != null && !_loadedAtlases.ContainsKey(atlas.name))
|
|
140
|
+
{
|
|
141
|
+
_loadedAtlases[atlas.name] = atlas;
|
|
142
|
+
Debug.Log($"Atlas cached: {atlas.name}");
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
using UnityEditor;
|
|
3
|
+
using UnityEditor.U2D;
|
|
4
|
+
using UnityEngine;
|
|
5
|
+
|
|
6
|
+
/// <summary>
|
|
7
|
+
/// Demonstrates proper cleanup after batch operations on SpriteAtlases.
|
|
8
|
+
/// Always use try/finally blocks to ensure cleanup happens even on errors.
|
|
9
|
+
/// </summary>
|
|
10
|
+
public static class CleanupBatchOperationsExample
|
|
11
|
+
{
|
|
12
|
+
/// <summary>
|
|
13
|
+
/// Creates multiple atlases in a batch with proper cleanup.
|
|
14
|
+
/// Uses try/finally to ensure AssetDatabase.ImportAsset is called for each atlas.
|
|
15
|
+
/// </summary>
|
|
16
|
+
public static void BatchCreateAtlases()
|
|
17
|
+
{
|
|
18
|
+
var atlasConfigs = new[]
|
|
19
|
+
{
|
|
20
|
+
new { Folder = "Assets/Sprites/UI", Output = "Assets/Atlases/UI.spriteatlasv2" },
|
|
21
|
+
new { Folder = "Assets/Sprites/Characters", Output = "Assets/Atlases/Characters.spriteatlasv2" },
|
|
22
|
+
new { Folder = "Assets/Sprites/Items", Output = "Assets/Atlases/Items.spriteatlasv2" }
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
for (int i = 0; i < atlasConfigs.Length; i++)
|
|
26
|
+
{
|
|
27
|
+
try
|
|
28
|
+
{
|
|
29
|
+
CreateAtlasFromFolder(atlasConfigs[i].Folder, atlasConfigs[i].Output);
|
|
30
|
+
}
|
|
31
|
+
catch (System.Exception ex)
|
|
32
|
+
{
|
|
33
|
+
Debug.LogError($"Failed to create atlas {atlasConfigs[i].Output}: {ex.Message}");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Final cleanup - refresh asset database
|
|
38
|
+
AssetDatabase.Refresh();
|
|
39
|
+
Debug.Log("Batch atlas creation completed");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/// <summary>
|
|
43
|
+
/// Creates an atlas from a folder and configures it.
|
|
44
|
+
/// </summary>
|
|
45
|
+
private static void CreateAtlasFromFolder(string folderPath, string outputPath)
|
|
46
|
+
{
|
|
47
|
+
// Find sprites in folder
|
|
48
|
+
string[] guids = AssetDatabase.FindAssets("t:Sprite", new[] { folderPath });
|
|
49
|
+
|
|
50
|
+
Object[] sprites = new Object[guids.Length];
|
|
51
|
+
for (int i = 0; i < guids.Length; i++)
|
|
52
|
+
{
|
|
53
|
+
sprites[i] = AssetDatabase.LoadAssetAtPath<Sprite>(
|
|
54
|
+
AssetDatabase.GUIDToAssetPath(guids[i])
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Create and save atlas
|
|
59
|
+
SpriteAtlasAsset atlasAsset = new SpriteAtlasAsset();
|
|
60
|
+
atlasAsset.Add(sprites);
|
|
61
|
+
SpriteAtlasAsset.Save(atlasAsset, outputPath);
|
|
62
|
+
|
|
63
|
+
// Import and configure via importer
|
|
64
|
+
AssetDatabase.ImportAsset(outputPath);
|
|
65
|
+
|
|
66
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(outputPath) as SpriteAtlasImporter;
|
|
67
|
+
if (importer != null)
|
|
68
|
+
{
|
|
69
|
+
importer.includeInBuild = true;
|
|
70
|
+
var packingSettings = importer.packingSettings;
|
|
71
|
+
packingSettings.enableTightPacking = true;
|
|
72
|
+
importer.packingSettings = packingSettings;
|
|
73
|
+
importer.SaveAndReimport();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// <summary>
|
|
78
|
+
/// Processes multiple atlases with progress bar and proper cleanup.
|
|
79
|
+
/// </summary>
|
|
80
|
+
public static void ProcessAtlasesWithProgress(string[] atlasPaths)
|
|
81
|
+
{
|
|
82
|
+
for (int i = 0; i < atlasPaths.Length; i++)
|
|
83
|
+
{
|
|
84
|
+
string path = atlasPaths[i];
|
|
85
|
+
float progress = (float)i / atlasPaths.Length;
|
|
86
|
+
|
|
87
|
+
if (EditorUtility.DisplayCancelableProgressBar(
|
|
88
|
+
"Processing Atlases",
|
|
89
|
+
$"Processing: {path}",
|
|
90
|
+
progress))
|
|
91
|
+
{
|
|
92
|
+
break; // User cancelled
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
try
|
|
96
|
+
{
|
|
97
|
+
ProcessSingleAtlas(path);
|
|
98
|
+
}
|
|
99
|
+
finally
|
|
100
|
+
{
|
|
101
|
+
// Ensure progress bar is cleared even on error
|
|
102
|
+
EditorUtility.ClearProgressBar();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// <summary>
|
|
108
|
+
/// Processes a single atlas.
|
|
109
|
+
/// </summary>
|
|
110
|
+
private static void ProcessSingleAtlas(string path)
|
|
111
|
+
{
|
|
112
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(path) as SpriteAtlasImporter;
|
|
113
|
+
if (importer != null)
|
|
114
|
+
{
|
|
115
|
+
// Reimport to update
|
|
116
|
+
importer.SaveAndReimport();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|