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,164 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
using UnityEditor;
|
|
3
|
+
using UnityEditor.U2D;
|
|
4
|
+
using UnityEngine;
|
|
5
|
+
|
|
6
|
+
/// <summary>
|
|
7
|
+
/// Demonstrates setting includeInBuild for SpriteAtlases.
|
|
8
|
+
/// Controls whether atlases are included in the build or loaded externally.
|
|
9
|
+
/// </summary>
|
|
10
|
+
public static class SetIncludeInBuildExample
|
|
11
|
+
{
|
|
12
|
+
/// <summary>
|
|
13
|
+
/// Includes an atlas in the build (built-in data).
|
|
14
|
+
/// Atlases with includeInBuild=true are embedded in the game build.
|
|
15
|
+
/// </summary>
|
|
16
|
+
public static void IncludeInBuild(string atlasPath)
|
|
17
|
+
{
|
|
18
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter;
|
|
19
|
+
if (importer == null)
|
|
20
|
+
return;
|
|
21
|
+
|
|
22
|
+
importer.includeInBuild = true;
|
|
23
|
+
importer.SaveAndReimport();
|
|
24
|
+
|
|
25
|
+
Debug.Log($"Included {atlasPath} in build");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/// <summary>
|
|
29
|
+
/// Excludes an atlas from the build (for Addressables or AssetBundles).
|
|
30
|
+
/// Atlases with includeInBuild=false are not embedded and must be loaded separately.
|
|
31
|
+
/// </summary>
|
|
32
|
+
public static void ExcludeFromBuild(string atlasPath)
|
|
33
|
+
{
|
|
34
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter;
|
|
35
|
+
if (importer == null)
|
|
36
|
+
return;
|
|
37
|
+
|
|
38
|
+
importer.includeInBuild = false;
|
|
39
|
+
importer.SaveAndReimport();
|
|
40
|
+
|
|
41
|
+
Debug.Log($"Excluded {atlasPath} from build");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// <summary>
|
|
45
|
+
/// Configures all atlases in a folder for built-in delivery.
|
|
46
|
+
/// Use this when you want all atlases included in the game build.
|
|
47
|
+
/// </summary>
|
|
48
|
+
public static void IncludeAllInBuild(string folderPath)
|
|
49
|
+
{
|
|
50
|
+
string[] guids = AssetDatabase.FindAssets("t:SpriteAtlasAsset", new[] { folderPath });
|
|
51
|
+
|
|
52
|
+
foreach (string guid in guids)
|
|
53
|
+
{
|
|
54
|
+
string path = AssetDatabase.GUIDToAssetPath(guid);
|
|
55
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(path) as SpriteAtlasImporter;
|
|
56
|
+
|
|
57
|
+
if (importer != null)
|
|
58
|
+
{
|
|
59
|
+
importer.includeInBuild = true;
|
|
60
|
+
importer.SaveAndReimport();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
Debug.Log($"Configured {guids.Length} atlases for built-in delivery");
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/// <summary>
|
|
68
|
+
/// Configures all atlases in a folder for Addressables delivery.
|
|
69
|
+
/// Use this when using Addressables for late-binding atlas loading.
|
|
70
|
+
/// </summary>
|
|
71
|
+
public static void ExcludeAllForAddressables(string folderPath)
|
|
72
|
+
{
|
|
73
|
+
string[] guids = AssetDatabase.FindAssets("t:SpriteAtlasAsset", new[] { folderPath });
|
|
74
|
+
|
|
75
|
+
foreach (string guid in guids)
|
|
76
|
+
{
|
|
77
|
+
string path = AssetDatabase.GUIDToAssetPath(guid);
|
|
78
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(path) as SpriteAtlasImporter;
|
|
79
|
+
|
|
80
|
+
if (importer != null)
|
|
81
|
+
{
|
|
82
|
+
importer.includeInBuild = false; // Exclude from build for Addressables
|
|
83
|
+
importer.SaveAndReimport();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
Debug.Log($"Configured {guids.Length} atlases for Addressables delivery");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// <summary>
|
|
91
|
+
/// Checks if an atlas is configured to be included in the build.
|
|
92
|
+
/// </summary>
|
|
93
|
+
public static bool IsIncludedInBuild(string atlasPath)
|
|
94
|
+
{
|
|
95
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter;
|
|
96
|
+
if (importer == null)
|
|
97
|
+
return false;
|
|
98
|
+
|
|
99
|
+
return importer.includeInBuild;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// <summary>
|
|
103
|
+
/// Toggles the includeInBuild setting for an atlas.
|
|
104
|
+
/// </summary>
|
|
105
|
+
public static void ToggleIncludeInBuild(string atlasPath)
|
|
106
|
+
{
|
|
107
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter;
|
|
108
|
+
if (importer == null)
|
|
109
|
+
return;
|
|
110
|
+
|
|
111
|
+
importer.includeInBuild = !importer.includeInBuild;
|
|
112
|
+
importer.SaveAndReimport();
|
|
113
|
+
|
|
114
|
+
Debug.Log($"Set {atlasPath} includeInBuild to {importer.includeInBuild}");
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/// <summary>
|
|
119
|
+
/// Editor window for batch configuring includeInBuild settings.
|
|
120
|
+
/// </summary>
|
|
121
|
+
public class IncludeInBuildWindow : EditorWindow
|
|
122
|
+
{
|
|
123
|
+
private string _atlasFolder = "Assets/Atlases";
|
|
124
|
+
private bool _includeInBuild = true;
|
|
125
|
+
|
|
126
|
+
[MenuItem("Tools/Configure Include In Build")]
|
|
127
|
+
public static void ShowWindow()
|
|
128
|
+
{
|
|
129
|
+
GetWindow<IncludeInBuildWindow>("Include In Build");
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private void OnGUI()
|
|
133
|
+
{
|
|
134
|
+
EditorGUILayout.LabelField("Batch Configure Include In Build", EditorStyles.boldLabel);
|
|
135
|
+
|
|
136
|
+
_atlasFolder = EditorGUILayout.TextField("Atlas Folder", _atlasFolder);
|
|
137
|
+
_includeInBuild = EditorGUILayout.Toggle("Include in Build", _includeInBuild);
|
|
138
|
+
|
|
139
|
+
if (GUILayout.Button("Configure Atlases"))
|
|
140
|
+
{
|
|
141
|
+
BatchConfigure();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private void BatchConfigure()
|
|
146
|
+
{
|
|
147
|
+
string[] guids = AssetDatabase.FindAssets("t:SpriteAtlasAsset", new[] { _atlasFolder });
|
|
148
|
+
|
|
149
|
+
foreach (string guid in guids)
|
|
150
|
+
{
|
|
151
|
+
string path = AssetDatabase.GUIDToAssetPath(guid);
|
|
152
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(path) as SpriteAtlasImporter;
|
|
153
|
+
|
|
154
|
+
if (importer != null)
|
|
155
|
+
{
|
|
156
|
+
importer.includeInBuild = _includeInBuild;
|
|
157
|
+
importer.SaveAndReimport();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
Debug.Log($"Configured {guids.Length} atlases (includeInBuild={_includeInBuild})");
|
|
162
|
+
AssetDatabase.Refresh();
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
using UnityEditor.U2D;
|
|
3
|
+
using UnityEngine;
|
|
4
|
+
using Unity.Collections;
|
|
5
|
+
using System.Collections.Generic;
|
|
6
|
+
using System.Linq;
|
|
7
|
+
|
|
8
|
+
/// <summary>
|
|
9
|
+
/// Size-optimized sprite packer that places larger sprites first.
|
|
10
|
+
/// Uses a simple bin-packing approach to minimize atlas space usage.
|
|
11
|
+
/// </summary>
|
|
12
|
+
public class SizeOptimizedPacker : ScriptablePacker
|
|
13
|
+
{
|
|
14
|
+
/// <summary>Maximum atlas size (width and height) in pixels</summary>
|
|
15
|
+
public int atlasSize = 2048;
|
|
16
|
+
|
|
17
|
+
/// <summary>Padding between sprites in pixels</summary>
|
|
18
|
+
public int padding = 4;
|
|
19
|
+
|
|
20
|
+
/// <summary>
|
|
21
|
+
/// Packs sprites with larger ones first for better space utilization.
|
|
22
|
+
/// Sorts sprites by area (width * height) and places them using first-fit bin packing.
|
|
23
|
+
/// </summary>
|
|
24
|
+
public override bool Pack(SpriteAtlasPackingSettings config,
|
|
25
|
+
SpriteAtlasTextureSettings setting,
|
|
26
|
+
PackerData input)
|
|
27
|
+
{
|
|
28
|
+
NativeArray<SpriteData> sprites = input.spriteData;
|
|
29
|
+
NativeArray<TextureData> textures = input.textureData;
|
|
30
|
+
|
|
31
|
+
// Create sorted list by area (largest first)
|
|
32
|
+
var sortedIndices = new List<int>();
|
|
33
|
+
for (int i = 0; i < sprites.Length; i++)
|
|
34
|
+
{
|
|
35
|
+
sortedIndices.Add(i);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
sortedIndices = sortedIndices
|
|
39
|
+
.OrderByDescending(i =>
|
|
40
|
+
{
|
|
41
|
+
var sprite = sprites[i];
|
|
42
|
+
return sprite.rect.width * sprite.rect.height;
|
|
43
|
+
})
|
|
44
|
+
.ToList();
|
|
45
|
+
|
|
46
|
+
// Simple bin packing
|
|
47
|
+
int currentX = padding;
|
|
48
|
+
int currentY = padding;
|
|
49
|
+
int maxHeightInRow = 0;
|
|
50
|
+
|
|
51
|
+
foreach (int idx in sortedIndices)
|
|
52
|
+
{
|
|
53
|
+
SpriteData sprite = sprites[idx];
|
|
54
|
+
|
|
55
|
+
int spriteWidth = sprite.rect.width;
|
|
56
|
+
int spriteHeight = sprite.rect.height;
|
|
57
|
+
|
|
58
|
+
// Check if we need a new row
|
|
59
|
+
if (currentX + spriteWidth + padding > atlasSize)
|
|
60
|
+
{
|
|
61
|
+
currentX = padding;
|
|
62
|
+
currentY += maxHeightInRow + padding;
|
|
63
|
+
maxHeightInRow = 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Check if atlas is full
|
|
67
|
+
if (currentY + spriteHeight + padding > atlasSize)
|
|
68
|
+
{
|
|
69
|
+
Debug.LogError("Atlas size exceeded. Increase atlas size or reduce sprite count.");
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Set output
|
|
74
|
+
sprite.output.x = currentX;
|
|
75
|
+
sprite.output.y = currentY;
|
|
76
|
+
sprite.output.page = 0;
|
|
77
|
+
sprite.output.rot = PackTransform.None;
|
|
78
|
+
|
|
79
|
+
// Update position for next sprite
|
|
80
|
+
currentX += spriteWidth + padding;
|
|
81
|
+
maxHeightInRow = Mathf.Max(maxHeightInRow, spriteHeight);
|
|
82
|
+
|
|
83
|
+
sprites[idx] = sprite;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
// [TYPE:RUNTIME-LOADER]
|
|
3
|
+
// Generated by SpriteAtlas Skill
|
|
4
|
+
// This script handles late-binding atlas loading via Addressables
|
|
5
|
+
|
|
6
|
+
using UnityEngine;
|
|
7
|
+
using UnityEngine.U2D;
|
|
8
|
+
using System.Collections.Generic;
|
|
9
|
+
|
|
10
|
+
#if UNITY_ADDRESSABLES
|
|
11
|
+
using UnityEngine.AddressableAssets;
|
|
12
|
+
using UnityEngine.ResourceManagement.AsyncOperations;
|
|
13
|
+
#endif
|
|
14
|
+
|
|
15
|
+
/// <summary>
|
|
16
|
+
/// Late-binding loader for SpriteAtlas via Addressables
|
|
17
|
+
/// Automatically loads atlases on-demand when sprites are requested
|
|
18
|
+
/// </summary>
|
|
19
|
+
public class SpriteAtlasLateBinding : MonoBehaviour
|
|
20
|
+
{
|
|
21
|
+
private static SpriteAtlasLateBinding instance;
|
|
22
|
+
|
|
23
|
+
#if UNITY_ADDRESSABLES
|
|
24
|
+
private Dictionary<string, AsyncOperationHandle<SpriteAtlas>> loadedAtlases = new Dictionary<string, AsyncOperationHandle<SpriteAtlas>>();
|
|
25
|
+
#endif
|
|
26
|
+
|
|
27
|
+
void Awake()
|
|
28
|
+
{
|
|
29
|
+
if (instance != null && instance != this)
|
|
30
|
+
{
|
|
31
|
+
Destroy(gameObject);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
instance = this;
|
|
36
|
+
DontDestroyOnLoad(gameObject);
|
|
37
|
+
|
|
38
|
+
// Register late-binding callback
|
|
39
|
+
SpriteAtlasManager.atlasRequested += OnAtlasRequested;
|
|
40
|
+
SpriteAtlasManager.atlasRegistered += OnAtlasRegistered;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void OnDestroy()
|
|
44
|
+
{
|
|
45
|
+
SpriteAtlasManager.atlasRequested -= OnAtlasRequested;
|
|
46
|
+
SpriteAtlasManager.atlasRegistered -= OnAtlasRegistered;
|
|
47
|
+
|
|
48
|
+
#if UNITY_ADDRESSABLES
|
|
49
|
+
// Release all loaded atlases
|
|
50
|
+
foreach (var handle in loadedAtlases.Values)
|
|
51
|
+
{
|
|
52
|
+
if (handle.IsValid())
|
|
53
|
+
{
|
|
54
|
+
Addressables.Release(handle);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
loadedAtlases.Clear();
|
|
58
|
+
#endif
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
private void OnAtlasRequested(string tag, System.Action<SpriteAtlas> callback)
|
|
62
|
+
{
|
|
63
|
+
#if UNITY_ADDRESSABLES
|
|
64
|
+
// Check if already loaded
|
|
65
|
+
if (loadedAtlases.ContainsKey(tag))
|
|
66
|
+
{
|
|
67
|
+
var handle = loadedAtlases[tag];
|
|
68
|
+
if (handle.IsDone && handle.Status == AsyncOperationStatus.Succeeded)
|
|
69
|
+
{
|
|
70
|
+
callback(handle.Result);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Load atlas asynchronously
|
|
76
|
+
Debug.Log($"[SpriteAtlas] Loading atlas via Addressables: {tag}");
|
|
77
|
+
var loadHandle = Addressables.LoadAssetAsync<SpriteAtlas>(tag);
|
|
78
|
+
loadedAtlases[tag] = loadHandle;
|
|
79
|
+
|
|
80
|
+
loadHandle.Completed += (handle) =>
|
|
81
|
+
{
|
|
82
|
+
if (handle.Status == AsyncOperationStatus.Succeeded)
|
|
83
|
+
{
|
|
84
|
+
Debug.Log($"[SpriteAtlas] Successfully loaded atlas: {tag} with {handle.Result.spriteCount} sprites");
|
|
85
|
+
callback(handle.Result);
|
|
86
|
+
}
|
|
87
|
+
else
|
|
88
|
+
{
|
|
89
|
+
Debug.LogError($"[SpriteAtlas] Failed to load atlas: {tag}");
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
#else
|
|
93
|
+
Debug.LogError($"[SpriteAtlas] Addressables package not installed. Cannot load atlas: {tag}");
|
|
94
|
+
callback(null);
|
|
95
|
+
#endif
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private void OnAtlasRegistered(SpriteAtlas atlas)
|
|
99
|
+
{
|
|
100
|
+
Debug.Log($"[SpriteAtlas] Atlas registered: {atlas.name}");
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/// <summary>
|
|
104
|
+
/// Manually preload an atlas (optional)
|
|
105
|
+
/// </summary>
|
|
106
|
+
public static void PreloadAtlas(string atlasName)
|
|
107
|
+
{
|
|
108
|
+
#if UNITY_ADDRESSABLES
|
|
109
|
+
if (instance == null)
|
|
110
|
+
{
|
|
111
|
+
Debug.LogError("[SpriteAtlas] SpriteAtlasLateBinding instance not found. Add to scene.");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (!instance.loadedAtlases.ContainsKey(atlasName))
|
|
116
|
+
{
|
|
117
|
+
var handle = Addressables.LoadAssetAsync<SpriteAtlas>(atlasName);
|
|
118
|
+
instance.loadedAtlases[atlasName] = handle;
|
|
119
|
+
Debug.Log($"[SpriteAtlas] Preloading atlas: {atlasName}");
|
|
120
|
+
}
|
|
121
|
+
#endif
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
// [TYPE:PREBUILD]
|
|
3
|
+
// Generated by SpriteAtlas V2 Skill
|
|
4
|
+
// This script automatically generates SpriteAtlas assets during prebuild
|
|
5
|
+
|
|
6
|
+
using UnityEditor;
|
|
7
|
+
using UnityEditor.Build;
|
|
8
|
+
using UnityEditor.Build.Reporting;
|
|
9
|
+
using UnityEditor.U2D;
|
|
10
|
+
using UnityEngine;
|
|
11
|
+
using UnityEngine.U2D;
|
|
12
|
+
using System.Linq;
|
|
13
|
+
using System.Collections.Generic;
|
|
14
|
+
|
|
15
|
+
#if UNITY_ADDRESSABLES
|
|
16
|
+
using UnityEditor.AddressableAssets;
|
|
17
|
+
using UnityEditor.AddressableAssets.Settings;
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
public class SpriteAtlasPrebuildGenerator : IPreprocessBuildWithReport
|
|
21
|
+
{
|
|
22
|
+
public int callbackOrder => 0;
|
|
23
|
+
|
|
24
|
+
private List<string> generatedAtlasPaths = new List<string>();
|
|
25
|
+
|
|
26
|
+
public void OnPreprocessBuild(BuildReport report)
|
|
27
|
+
{
|
|
28
|
+
Debug.Log("[SpriteAtlas] Generating atlases for late-binding via Addressables...");
|
|
29
|
+
|
|
30
|
+
// CRITICAL: Enable Sprite Packer mode
|
|
31
|
+
EditorSettings.spritePackerMode = SpritePackerMode.SpriteAtlasV2;
|
|
32
|
+
|
|
33
|
+
generatedAtlasPaths.Clear();
|
|
34
|
+
|
|
35
|
+
// Customize these paths - includeInBuild is FALSE for Addressables
|
|
36
|
+
GenerateAtlasByFolder("Assets/Art/UI", "Assets/Atlases/UI_Atlas.spriteatlasv2", includeInBuild: false);
|
|
37
|
+
GenerateAtlasByFolder("Assets/Art/Characters", "Assets/Atlases/Characters_Atlas.spriteatlasv2", includeInBuild: false);
|
|
38
|
+
GenerateAtlasByNaming("Assets/Art/Items", "item_", "Assets/Atlases/Items_Atlas.spriteatlasv2", includeInBuild: false);
|
|
39
|
+
|
|
40
|
+
AssetDatabase.SaveAssets();
|
|
41
|
+
AssetDatabase.Refresh();
|
|
42
|
+
|
|
43
|
+
// Setup Addressables for all generated atlases
|
|
44
|
+
SetupAddressables();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private void SetupAddressables()
|
|
48
|
+
{
|
|
49
|
+
#if UNITY_ADDRESSABLES
|
|
50
|
+
var settings = AddressableAssetSettingsDefaultObject.Settings;
|
|
51
|
+
if (settings == null)
|
|
52
|
+
{
|
|
53
|
+
Debug.LogError("[SpriteAtlas] Addressables is not initialized. Please install and setup Addressables package.");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
var group = settings.DefaultGroup;
|
|
58
|
+
if (group == null)
|
|
59
|
+
{
|
|
60
|
+
Debug.LogError("[SpriteAtlas] Default Addressables group not found.");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
foreach (var atlasPath in generatedAtlasPaths)
|
|
65
|
+
{
|
|
66
|
+
var guid = AssetDatabase.AssetPathToGUID(atlasPath);
|
|
67
|
+
if (string.IsNullOrEmpty(guid))
|
|
68
|
+
{
|
|
69
|
+
Debug.LogWarning($"[SpriteAtlas] Could not find GUID for {atlasPath}");
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Check if already exists
|
|
74
|
+
var existingEntry = settings.FindAssetEntry(guid);
|
|
75
|
+
if (existingEntry != null)
|
|
76
|
+
{
|
|
77
|
+
Debug.Log($"[SpriteAtlas] Atlas already addressable: {atlasPath}");
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Create addressable entry
|
|
82
|
+
var entry = settings.CreateOrMoveEntry(guid, group, false, false);
|
|
83
|
+
var atlasName = System.IO.Path.GetFileNameWithoutExtension(atlasPath);
|
|
84
|
+
entry.address = atlasName; // Use atlas name as address
|
|
85
|
+
|
|
86
|
+
Debug.Log($"[SpriteAtlas] Added to Addressables: {atlasName} at {atlasPath}");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
settings.SetDirty(AddressableAssetSettings.ModificationEvent.EntryAdded, null, true);
|
|
90
|
+
#else
|
|
91
|
+
Debug.LogError("[SpriteAtlas] Addressables package is not installed. Please install 'com.unity.addressables' package.");
|
|
92
|
+
#endif
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// CRITICAL: Validate sprite is from project Assets folder only
|
|
96
|
+
private bool IsValidProjectSprite(string assetPath)
|
|
97
|
+
{
|
|
98
|
+
return assetPath.StartsWith("Assets/") &&
|
|
99
|
+
!assetPath.Contains("/Packages/");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
private void GenerateAtlasByFolder(string spriteFolder, string atlasPath, bool includeInBuild)
|
|
103
|
+
{
|
|
104
|
+
// Find all sprites in folder - with path validation
|
|
105
|
+
string[] guids = AssetDatabase.FindAssets("t:Sprite", new[] { spriteFolder });
|
|
106
|
+
Object[] sprites = guids
|
|
107
|
+
.Select(g => AssetDatabase.GUIDToAssetPath(g))
|
|
108
|
+
.Where(path => IsValidProjectSprite(path))
|
|
109
|
+
.Select(path => AssetDatabase.LoadAssetAtPath<Sprite>(path))
|
|
110
|
+
.Where(s => s != null)
|
|
111
|
+
.Cast<Object>()
|
|
112
|
+
.ToArray();
|
|
113
|
+
|
|
114
|
+
if (sprites.Length == 0)
|
|
115
|
+
{
|
|
116
|
+
Debug.LogWarning($"[SpriteAtlas] No sprites found in {spriteFolder}");
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Create or load existing atlas
|
|
121
|
+
SpriteAtlasAsset atlasAsset;
|
|
122
|
+
if (System.IO.File.Exists(atlasPath))
|
|
123
|
+
{
|
|
124
|
+
atlasAsset = SpriteAtlasAsset.Load(atlasPath);
|
|
125
|
+
var spriteAtlas = AssetDatabase.LoadAssetAtPath<SpriteAtlas>(atlasPath);
|
|
126
|
+
atlasAsset.Remove(spriteAtlas.GetPackables()); // Clear existing
|
|
127
|
+
}
|
|
128
|
+
else
|
|
129
|
+
{
|
|
130
|
+
atlasAsset = new SpriteAtlasAsset();
|
|
131
|
+
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(atlasPath));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Add sprites and save
|
|
135
|
+
atlasAsset.Add(sprites);
|
|
136
|
+
SpriteAtlasAsset.Save(atlasAsset, atlasPath);
|
|
137
|
+
AssetDatabase.ImportAsset(atlasPath);
|
|
138
|
+
|
|
139
|
+
// Configure via importer
|
|
140
|
+
ConfigureAtlasImporter(atlasPath, includeInBuild);
|
|
141
|
+
|
|
142
|
+
// Track for Addressables setup
|
|
143
|
+
generatedAtlasPaths.Add(atlasPath);
|
|
144
|
+
|
|
145
|
+
Debug.Log($"[SpriteAtlas] Generated {atlasPath} with {sprites.Length} sprites (includeInBuild={includeInBuild})");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
private void GenerateAtlasByNaming(string searchFolder, string namePrefix, string atlasPath, bool includeInBuild)
|
|
149
|
+
{
|
|
150
|
+
// Find sprites matching naming convention - with path validation
|
|
151
|
+
string[] guids = AssetDatabase.FindAssets("t:Sprite", new[] { searchFolder });
|
|
152
|
+
Object[] sprites = guids
|
|
153
|
+
.Select(g => AssetDatabase.GUIDToAssetPath(g))
|
|
154
|
+
.Where(path => IsValidProjectSprite(path))
|
|
155
|
+
.Select(path => AssetDatabase.LoadAssetAtPath<Sprite>(path))
|
|
156
|
+
.Where(s => s != null && s.name.StartsWith(namePrefix))
|
|
157
|
+
.Cast<Object>()
|
|
158
|
+
.ToArray();
|
|
159
|
+
|
|
160
|
+
if (sprites.Length == 0) return;
|
|
161
|
+
|
|
162
|
+
// Create or update atlas (same pattern as folder-based)
|
|
163
|
+
SpriteAtlasAsset atlasAsset = System.IO.File.Exists(atlasPath)
|
|
164
|
+
? SpriteAtlasAsset.Load(atlasPath)
|
|
165
|
+
: new SpriteAtlasAsset();
|
|
166
|
+
|
|
167
|
+
if (System.IO.File.Exists(atlasPath))
|
|
168
|
+
{
|
|
169
|
+
var spriteAtlas = AssetDatabase.LoadAssetAtPath<SpriteAtlas>(atlasPath);
|
|
170
|
+
atlasAsset.Remove(spriteAtlas.GetPackables());
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
atlasAsset.Add(sprites);
|
|
174
|
+
SpriteAtlasAsset.Save(atlasAsset, atlasPath);
|
|
175
|
+
AssetDatabase.ImportAsset(atlasPath);
|
|
176
|
+
ConfigureAtlasImporter(atlasPath, includeInBuild);
|
|
177
|
+
|
|
178
|
+
// Track for Addressables setup
|
|
179
|
+
generatedAtlasPaths.Add(atlasPath);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
private void ConfigureAtlasImporter(string atlasPath, bool includeInBuild)
|
|
183
|
+
{
|
|
184
|
+
SpriteAtlasImporter importer = AssetImporter.GetAtPath(atlasPath) as SpriteAtlasImporter;
|
|
185
|
+
if (importer == null) return;
|
|
186
|
+
|
|
187
|
+
// Texture settings
|
|
188
|
+
var textureSettings = importer.textureSettings;
|
|
189
|
+
textureSettings.filterMode = FilterMode.Bilinear;
|
|
190
|
+
textureSettings.generateMipMaps = false;
|
|
191
|
+
importer.textureSettings = textureSettings;
|
|
192
|
+
|
|
193
|
+
// Packing settings
|
|
194
|
+
var packingSettings = importer.packingSettings;
|
|
195
|
+
packingSettings.padding = 4;
|
|
196
|
+
packingSettings.enableAlphaDilation = true;
|
|
197
|
+
importer.packingSettings = packingSettings;
|
|
198
|
+
|
|
199
|
+
// Platform settings
|
|
200
|
+
SetPlatformSettings(importer, "Android", TextureImporterFormat.ASTC_6x6);
|
|
201
|
+
SetPlatformSettings(importer, "iOS", TextureImporterFormat.ASTC_4x4);
|
|
202
|
+
|
|
203
|
+
// Set build inclusion based on delivery mechanism
|
|
204
|
+
importer.includeInBuild = includeInBuild;
|
|
205
|
+
importer.SaveAndReimport();
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
private void SetPlatformSettings(SpriteAtlasImporter importer, string platformName, TextureImporterFormat format)
|
|
209
|
+
{
|
|
210
|
+
var settings = new TextureImporterPlatformSettings
|
|
211
|
+
{
|
|
212
|
+
name = platformName,
|
|
213
|
+
overridden = true,
|
|
214
|
+
maxTextureSize = 2048,
|
|
215
|
+
format = format
|
|
216
|
+
};
|
|
217
|
+
importer.SetPlatformSettings(settings);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
|
|
3
|
+
using UnityEditor.U2D;
|
|
4
|
+
using UnityEngine;
|
|
5
|
+
|
|
6
|
+
/// <summary>
|
|
7
|
+
/// Information about each sprite in the packing process.
|
|
8
|
+
/// This structure is populated by Unity and used by custom packers.
|
|
9
|
+
/// </summary>
|
|
10
|
+
public struct SpriteData
|
|
11
|
+
{
|
|
12
|
+
/// <summary>Unique identifier for the sprite asset</summary>
|
|
13
|
+
public GUID guid;
|
|
14
|
+
|
|
15
|
+
/// <summary>Index into the textureData array</summary>
|
|
16
|
+
public int texIndex;
|
|
17
|
+
|
|
18
|
+
/// <summary>Source rectangle in the source texture</summary>
|
|
19
|
+
public RectInt rect;
|
|
20
|
+
|
|
21
|
+
/// <summary>Number of mesh indices for this sprite</summary>
|
|
22
|
+
public int indexCount;
|
|
23
|
+
|
|
24
|
+
/// <summary>Number of mesh vertices for this sprite</summary>
|
|
25
|
+
public int vertexCount;
|
|
26
|
+
|
|
27
|
+
/// <summary>Offset into the indexData array</summary>
|
|
28
|
+
public int indexOffset;
|
|
29
|
+
|
|
30
|
+
/// <summary>Offset into the vertexData array</summary>
|
|
31
|
+
public int vertexOffset;
|
|
32
|
+
|
|
33
|
+
/// <summary>OUTPUT: Set this to specify packing result</summary>
|
|
34
|
+
public ScriptablePacker.SpritePack output;
|
|
35
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
using UnityEngine;
|
|
3
|
+
|
|
4
|
+
/// <summary>
|
|
5
|
+
/// Output structure for sprite packing.
|
|
6
|
+
/// Set this on each SpriteData to specify where and how the sprite should be packed.
|
|
7
|
+
/// </summary>
|
|
8
|
+
public struct SpritePack
|
|
9
|
+
{
|
|
10
|
+
/// <summary>X position in the atlas (OUTPUT)</summary>
|
|
11
|
+
public int x;
|
|
12
|
+
|
|
13
|
+
/// <summary>Y position in the atlas (OUTPUT)</summary>
|
|
14
|
+
public int y;
|
|
15
|
+
|
|
16
|
+
/// <summary>Atlas page index for multi-page atlases (OUTPUT)</summary>
|
|
17
|
+
public int page;
|
|
18
|
+
|
|
19
|
+
/// <summary>Rotation/flip transform to apply (OUTPUT)</summary>
|
|
20
|
+
public PackTransform rot;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/// <summary>
|
|
24
|
+
/// Sprite transformation options during packing.
|
|
25
|
+
/// </summary>
|
|
26
|
+
public enum PackTransform
|
|
27
|
+
{
|
|
28
|
+
/// <summary>No transformation applied</summary>
|
|
29
|
+
None,
|
|
30
|
+
|
|
31
|
+
/// <summary>Flip horizontally</summary>
|
|
32
|
+
FlipHorizontal,
|
|
33
|
+
|
|
34
|
+
/// <summary>Flip vertically</summary>
|
|
35
|
+
FlipVertical,
|
|
36
|
+
|
|
37
|
+
/// <summary>Rotate 180 degrees</summary>
|
|
38
|
+
Rotate180
|
|
39
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// [UNITY-SKILL:SPRITEATLAS]
|
|
2
|
+
using UnityEngine;
|
|
3
|
+
|
|
4
|
+
/// <summary>
|
|
5
|
+
/// Source texture information provided to custom packers.
|
|
6
|
+
/// Contains dimensions and metadata about source textures.
|
|
7
|
+
/// </summary>
|
|
8
|
+
public struct TextureData
|
|
9
|
+
{
|
|
10
|
+
/// <summary>Texture width in pixels</summary>
|
|
11
|
+
public int width;
|
|
12
|
+
|
|
13
|
+
/// <summary>Texture height in pixels</summary>
|
|
14
|
+
public int height;
|
|
15
|
+
}
|