@aqian0/dsh-unity 0.0.0-stage → 0.1.0
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 +53 -0
- package/LICENSE-UNITY-COMPANION.md +122 -0
- package/LICENSE.md +31 -0
- package/NOTICE.md +90 -0
- package/README.md +273 -2
- package/cordis.patch.yml +22 -0
- package/docs/design.md +297 -0
- package/icon.svg +16 -0
- package/lib/frontmatter.js +392 -0
- package/lib/gating.js +105 -0
- package/lib/harness.js +16 -0
- package/lib/index.js +171 -0
- package/lib/project.js +210 -0
- package/lib/registry.js +268 -0
- package/lib/requirements.js +214 -0
- package/lib/skills.js +191 -0
- package/lib/types/frontmatter.d.ts +84 -0
- package/lib/types/gating.d.ts +80 -0
- package/lib/types/harness.d.ts +152 -0
- package/lib/types/index.d.ts +75 -0
- package/lib/types/project.d.ts +93 -0
- package/lib/types/registry.d.ts +96 -0
- package/lib/types/requirements.d.ts +67 -0
- package/lib/types/skills.d.ts +54 -0
- package/lib/types/watch.d.ts +34 -0
- package/lib/watch.js +84 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +70 -4
- package/skills/2d-pixel-perfect/SKILL.md +208 -0
- package/skills/2d-pixel-perfect/references/api-reference.md +81 -0
- package/skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
- package/skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
- package/skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
- package/skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
- package/skills/asset-transformer-toolkit/SECURITY.md +15 -0
- package/skills/asset-transformer-toolkit/SKILL.md +39 -0
- package/skills/asset-transformer-toolkit/references/create-importer.md +121 -0
- package/skills/asset-transformer-toolkit/references/lods.md +61 -0
- package/skills/asset-transformer-toolkit/references/rule-api.md +154 -0
- package/skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
- package/skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
- package/skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
- package/skills/audio-setup-mixers/SECURITY.md +16 -0
- package/skills/audio-setup-mixers/SKILL.md +127 -0
- package/skills/audio-setup-mixers/references/api.md +162 -0
- package/skills/build-gtk/SECURITY.md +16 -0
- package/skills/build-gtk/SKILL.md +200 -0
- package/skills/build-gtk/references/api-reference.md +33 -0
- package/skills/build-gtk/references/graph-api-gaps.md +96 -0
- package/skills/build-gtk/references/runtime-and-visualization.md +191 -0
- package/skills/build-gtk/references/state-machine-api.md +270 -0
- package/skills/build-gtk/references/where-the-docs-stop.md +49 -0
- package/skills/build-live-game/SKILL.md +159 -0
- package/skills/build-live-game/references/achievements.md +757 -0
- package/skills/build-live-game/references/apis.md +271 -0
- package/skills/build-live-game/references/authentication.md +431 -0
- package/skills/build-live-game/references/battlepass.md +904 -0
- package/skills/build-live-game/references/blueprints-and-samples.md +75 -0
- package/skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
- package/skills/build-live-game/references/cloud-code-modules.md +1276 -0
- package/skills/build-live-game/references/cloud-code.md +58 -0
- package/skills/build-live-game/references/cloud-save.md +464 -0
- package/skills/build-live-game/references/deployment.md +231 -0
- package/skills/build-live-game/references/orientation.md +30 -0
- package/skills/build-live-game/references/player-account.md +821 -0
- package/skills/build-live-game/references/remote-config.md +96 -0
- package/skills/build-live-game/references/services-overview.md +76 -0
- package/skills/build-live-game/references/tooling.md +375 -0
- package/skills/build-live-game/references/ugs-cli.md +86 -0
- package/skills/craft-game-floors/SECURITY.md +23 -0
- package/skills/craft-game-floors/SKILL.md +134 -0
- package/skills/craft-game-floors/references/art-direction.md +85 -0
- package/skills/craft-game-floors/references/camera-rigs.md +51 -0
- package/skills/craft-game-floors/references/character-motion.md +35 -0
- package/skills/craft-game-floors/references/game-audio.md +47 -0
- package/skills/craft-game-floors/references/game-feel.md +68 -0
- package/skills/craft-game-floors/references/game-shell.md +45 -0
- package/skills/craft-game-floors/references/live-floor.md +35 -0
- package/skills/craft-game-floors/references/placeholder-assets.md +35 -0
- package/skills/craft-game-floors/references/scene-lighting.md +52 -0
- package/skills/craft-game-floors/references/toon-shading.md +34 -0
- package/skills/craft-game-floors/references/vfx.md +40 -0
- package/skills/craft-game-floors/references/visual-scorecard.md +43 -0
- package/skills/create-2d-physics/SECURITY.md +16 -0
- package/skills/create-2d-physics/SKILL.md +128 -0
- package/skills/create-2d-physics/references/2d-physics-core.md +155 -0
- package/skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
- package/skills/create-tile-palette-or-rule-tiles/SKILL.md +95 -0
- package/skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
- package/skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
- package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +37 -0
- package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +219 -0
- package/skills/create-tile-palette-or-rule-tiles/references/ruletile.md +95 -0
- package/skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
- package/skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
- package/skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
- package/skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
- package/skills/fix-3d-physics-collisions/SECURITY.md +17 -0
- package/skills/fix-3d-physics-collisions/SKILL.md +139 -0
- package/skills/fix-3d-physics-collisions/references/collision-checklist.md +80 -0
- package/skills/fix-3d-physics-collisions/references/collision-debugger.md +18 -0
- package/skills/fix-3d-physics-collisions/references/console-errors-table.md +9 -0
- package/skills/fix-3d-physics-collisions/references/kinematic-trigger-facts.md +18 -0
- package/skills/fix-3d-physics-collisions/references/other-symptoms.md +29 -0
- package/skills/fix-3d-physics-collisions/references/raycast-checklist.md +8 -0
- package/skills/fix-3d-physics-collisions/references/topic-map.md +42 -0
- package/skills/fix-3d-physics-collisions/references/trigger-checklist.md +9 -0
- package/skills/fix-3d-physics-collisions/scripts/CollisionDebugger.cs +561 -0
- package/skills/generate-editor-search-query/SECURITY.md +17 -0
- package/skills/generate-editor-search-query/SKILL.md +117 -0
- package/skills/generate-editor-search-query/references/open-search-window.md +70 -0
- package/skills/generate-editor-search-query/references/query-patterns.md +124 -0
- package/skills/implement-in-app-purchases/SKILL.md +82 -0
- package/skills/implement-in-app-purchases/references/api-details.md +41 -0
- package/skills/implement-in-app-purchases/references/api-notes.md +105 -0
- package/skills/implement-in-app-purchases/references/codeless-catalog.md +197 -0
- package/skills/implement-in-app-purchases/references/convert-adapty.md +270 -0
- package/skills/implement-in-app-purchases/references/convert-essentialkit.md +239 -0
- package/skills/implement-in-app-purchases/references/convert-revenuecat.md +277 -0
- package/skills/implement-in-app-purchases/references/convert-unipay.md +145 -0
- package/skills/implement-in-app-purchases/references/migration-v4-to-v5.md +46 -0
- package/skills/implement-in-app-purchases/references/path-add-iap-to-new-project.md +197 -0
- package/skills/implement-in-app-purchases/references/path-convert-native-google-billing.md +302 -0
- package/skills/implement-in-app-purchases/references/path-convert-native-storekit.md +357 -0
- package/skills/implement-in-app-purchases/references/path-implement-iap-d2c.md +253 -0
- package/skills/implement-in-app-purchases/references/platform-notes.md +55 -0
- package/skills/implement-in-app-purchases/references/pre-check.md +207 -0
- package/skills/implement-in-app-purchases/references/topic-map.md +46 -0
- package/skills/initialize-ai-navigation/SKILL.md +109 -0
- package/skills/initialize-ai-navigation/references/navigation-system.md +793 -0
- package/skills/initialize-ai-navigation/references/topic-map.md +66 -0
- package/skills/levelplay-unity-integration/SKILL.md +122 -0
- package/skills/levelplay-unity-integration/references/adding-more-ad-formats.md +15 -0
- package/skills/levelplay-unity-integration/references/banner-api.md +927 -0
- package/skills/levelplay-unity-integration/references/best-practices.md +604 -0
- package/skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
- package/skills/levelplay-unity-integration/references/examples.md +10 -0
- package/skills/levelplay-unity-integration/references/ilrd-api.md +337 -0
- package/skills/levelplay-unity-integration/references/initialization-api.md +851 -0
- package/skills/levelplay-unity-integration/references/interstitial-api.md +907 -0
- package/skills/levelplay-unity-integration/references/ios-setup.md +463 -0
- package/skills/levelplay-unity-integration/references/migration-sdk-9.md +666 -0
- package/skills/levelplay-unity-integration/references/privacy-settings.md +593 -0
- package/skills/levelplay-unity-integration/references/production-release-checklist.md +22 -0
- package/skills/levelplay-unity-integration/references/rewarded-api.md +918 -0
- package/skills/levelplay-unity-integration/references/step-0-new-or-migration.md +8 -0
- package/skills/levelplay-unity-integration/references/step-1-verify-environment.md +4 -0
- package/skills/levelplay-unity-integration/references/step-10-testing.md +15 -0
- package/skills/levelplay-unity-integration/references/step-2-business-goals.md +12 -0
- package/skills/levelplay-unity-integration/references/step-3-install-sdk.md +55 -0
- package/skills/levelplay-unity-integration/references/step-4-native-dependencies.md +22 -0
- package/skills/levelplay-unity-integration/references/step-5-app-key-and-ad-units.md +18 -0
- package/skills/levelplay-unity-integration/references/step-6-5-privacy-and-regulation.md +51 -0
- package/skills/levelplay-unity-integration/references/step-6-admob-keys.md +16 -0
- package/skills/levelplay-unity-integration/references/step-7-initialize.md +50 -0
- package/skills/levelplay-unity-integration/references/step-8-ad-unit-strategy.md +16 -0
- package/skills/levelplay-unity-integration/references/step-9-implement-ad-units.md +66 -0
- package/skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
- package/skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
- package/skills/localize-unity-project/SKILL.md +159 -0
- package/skills/localize-unity-project/references/api-notes.md +15 -0
- package/skills/localize-unity-project/references/cjk-fonts.md +83 -0
- package/skills/localize-unity-project/references/docs-map.md +42 -0
- package/skills/localize-unity-project/references/documentation-lookup.md +33 -0
- package/skills/localize-unity-project/references/locale-switching.md +17 -0
- package/skills/localize-unity-project/references/table-completeness-check.md +47 -0
- package/skills/localize-unity-project/references/translating-existing-project.md +47 -0
- package/skills/localize-unity-project/references/translation-strategy.md +41 -0
- package/skills/localize-unity-project/references/troubleshooting.md +12 -0
- package/skills/localize-unity-project/scripts/L10nBatchProcessor.cs +191 -0
- package/skills/localize-unity-project/scripts/LocalizedFontAsset.cs +18 -0
- package/skills/manage-sprite-atlas/SKILL.md +202 -0
- package/skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
- package/skills/manage-sprite-atlas/references/advanced-manual-authoring.md +19 -0
- package/skills/manage-sprite-atlas/references/api.md +382 -0
- package/skills/manage-sprite-atlas/references/best-practices.md +183 -0
- package/skills/manage-sprite-atlas/references/common-errors.md +123 -0
- package/skills/manage-sprite-atlas/references/complete-workflow.md +61 -0
- package/skills/manage-sprite-atlas/references/custom-packing.md +147 -0
- package/skills/manage-sprite-atlas/references/delivery-mechanism.md +30 -0
- package/skills/manage-sprite-atlas/references/key-requirements.md +21 -0
- package/skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
- package/skills/manage-sprite-atlas/references/namespaces.md +15 -0
- package/skills/manage-sprite-atlas/references/v2-architecture.md +21 -0
- package/skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
- package/skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
- package/skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
- package/skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
- package/skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
- package/skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
- package/skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
- package/skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
- package/skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
- package/skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
- package/skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
- package/skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
- package/skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
- package/skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
- package/skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
- package/skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
- package/skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
- package/skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
- package/skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
- package/skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
- package/skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
- package/skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
- package/skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
- package/skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
- package/skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
- package/skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
- package/skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
- package/skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
- package/skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
- package/skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
- package/skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
- package/skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
- package/skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
- package/skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
- package/skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
- package/skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
- package/skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
- package/skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
- package/skills/migrate-birp-to-urp/SECURITY.md +16 -0
- package/skills/migrate-birp-to-urp/SKILL.md +167 -0
- package/skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
- package/skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
- package/skills/migrate-birp-to-urp/references/conversion-and-rendering-triage.md +113 -0
- package/skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
- package/skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
- package/skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
- package/skills/migrate-birp-to-urp/references/parity-validation-and-troubleshooting.md +114 -0
- package/skills/migrate-birp-to-urp/references/preflight-and-urp-setup.md +195 -0
- package/skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
- package/skills/new-unity-project/SECURITY.md +26 -0
- package/skills/new-unity-project/SKILL.md +171 -0
- package/skills/new-unity-project/references/checklist.md +18 -0
- package/skills/new-unity-project/references/common-mistakes.md +15 -0
- package/skills/new-unity-project/references/skill-setup.md +66 -0
- package/skills/new-unity-project/references/step-1-concept.md +13 -0
- package/skills/new-unity-project/references/step-2-platforms-and-create.md +31 -0
- package/skills/new-unity-project/references/step-3-join-and-reconcile.md +16 -0
- package/skills/new-unity-project/references/step-4-source-control.md +9 -0
- package/skills/new-unity-project/references/step-5-packages.md +18 -0
- package/skills/new-unity-project/references/step-6-identity-and-floors.md +20 -0
- package/skills/new-unity-project/references/step-7-visual-baseline.md +75 -0
- package/skills/new-unity-project/references/step-8-first-commit.md +21 -0
- package/skills/new-unity-project/references/step-9-handoff.md +23 -0
- package/skills/optimize-audio/SECURITY.md +16 -0
- package/skills/optimize-audio/SKILL.md +120 -0
- package/skills/optimize-audio/references/diagnostics.md +42 -0
- package/skills/optimize-audio/references/troubleshooting.md +41 -0
- package/skills/optimize-audio/resources/audio-import-api.md +149 -0
- package/skills/optimize-audio/resources/platform-settings.md +48 -0
- package/skills/optimize-text-mesh-pro/SKILL.md +181 -0
- package/skills/optimize-text-mesh-pro/references/dynamic-atlas-and-profiling.md +28 -0
- package/skills/optimize-text-mesh-pro/references/topic-map.md +36 -0
- package/skills/optimize-web/SECURITY.md +16 -0
- package/skills/optimize-web/SKILL.md +157 -0
- package/skills/optimize-web/references/editor-csharp.md +120 -0
- package/skills/optimize-web/references/topic-map.md +49 -0
- package/skills/optimize-web/references/troubleshooting.md +45 -0
- package/skills/optimize-web/references/understand-request.md +19 -0
- package/skills/optimize-web/references/web-assets-quality.md +59 -0
- package/skills/optimize-web/references/web-player-settings.md +39 -0
- package/skills/optimize-web/references/web-profiling-memory.md +71 -0
- package/skills/optimize-web/scripts/WebOptimizer.cs +46 -0
- package/skills/optimize-web/scripts/toktx-examples.sh +11 -0
- package/skills/setup-multiplayer-services/SKILL.md +36 -0
- package/skills/setup-multiplayer-services/references/dgs-entrypoint.md +79 -0
- package/skills/setup-multiplayer-services/references/entrypoints.md +213 -0
- package/skills/setup-multiplayer-services/references/examples.md +33 -0
- package/skills/setup-multiplayer-services/references/implementation-fit.md +30 -0
- package/skills/setup-multiplayer-services/references/underlying-services.md +11 -0
- package/skills/setup-multiplayer-services/references/workflows-prerequisites.md +17 -0
- package/skills/setup-vivox-voice-chat/SECURITY.md +16 -0
- package/skills/setup-vivox-voice-chat/SKILL.md +166 -0
- package/skills/setup-vivox-voice-chat/references/api-reference-lookup.md +28 -0
- package/skills/setup-vivox-voice-chat/references/docs-topic-map.md +13 -0
- package/skills/setup-vivox-voice-chat/references/events-and-participants.md +79 -0
- package/skills/setup-vivox-voice-chat/references/init-and-login.md +92 -0
- package/skills/setup-vivox-voice-chat/references/text-chat.md +93 -0
- package/skills/setup-vivox-voice-chat/references/troubleshooting.md +47 -0
- package/skills/setup-vivox-voice-chat/references/voice-channels.md +92 -0
- package/skills/shader-graph-create-custom-node/SKILL.md +25 -0
- package/skills/shader-graph-create-custom-node/resources/all_hints.hlsl +182 -0
- package/skills/sprite-editor/SECURITY.md +16 -0
- package/skills/sprite-editor/SKILL.md +66 -0
- package/skills/sprite-editor/references/api_reference.md +151 -0
- package/skills/sprite-editor/references/background.md +112 -0
- package/skills/sprite-editor/references/templates.md +72 -0
- package/skills/sprite-editor/scripts/AutomaticSliceTexture.cs +40 -0
- package/skills/sprite-editor/scripts/GenerateNewSpriteRects.cs +200 -0
- package/skills/sprite-editor/scripts/GetTextureSourceImageSize.cs +32 -0
- package/skills/sprite-editor/scripts/GetTextureToSlice.cs +55 -0
- package/skills/sprite-editor/scripts/GridSliceTexture.cs +40 -0
- package/skills/sprite-editor/scripts/IsometricSliceTexture.cs +141 -0
- package/skills/sprite-editor/scripts/README.md +134 -0
- package/skills/sprite-editor/scripts/SetPivotExample.cs +58 -0
- package/skills/sprite-editor/scripts/SpriteToPng.cs +88 -0
- package/skills/sprite-segment-3x3grid/SKILL.md +177 -0
- package/skills/sprite-segment-3x3grid/references/topic-map.md +37 -0
- package/skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
- package/skills/ui/SKILL.md +142 -0
- package/skills/ui-imgui/SKILL.md +180 -0
- package/skills/ui-imgui/references/gui-elements.md +156 -0
- package/skills/ui-imgui/references/templates.md +141 -0
- package/skills/ui-ugui/SKILL.md +217 -0
- package/skills/ui-ugui/references/layout-and-anchors.md +61 -0
- package/skills/ui-ugui/references/scrollview-setup.md +29 -0
- package/skills/ui-uitk/SKILL.md +229 -0
- package/skills/ui-uitk/references/common-issues.md +74 -0
- package/skills/ui-uitk/references/custom-elements.md +241 -0
- package/skills/ui-uitk/references/painter2d.md +282 -0
- package/skills/ui-uitk/references/pointermanipulator-guide.md +94 -0
- package/skills/ui-uitk/references/svg-icons.md +136 -0
- package/skills/ui-uitk/references/ui-runtime-binding.md +234 -0
- package/skills/ui-uitk/references/uss-guide.md +138 -0
- package/skills/unity-cli/CHANGELOG.md +524 -0
- package/skills/unity-cli/SECURITY.md +68 -0
- package/skills/unity-cli/SKILL.md +160 -0
- package/skills/unity-cli/references/auth-license-cloud.md +318 -0
- package/skills/unity-cli/references/bootstrap-project.md +177 -0
- package/skills/unity-cli/references/build-run-test.md +555 -0
- package/skills/unity-cli/references/catalog-plugins.md +86 -0
- package/skills/unity-cli/references/ci-recipes.md +76 -0
- package/skills/unity-cli/references/cloud-automation.md +819 -0
- package/skills/unity-cli/references/cloud-workflows.md +19 -0
- package/skills/unity-cli/references/collaboration.md +533 -0
- package/skills/unity-cli/references/config-hub.md +239 -0
- package/skills/unity-cli/references/diagnostics-maintenance.md +718 -0
- package/skills/unity-cli/references/docs-workflow.md +179 -0
- package/skills/unity-cli/references/editor-targeting.md +29 -0
- package/skills/unity-cli/references/editors-install.md +490 -0
- package/skills/unity-cli/references/environment-variables.md +42 -0
- package/skills/unity-cli/references/exit-codes.md +47 -0
- package/skills/unity-cli/references/global-flags.md +32 -0
- package/skills/unity-cli/references/integration-advanced.md +1130 -0
- package/skills/unity-cli/references/notes.md +20 -0
- package/skills/unity-cli/references/notifications.md +39 -0
- package/skills/unity-cli/references/playmode-verification-loop.md +279 -0
- package/skills/unity-cli/references/projects-templates.md +997 -0
- package/skills/unity-cli/references/scene-editing-preflight.md +25 -0
- package/skills/unity-cli/references/setup-and-help.md +54 -0
- package/skills/unity-cli/references/version-control.md +612 -0
- package/skills/unity-package-management/SKILL.md +169 -0
- package/skills/unity-package-management/references/discovering-packages.md +66 -0
- package/skills/unity-package-management/references/headless-run.md +31 -0
- package/skills/unity-package-management/references/installer-script.md +92 -0
- package/skills/unity-package-management/references/select-packages.md +126 -0
- package/skills/unity-pipeline/SECURITY.md +17 -0
- package/skills/unity-pipeline/SKILL.md +205 -0
- package/skills/unity-pipeline/references/csharp-eval.md +23 -0
- package/skills/unity-pipeline/references/multiplayer-play-mode.md +103 -0
- package/skills/urp-postprocessing/SECURITY.md +16 -0
- package/skills/urp-postprocessing/SKILL.md +188 -0
- package/skills/urp-postprocessing/references/code-templates.md +150 -0
- package/skills/urp-postprocessing/references/effect-reference.md +86 -0
- package/skills/validate-urp-render-graph-renderer-feature/SKILL.md +92 -0
- package/skills/validate-urp-render-graph-renderer-feature/references/validation-checklist.md +179 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#include "ShaderApiReflectionSupport.hlsl"
|
|
2
|
+
|
|
3
|
+
namespace Namespace
|
|
4
|
+
{
|
|
5
|
+
struct CustomStruct
|
|
6
|
+
{
|
|
7
|
+
float Value;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/// <funchints>
|
|
11
|
+
/// <sg:ProviderKey>AllHintsUniqueStableID</sg:ProviderKey>
|
|
12
|
+
/// <sg:DisplayName>All Known Hints</sg:DisplayName>
|
|
13
|
+
/// <sg:ReturnDisplayName>Final Result</sg:ReturnDisplayName>
|
|
14
|
+
/// <sg:SearchCategory>Hints/All</sg:SearchCategory>
|
|
15
|
+
/// <sg:SearchTerms>Features, Reflected, Every, Hint</sg:SearchTerms>
|
|
16
|
+
/// <sg:SearchName>All Hints Search Name</sg:SearchName>
|
|
17
|
+
/// </funchints>
|
|
18
|
+
/// <paramhints name="a">
|
|
19
|
+
/// <sg:DisplayName>Custom Struct Value</sg:DisplayName>
|
|
20
|
+
/// <sg:Default>0.5</sg:Default>
|
|
21
|
+
/// <sg:External>Namespace</sg:External>
|
|
22
|
+
/// </paramhints>
|
|
23
|
+
/// <paramhints name="c3">
|
|
24
|
+
/// <sg:DisplayName>Color 3</sg:DisplayName>
|
|
25
|
+
/// <sg:Color />
|
|
26
|
+
/// <sg:Default>1,1,0</sg:Default>
|
|
27
|
+
/// </paramhints>
|
|
28
|
+
/// <paramhints name="c4">
|
|
29
|
+
/// <sg:DisplayName>Color 4</sg:DisplayName>
|
|
30
|
+
/// <sg:Color />
|
|
31
|
+
/// <sg:Default>1,1,0,1</sg:Default>
|
|
32
|
+
/// </paramhints>
|
|
33
|
+
/// <paramhints name="sc3">
|
|
34
|
+
/// <sg:DisplayName>Static Color 3</sg:DisplayName>
|
|
35
|
+
/// <sg:Color />
|
|
36
|
+
/// <sg:Static />
|
|
37
|
+
/// <sg:Default>1,1,0</sg:Default>
|
|
38
|
+
/// </paramhints>
|
|
39
|
+
/// <paramhints name="sc4">
|
|
40
|
+
/// <sg:DisplayName>Static Color 4</sg:DisplayName>
|
|
41
|
+
/// <sg:Color />
|
|
42
|
+
/// <sg:Static />
|
|
43
|
+
/// <sg:Default>1,1,0,1</sg:Default>
|
|
44
|
+
/// </paramhints>
|
|
45
|
+
/// <paramhints name="d">
|
|
46
|
+
/// <sg:DisplayName>Dropdown</sg:DisplayName>
|
|
47
|
+
/// <sg:Dropdown>OptionA, OptionB, OptionC</sg:Dropdown>
|
|
48
|
+
/// <sg:Default>1</sg:Default>
|
|
49
|
+
/// </paramhints>
|
|
50
|
+
/// <paramhints name="sd">
|
|
51
|
+
/// <sg:DisplayName>Dropdown</sg:DisplayName>
|
|
52
|
+
/// <sg:Dropdown>OptionA, OptionB, OptionC</sg:Dropdown>
|
|
53
|
+
/// <sg:Static />
|
|
54
|
+
/// <sg:Default>2</sg:Default>
|
|
55
|
+
/// </paramhints>
|
|
56
|
+
/// <paramhints name="r">
|
|
57
|
+
/// <sg:DisplayName>Range</sg:DisplayName>
|
|
58
|
+
/// <sg:Range>0, 1</sg:Range>
|
|
59
|
+
/// <sg:Default>0.75</sg:Default>
|
|
60
|
+
/// </paramhints>
|
|
61
|
+
/// <paramhints name="sr">
|
|
62
|
+
/// <sg:DisplayName>Range</sg:DisplayName>
|
|
63
|
+
/// <sg:Static />
|
|
64
|
+
/// <sg:Range>0, 1</sg:Range>
|
|
65
|
+
/// <sg:Default>0.25</sg:Default>
|
|
66
|
+
/// </paramhints>
|
|
67
|
+
/// <paramhints name="sb">
|
|
68
|
+
/// <sg:DisplayName>Toggle</sg:DisplayName>
|
|
69
|
+
/// <sg:Static />
|
|
70
|
+
/// <sg:Default>1</sg:Default>
|
|
71
|
+
/// </paramhints>
|
|
72
|
+
/// <paramhints name="si">
|
|
73
|
+
/// <sg:DisplayName>Integer</sg:DisplayName>
|
|
74
|
+
/// <sg:Static />
|
|
75
|
+
/// <sg:Default>5</sg:Default>
|
|
76
|
+
/// </paramhints>
|
|
77
|
+
UNITY_EXPORT_REFLECTION float3 AllHints(
|
|
78
|
+
inout CustomStruct a,
|
|
79
|
+
float3 c3,
|
|
80
|
+
inout float4 c4,
|
|
81
|
+
float3 sc3,
|
|
82
|
+
float4 sc4,
|
|
83
|
+
inout uint d,
|
|
84
|
+
uint sd,
|
|
85
|
+
float r,
|
|
86
|
+
float sr,
|
|
87
|
+
bool sb,
|
|
88
|
+
int si
|
|
89
|
+
)
|
|
90
|
+
{
|
|
91
|
+
return float3(a.Value, sr, sc4.r);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
} // Namespace
|
|
95
|
+
|
|
96
|
+
/// <funchints>
|
|
97
|
+
/// <sg:ProviderKey>GoodReferables</sg:ProviderKey>
|
|
98
|
+
/// </funchints>
|
|
99
|
+
/// <paramhints name="UV">
|
|
100
|
+
/// <UV/>
|
|
101
|
+
/// <Default>UV2</Default>
|
|
102
|
+
/// </paramhints>
|
|
103
|
+
/// <paramhints name="alsoUV">
|
|
104
|
+
/// <sg:Referable>UV</sg:Referable>
|
|
105
|
+
/// <Default>UV1</Default>
|
|
106
|
+
/// </paramhints>
|
|
107
|
+
/// <paramhints name="Position">
|
|
108
|
+
/// <Position/>
|
|
109
|
+
/// <Default>AbsoluteWorld</Default>
|
|
110
|
+
/// </paramhints>
|
|
111
|
+
/// <paramhints name="Normal">
|
|
112
|
+
/// <Normal/>
|
|
113
|
+
/// <Default>World</Default>
|
|
114
|
+
/// </paramhints>
|
|
115
|
+
/// <paramhints name="Tangent">
|
|
116
|
+
/// <Tangent/>
|
|
117
|
+
/// <Default>Object</Default>
|
|
118
|
+
/// </paramhints>
|
|
119
|
+
/// <paramhints name="Bitangent">
|
|
120
|
+
/// <Bitangent/>
|
|
121
|
+
/// <Default>Tangent</Default>
|
|
122
|
+
/// </paramhints>
|
|
123
|
+
/// <paramhints name="ViewDirection">
|
|
124
|
+
/// <ViewDirection/>
|
|
125
|
+
/// <Default>Screen</Default>
|
|
126
|
+
/// </paramhints>
|
|
127
|
+
/// <paramhints name="VertColor">
|
|
128
|
+
/// <VertexColor/>
|
|
129
|
+
/// </paramhints>
|
|
130
|
+
/// <paramhints name="ScreenPosition">
|
|
131
|
+
/// <ScreenPosition/>
|
|
132
|
+
/// <Default>Pixel</Default>
|
|
133
|
+
/// </paramhints>
|
|
134
|
+
/// <paramhints name="defaultValue">
|
|
135
|
+
/// <Default>1,0,0</Default>
|
|
136
|
+
/// </paramhints>
|
|
137
|
+
UNITY_EXPORT_REFLECTION float3 ReferableGood(float2 UV,
|
|
138
|
+
float2 alsoUV,
|
|
139
|
+
float3 Position,
|
|
140
|
+
float3 Normal,
|
|
141
|
+
float3 Tangent,
|
|
142
|
+
float3 Bitangent,
|
|
143
|
+
float3 ViewDirection,
|
|
144
|
+
float4 VertColor,
|
|
145
|
+
float4 ScreenPosition,
|
|
146
|
+
float3 defaultValue)
|
|
147
|
+
{
|
|
148
|
+
return float3(1,1,0);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/// <funchints>
|
|
152
|
+
/// <sg:ProviderKey>PrecisionTest</sg:ProviderKey>
|
|
153
|
+
/// <Precision/>
|
|
154
|
+
/// </funchints>
|
|
155
|
+
/// <paramhints name="a">
|
|
156
|
+
/// <Dynamic/>
|
|
157
|
+
/// </paramhints>
|
|
158
|
+
/// <paramhints name="b">
|
|
159
|
+
/// <Dynamic/>
|
|
160
|
+
/// </paramhints>
|
|
161
|
+
/// <paramhints name="c">
|
|
162
|
+
/// <Dynamic/>
|
|
163
|
+
/// </paramhints>
|
|
164
|
+
UNITY_EXPORT_REFLECTION float2 PrecisionTest(float a, half b, out float c)
|
|
165
|
+
{
|
|
166
|
+
c = a + b;
|
|
167
|
+
return (a,b);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/// <funchints>
|
|
171
|
+
/// <sg:ProviderKey>LinkageExample</sg:ProviderKey>
|
|
172
|
+
/// </funchints>
|
|
173
|
+
/// <paramhints name="test">
|
|
174
|
+
/// <Linkage>other</Linkage>
|
|
175
|
+
/// </paramhints>
|
|
176
|
+
UNITY_EXPORT_REFLECTION float3 LinkageExample(bool test, float other)
|
|
177
|
+
{
|
|
178
|
+
if (test)
|
|
179
|
+
return float3(other, 0, 0);
|
|
180
|
+
else
|
|
181
|
+
return float3(0, other, 0);
|
|
182
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Security notes: sprite-editor
|
|
2
|
+
|
|
3
|
+
This skill has the agent run C# inside the user's open Unity Editor through `unity command script eval`. Automated skill scanners flag that as a powerful capability. It is intentional, and it is limited by the safeguards below.
|
|
4
|
+
|
|
5
|
+
## Accepted risks
|
|
6
|
+
|
|
7
|
+
| Risk | Capability | Why it is accepted |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| `SEC_POWER_CAP` | Runs C# in the user's open Editor through `unity command script eval` | It only reaches the Editor the user already has open, on their own machine, as that user, so it grants nothing they couldn't do themselves. `script eval` sits behind the Pipeline capability gate. No code fetched from a remote source is run. Where a named `unity command` covers a step, the skill uses that instead of `script eval`. |
|
|
10
|
+
|
|
11
|
+
## Mitigations
|
|
12
|
+
|
|
13
|
+
- **Only the user's own Editor.** `unity command script eval` talks to the Editor open on this machine. It can't reach another machine or another user's Editor.
|
|
14
|
+
- **Capability gate.** `script eval` is only available when the project's Pipeline package provides it.
|
|
15
|
+
- **No remote code.** The agent runs C# it writes from this skill's own recipes. Nothing downloaded from outside is executed.
|
|
16
|
+
- **Named commands first.** When a dedicated `unity command` covers a step, the skill uses it instead of `script eval`.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sprite-editor
|
|
3
|
+
description: Edits Unity sprite rectangles, borders, pivots, outlines, and slicing by generating C# scripts. Use when the user works with sprite sheets or sprite slicing.
|
|
4
|
+
modes: [agent, ask]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Sprite Editor
|
|
8
|
+
|
|
9
|
+
Sprite metadata (rects, borders, pivots, outlines) lives inside the importer, not in a file
|
|
10
|
+
you can edit — reaching it means running C# through a live Editor.
|
|
11
|
+
|
|
12
|
+
**The `unity-cli` skill owns getting you there** — installing the CLI, confirming a connected
|
|
13
|
+
Editor, adding the project's `com.unity.pipeline` package, telling a genuinely absent Editor
|
|
14
|
+
apart from one stuck in Safe Mode, and discovering the Editor's command catalog. Follow it
|
|
15
|
+
first; don't re-derive any of it here.
|
|
16
|
+
|
|
17
|
+
Two things it can't know for you:
|
|
18
|
+
|
|
19
|
+
- **You need `script eval` in particular**, not just a reachable Editor. Confirm it appears in the
|
|
20
|
+
catalog — its presence depends on the Pipeline package version, not on the CLI.
|
|
21
|
+
- **Never hand-edit a `.meta` file to change sprite metadata.** The importer owns that data
|
|
22
|
+
and the capability checks below exist to prevent corruption, so an unreachable Editor is a
|
|
23
|
+
stop, not a cue to improvise.
|
|
24
|
+
|
|
25
|
+
Run C# through the connected Editor with the `script eval` command. Discover its parameter shape
|
|
26
|
+
from `unity command --format json` rather than assuming one — the inline form is
|
|
27
|
+
`unity command script eval --caller plugin --skill sprite-editor --code '<snippet>'`, and some Pipeline versions also register
|
|
28
|
+
`script eval_file` for running a snippet from a file. **Check the catalog before reaching for
|
|
29
|
+
`script eval_file`; it is frequently absent.** `unity command` defaults to a 30 second timeout.
|
|
30
|
+
|
|
31
|
+
Generates C# editor scripts to manipulate Unity sprites using ISpriteEditorDataProvider. Works with TextureImporter, PSBImporter, and custom importers.
|
|
32
|
+
|
|
33
|
+
### Passing C# to `script eval`
|
|
34
|
+
|
|
35
|
+
`script eval` compiles a **statement block, not a file**. Two consequences, both of which cause a
|
|
36
|
+
compile error rather than a warning:
|
|
37
|
+
|
|
38
|
+
- **No `using` directives.** The compiler reads `using UnityEngine;` as a resource-disposal
|
|
39
|
+
statement and rejects it (`CS0210`).
|
|
40
|
+
- **Types must be fully qualified.** A bare `AssetDatabase` or `Volume` does not resolve
|
|
41
|
+
(`CS0246` / `CS0103`), and a bare `Object` is ambiguous with `object` (`CS0104`).
|
|
42
|
+
|
|
43
|
+
Where a snippet below is written as a file — with usings, for readability, or because it is
|
|
44
|
+
meant to be saved into the project — qualify the types before passing it to `script eval`.
|
|
45
|
+
|
|
46
|
+
## Workflow
|
|
47
|
+
|
|
48
|
+
All generated scripts must follow the Safe Core Pattern in [references/templates.md](references/templates.md), which includes MANDATORY capability checks. NEVER attempt operations if capability checks fail - this prevents data corruption. After execution, verify results in Unity console and Project window.
|
|
49
|
+
|
|
50
|
+
## Common Operations
|
|
51
|
+
|
|
52
|
+
**Modify Name/Rect/Border/Pivot:** Update corresponding `SpriteRect` fields (see scripts/SetPivotExample.cs for pivot examples)
|
|
53
|
+
- Requires: `EditSpriteName`, `EditSpriteRect`, `EditBorder`, or `EditPivot`
|
|
54
|
+
|
|
55
|
+
**Add/Remove/Slice:** Create or filter `SpriteRect` array (see [references/background.md](references/background.md) for Unity 2021.2+ requirements)
|
|
56
|
+
- Requires: `CreateAndDeleteSprite`
|
|
57
|
+
|
|
58
|
+
**Set Outlines:** Get `ISpriteOutlineDataProvider` → Call `SetOutlines()` with GUID + Vector2 arrays
|
|
59
|
+
|
|
60
|
+
## Important Notes
|
|
61
|
+
|
|
62
|
+
- Do NOT use AssetPostprocessor or MenuItem patterns
|
|
63
|
+
- Generate standalone snippets only — no `AssetPostprocessor`, no `MenuItem`
|
|
64
|
+
- **Enum assignments:** Always use enum values and cast to numeric types. Never use raw numbers.
|
|
65
|
+
- ✅ Correct: `(int)SpriteAlignment.Center`
|
|
66
|
+
- ❌ Wrong: `1` (magic number)
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Unity Sprite Editor API Reference
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
- [Core Interface: ISpriteEditorDataProvider](#core-interface-ispriteeditordataprovider)
|
|
5
|
+
- [Properties](#properties)
|
|
6
|
+
- [Core Methods](#core-methods)
|
|
7
|
+
- [Callbacks](#callbacks)
|
|
8
|
+
- [Additional Data Providers](#additional-data-providers)
|
|
9
|
+
- [ISpriteNameFileIdDataProvider](#ispritenamefileiddataprovider)
|
|
10
|
+
- [ISpriteOutlineDataProvider](#ispriteoutlinedataprovider)
|
|
11
|
+
- [ISpritePhysicsOutlineDataProvider](#ispritephysicsoutlinedataprovider)
|
|
12
|
+
- [ISpriteBoneDataProvider](#ispritebonedataprovider)
|
|
13
|
+
- [ISpriteMeshDataProvider](#ispritemeshdataprovider)
|
|
14
|
+
- [ITextureDataProvider](#itexturedataprovider)
|
|
15
|
+
- [ISecondaryTextureDataProvider](#isecondarytexturedataprovider)
|
|
16
|
+
- [ISpriteFrameEditCapability](#ispriteframeeditcapability)
|
|
17
|
+
- [SpriteRect Properties](#spriterect-properties)
|
|
18
|
+
- [Common Patterns](#common-patterns)
|
|
19
|
+
- [Modifying Sprite Properties](#modifying-sprite-properties)
|
|
20
|
+
- [Working with Selection](#working-with-selection)
|
|
21
|
+
- [Version Considerations](#version-considerations)
|
|
22
|
+
|
|
23
|
+
## Core Interface: ISpriteEditorDataProvider
|
|
24
|
+
|
|
25
|
+
Main interface for editing sprite data. See [templates.md](templates.md) for the standard initialization and usage pattern.
|
|
26
|
+
|
|
27
|
+
### Properties
|
|
28
|
+
- `SpriteImportMode spriteImportMode` - How sprite data will be imported
|
|
29
|
+
- `float pixelsPerUnit` - Pixels per unit in world space
|
|
30
|
+
- `UnityObject targetObject` - Object providing the data
|
|
31
|
+
|
|
32
|
+
### Core Methods
|
|
33
|
+
- `SpriteRect[] GetSpriteRects()` - Returns array of SpriteRect
|
|
34
|
+
- `void SetSpriteRects(SpriteRect[] spriteRects)` - Updates sprite rectangles
|
|
35
|
+
- `void Apply()` - Applies changed data
|
|
36
|
+
- `void InitSpriteEditorDataProvider()` - Initializes the provider
|
|
37
|
+
- `T GetDataProvider<T>()` - Gets additional data providers
|
|
38
|
+
- `bool HasDataProvider(Type type)` - Checks if provider type is supported
|
|
39
|
+
|
|
40
|
+
### Callbacks
|
|
41
|
+
- `void RegisterDataChangeCallback(Action<ISpriteEditorDataProvider> action)`
|
|
42
|
+
- `void UnregisterDataChangeCallback(Action<ISpriteEditorDataProvider> action)`
|
|
43
|
+
|
|
44
|
+
## Additional Data Providers
|
|
45
|
+
|
|
46
|
+
### ISpriteNameFileIdDataProvider
|
|
47
|
+
Maps sprite names to file IDs (required for Unity 2021.2+ when adding/removing sprites).
|
|
48
|
+
|
|
49
|
+
```csharp
|
|
50
|
+
var nameFileIdProvider = dataProvider.GetDataProvider<ISpriteNameFileIdDataProvider>();
|
|
51
|
+
IEnumerable<SpriteNameFileIdPair> pairs = nameFileIdProvider.GetNameFileIdPairs();
|
|
52
|
+
nameFileIdProvider.SetNameFileIdPairs(updatedPairs);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### ISpriteOutlineDataProvider
|
|
56
|
+
Manages outline data for sprite tessellation.
|
|
57
|
+
|
|
58
|
+
```csharp
|
|
59
|
+
var outlineProvider = dataProvider.GetDataProvider<ISpriteOutlineDataProvider>();
|
|
60
|
+
List<Vector2[]> outlines = outlineProvider.GetOutlines(spriteGuid);
|
|
61
|
+
outlineProvider.SetOutlines(spriteGuid, newOutlines);
|
|
62
|
+
float tessellation = outlineProvider.GetTessellationDetail(spriteGuid);
|
|
63
|
+
outlineProvider.SetTessellationDetail(spriteGuid, 0.5f); // 0-1 range
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### ISpritePhysicsOutlineDataProvider
|
|
67
|
+
Manages physics outlines for Polygon Collider 2D.
|
|
68
|
+
|
|
69
|
+
```csharp
|
|
70
|
+
var physicsProvider = dataProvider.GetDataProvider<ISpritePhysicsOutlineDataProvider>();
|
|
71
|
+
List<Vector2[]> physicsOutlines = physicsProvider.GetOutlines(spriteGuid);
|
|
72
|
+
physicsProvider.SetOutlines(spriteGuid, newPhysicsOutlines);
|
|
73
|
+
float tessellation = physicsProvider.GetTessellationDetail(spriteGuid);
|
|
74
|
+
physicsProvider.SetTessellationDetail(spriteGuid, 0.5f);
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### ISpriteBoneDataProvider
|
|
78
|
+
Manages bone data for 2D animation.
|
|
79
|
+
|
|
80
|
+
```csharp
|
|
81
|
+
var boneProvider = dataProvider.GetDataProvider<ISpriteBoneDataProvider>();
|
|
82
|
+
List<SpriteBone> bones = boneProvider.GetBones(spriteGuid);
|
|
83
|
+
boneProvider.SetBones(spriteGuid, updatedBones);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### ISpriteMeshDataProvider
|
|
87
|
+
Manages custom sprite mesh data (vertices, indices, edges).
|
|
88
|
+
|
|
89
|
+
```csharp
|
|
90
|
+
var meshProvider = dataProvider.GetDataProvider<ISpriteMeshDataProvider>();
|
|
91
|
+
Vertex2DMetaData[] vertices = meshProvider.GetVertices(spriteGuid);
|
|
92
|
+
int[] indices = meshProvider.GetIndices(spriteGuid);
|
|
93
|
+
Vector2Int[] edges = meshProvider.GetEdges(spriteGuid);
|
|
94
|
+
|
|
95
|
+
meshProvider.SetVertices(spriteGuid, newVertices);
|
|
96
|
+
meshProvider.SetIndices(spriteGuid, newIndices);
|
|
97
|
+
meshProvider.SetEdges(spriteGuid, newEdges);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### ITextureDataProvider
|
|
101
|
+
Provides texture data for Sprite Editor.
|
|
102
|
+
|
|
103
|
+
```csharp
|
|
104
|
+
var textureProvider = dataProvider.GetDataProvider<ITextureDataProvider>();
|
|
105
|
+
Texture2D texture = textureProvider.texture;
|
|
106
|
+
Texture2D preview = textureProvider.previewTexture;
|
|
107
|
+
textureProvider.GetTextureActualWidthAndHeight(out int width, out int height);
|
|
108
|
+
Texture2D readable = textureProvider.GetReadableTexture2D();
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### ISecondaryTextureDataProvider
|
|
112
|
+
Manages secondary textures.
|
|
113
|
+
|
|
114
|
+
```csharp
|
|
115
|
+
var secondaryProvider = dataProvider.GetDataProvider<ISecondaryTextureDataProvider>();
|
|
116
|
+
SecondarySpriteTexture[] textures = secondaryProvider.textures;
|
|
117
|
+
secondaryProvider.textures = newTextures;
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### ISpriteFrameEditCapability
|
|
121
|
+
Controls sprite frame editing capabilities.
|
|
122
|
+
|
|
123
|
+
```csharp
|
|
124
|
+
var capabilityProvider = dataProvider.GetDataProvider<ISpriteFrameEditCapability>();
|
|
125
|
+
EditCapability capability = capabilityProvider.GetEditCapability();
|
|
126
|
+
capabilityProvider.SetEditCapability(newCapability);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## SpriteRect Properties
|
|
130
|
+
|
|
131
|
+
Key properties that can be modified on `SpriteRect`:
|
|
132
|
+
|
|
133
|
+
- `string name` - Sprite name
|
|
134
|
+
- `GUID spriteID` - Unique identifier (matches sprite asset's `GetSpriteID()`)
|
|
135
|
+
- `Rect rect` - Position and size in texture
|
|
136
|
+
- `Vector2 pivot` - Pivot point (0-1 range, relative to rect)
|
|
137
|
+
- `SpriteAlignment alignment` - Alignment preset (BottomLeft, Center, Custom, etc.)
|
|
138
|
+
- `Vector4 border` - 9-slice border (left, bottom, right, top)
|
|
139
|
+
|
|
140
|
+
**Note**: The `spriteID` property matches the GUID returned by calling `GetSpriteID()` on a sprite asset at runtime. This allows matching between editor-time configuration and runtime sprites.
|
|
141
|
+
|
|
142
|
+
## Common Patterns
|
|
143
|
+
|
|
144
|
+
See [templates.md](templates.md) for code patterns including:
|
|
145
|
+
- Safe Core Pattern with capability checks
|
|
146
|
+
- Modifying sprite properties
|
|
147
|
+
- Working with selection
|
|
148
|
+
|
|
149
|
+
## Version Considerations
|
|
150
|
+
|
|
151
|
+
See [background.md](background.md#version-specific-requirements) for Unity version-specific requirements (ISpriteNameFileIdDataProvider in 2021.2+).
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Sprite Editor Background Information
|
|
2
|
+
|
|
3
|
+
## Table of Contents
|
|
4
|
+
- [Why Use ISpriteEditorDataProvider](#why-use-ispriteeditordataprovider)
|
|
5
|
+
- [Original vs Imported Image Sizes](#original-vs-imported-image-sizes)
|
|
6
|
+
- [The Critical Distinction](#the-critical-distinction)
|
|
7
|
+
- [Important Implications](#important-implications)
|
|
8
|
+
- [Critical for Slicing Operations](#critical-for-slicing-operations)
|
|
9
|
+
- [Importer Compatibility](#importer-compatibility)
|
|
10
|
+
- [TextureImporter Configuration](#textureimporter-configuration)
|
|
11
|
+
- [Other Importers](#other-importers)
|
|
12
|
+
- [Data Provider Initialization](#data-provider-initialization)
|
|
13
|
+
- [Version-Specific Requirements](#version-specific-requirements)
|
|
14
|
+
- [Unity 2021.2+](#unity-20212)
|
|
15
|
+
- [Unity 2021.1 and Earlier](#unity-20211-and-earlier)
|
|
16
|
+
|
|
17
|
+
## Why Use ISpriteEditorDataProvider
|
|
18
|
+
|
|
19
|
+
**ISpriteEditorDataProvider provides a unified interface** that works across all importer types (TextureImporter, PSBImporter, custom importers). This ensures:
|
|
20
|
+
- Scripts work consistently regardless of importer type
|
|
21
|
+
- Changes are properly communicated to the importer
|
|
22
|
+
- Sprite metadata is handled correctly
|
|
23
|
+
|
|
24
|
+
**Never access importer-specific properties directly.** Always use ISpriteEditorDataProvider for compatibility.
|
|
25
|
+
|
|
26
|
+
## Original vs Imported Image Sizes
|
|
27
|
+
|
|
28
|
+
### The Critical Distinction
|
|
29
|
+
|
|
30
|
+
**Sprite data is always based on the original image size**, not the imported Texture2D size.
|
|
31
|
+
|
|
32
|
+
**Original Image Size:**
|
|
33
|
+
- The dimensions of the source image file before import
|
|
34
|
+
- Example: 4096x4096 PNG file
|
|
35
|
+
|
|
36
|
+
**Imported Texture2D Size:**
|
|
37
|
+
- The actual texture size after import
|
|
38
|
+
- Can be **smaller** due to:
|
|
39
|
+
- Platform-specific texture size limitations (e.g., mobile max 2048x2048)
|
|
40
|
+
- Texture compression settings
|
|
41
|
+
- Max texture size in import settings
|
|
42
|
+
|
|
43
|
+
### Important Implications
|
|
44
|
+
|
|
45
|
+
1. **All sprite data uses original coordinates:**
|
|
46
|
+
- Sprite rectangles (rect)
|
|
47
|
+
- Borders (for 9-slicing)
|
|
48
|
+
- Pivots
|
|
49
|
+
- Outline coordinates
|
|
50
|
+
|
|
51
|
+
2. **Example:**
|
|
52
|
+
- Original image: 4096x4096 PNG
|
|
53
|
+
- Imported texture: 2048x2048 (due to max size setting)
|
|
54
|
+
- Sprite rect: `(0, 0, 4096, 4096)` ← Still uses original dimensions!
|
|
55
|
+
|
|
56
|
+
3. **Unity handles scaling internally** when rendering sprites
|
|
57
|
+
|
|
58
|
+
4. **Always work in original image coordinate space** when editing sprite data
|
|
59
|
+
|
|
60
|
+
### Critical for Slicing Operations
|
|
61
|
+
|
|
62
|
+
When performing slicing (automatic, grid, isometric), you **MUST ensure the texture being sliced matches the original source image size**.
|
|
63
|
+
|
|
64
|
+
If the imported Texture2D is smaller than original:
|
|
65
|
+
- Slicing coordinates will be incorrect
|
|
66
|
+
- Sprite rectangles won't align with intended regions
|
|
67
|
+
- The operation will fail
|
|
68
|
+
|
|
69
|
+
**Solution:** Use `GetTextureToSlice` utility (see scripts/README.md) to ensure correct texture dimensions for slicing.
|
|
70
|
+
|
|
71
|
+
## Importer Compatibility
|
|
72
|
+
|
|
73
|
+
### TextureImporter Configuration
|
|
74
|
+
|
|
75
|
+
For TextureImporter to support sprites:
|
|
76
|
+
- `textureType` must be `TextureImporterType.Sprite`
|
|
77
|
+
- `spriteImportMode` must be `SpriteImportMode.Multiple` for multiple sprites
|
|
78
|
+
|
|
79
|
+
The pre-flight check automatically configures these settings.
|
|
80
|
+
|
|
81
|
+
### Other Importers
|
|
82
|
+
|
|
83
|
+
PSBImporter and custom importers may have different configuration requirements. Always verify ISpriteEditorDataProvider support before attempting sprite operations.
|
|
84
|
+
|
|
85
|
+
### Data Provider Initialization
|
|
86
|
+
|
|
87
|
+
See [templates.md](templates.md) for the standard initialization pattern. If `dataProvider` is null, the importer does not support sprite editing.
|
|
88
|
+
|
|
89
|
+
## Version-Specific Requirements
|
|
90
|
+
|
|
91
|
+
### Unity 2021.2+
|
|
92
|
+
|
|
93
|
+
Adding or removing sprites requires additional steps:
|
|
94
|
+
|
|
95
|
+
```csharp
|
|
96
|
+
var nameFileIdProvider = dataProvider.GetDataProvider<ISpriteNameFileIdDataProvider>();
|
|
97
|
+
if (nameFileIdProvider != null)
|
|
98
|
+
{
|
|
99
|
+
// Get existing name-file ID pairs
|
|
100
|
+
var nameFileIdPairs = nameFileIdProvider.GetNameFileIdPairs();
|
|
101
|
+
|
|
102
|
+
// Update pairs when adding/removing sprites
|
|
103
|
+
// Add new pair: nameFileIdPairs.Add(new SpriteNameFileIdPair(name, fileId));
|
|
104
|
+
// Remove pair: nameFileIdPairs.RemoveAll(p => p.name == spriteName);
|
|
105
|
+
|
|
106
|
+
nameFileIdProvider.SetNameFileIdPairs(nameFileIdPairs);
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Unity 2021.1 and Earlier
|
|
111
|
+
|
|
112
|
+
ISpriteNameFileIdDataProvider does not exist. Simply use SetSpriteRects() without additional steps.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Sprite Editor Code Templates
|
|
2
|
+
|
|
3
|
+
## Safe Core Pattern (MANDATORY)
|
|
4
|
+
|
|
5
|
+
Types are fully qualified because this runs through `script eval`, which rejects `using` directives.
|
|
6
|
+
If you save it as a `.cs` file instead, add `using UnityEditor.U2D.Sprites;` and shorten them.
|
|
7
|
+
|
|
8
|
+
Use this structure for all sprite modification tasks.
|
|
9
|
+
|
|
10
|
+
**CRITICAL:** If capability checks fail, the script MUST return immediately. NEVER bypass capability checks even if you suspect the API might work - this can cause data corruption and violates Unity's data provider contract.
|
|
11
|
+
|
|
12
|
+
```csharp
|
|
13
|
+
// 1. Get and Init Data Provider
|
|
14
|
+
var importer = UnityEditor.AssetImporter.GetAtPath(assetPath);
|
|
15
|
+
var factory = new UnityEditor.U2D.Sprites.SpriteDataProviderFactories();
|
|
16
|
+
factory.Init();
|
|
17
|
+
var dataProvider = factory.GetSpriteEditorDataProviderFromObject(importer);
|
|
18
|
+
dataProvider.InitSpriteEditorDataProvider();
|
|
19
|
+
|
|
20
|
+
// 2. MANDATORY: Check Capabilities - ABORT if not supported
|
|
21
|
+
var editCapability = dataProvider.GetDataProvider<UnityEditor.U2D.Sprites.ISpriteFrameEditCapability>();
|
|
22
|
+
if (editCapability == null)
|
|
23
|
+
{
|
|
24
|
+
throw new System.Exception("Edit capability not supported by importer. Operation aborted.");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var capability = editCapability.GetEditCapability();
|
|
28
|
+
// Check for: EditSpriteName, EditSpriteRect, EditBorder, EditPivot, CreateAndDeleteSprite
|
|
29
|
+
if (!capability.HasCapability(UnityEditor.U2D.Sprites.EEditCapability.EditSpriteName))
|
|
30
|
+
{
|
|
31
|
+
throw new System.Exception("Operation not supported by importer. User action aborted.");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// 3. Read and Modify
|
|
35
|
+
var spriteRects = dataProvider.GetSpriteRects();
|
|
36
|
+
// ... logic here ...
|
|
37
|
+
|
|
38
|
+
// 4. Apply and Reimport
|
|
39
|
+
dataProvider.SetSpriteRects(spriteRects);
|
|
40
|
+
dataProvider.Apply();
|
|
41
|
+
importer.SaveAndReimport();
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Capability Check Pattern
|
|
45
|
+
|
|
46
|
+
Before performing any modification operation, check if the importer supports it. **ABORT the user action if the capability is not supported.**
|
|
47
|
+
|
|
48
|
+
**DO NOT rationalize bypassing this check.** Even if you believe the API might accept the operation, capability checks are mandatory for data integrity. Return immediately on failure - no exceptions.
|
|
49
|
+
|
|
50
|
+
```csharp
|
|
51
|
+
var editCapability = dataProvider.GetDataProvider<UnityEditor.U2D.Sprites.ISpriteFrameEditCapability>();
|
|
52
|
+
if (editCapability == null)
|
|
53
|
+
{
|
|
54
|
+
throw new System.Exception("Edit capability not supported by importer. User action aborted.");
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
var capability = editCapability.GetEditCapability();
|
|
59
|
+
if (!capability.HasCapability(UnityEditor.U2D.Sprites.EEditCapability.EditSpriteName)) // Adjust based on task
|
|
60
|
+
{
|
|
61
|
+
throw new System.Exception("Importer does not support the requested operation. User action aborted.");
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Available Capabilities
|
|
67
|
+
|
|
68
|
+
- `EditSpriteName` - Modify sprite names
|
|
69
|
+
- `EditSpriteRect` - Modify sprite rectangles
|
|
70
|
+
- `EditBorder` - Modify 9-slice borders
|
|
71
|
+
- `EditPivot` - Modify pivot points
|
|
72
|
+
- `CreateAndDeleteSprite` - Add/remove sprites or perform slicing
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
using System;
|
|
2
|
+
using UnityEditor.U2D.Sprites;
|
|
3
|
+
|
|
4
|
+
namespace Editor
|
|
5
|
+
{
|
|
6
|
+
static public partial class SpriteEditorUtility
|
|
7
|
+
{
|
|
8
|
+
/// <summary>
|
|
9
|
+
/// Automatically slices a texture by detecting visible pixel regions and creating sprite rectangles.
|
|
10
|
+
/// Uses Unity's internal automatic sprite detection algorithm to find sprite boundaries.
|
|
11
|
+
/// </summary>
|
|
12
|
+
/// <param name="spriteDataProvider">The sprite data provider for the texture.</param>
|
|
13
|
+
/// <param name="textureProvider">The texture data provider.</param>
|
|
14
|
+
/// <param name="minRectSize">Minimum size in pixels for detected sprite rectangles.</param>
|
|
15
|
+
/// <param name="extrudeSize">Number of pixels to extrude (expand) sprite boundaries.</param>
|
|
16
|
+
/// <param name="addNewSpriteMethod">Method for handling existing sprites (DeleteAll, Smart, Safe).</param>
|
|
17
|
+
/// <param name="nameGenerator">Function to generate sprite names based on index.</param>
|
|
18
|
+
/// <param name="kOverlapTolerance">Tolerance for detecting overlapping sprites.</param>
|
|
19
|
+
/// <param name="kBestFitTolerance">Tolerance for best-fit matching.</param>
|
|
20
|
+
/// <param name="bestFit">Whether to use best-fit algorithm for overlap detection.</param>
|
|
21
|
+
/// <returns>True if slicing succeeded, false if texture is not readable.</returns>
|
|
22
|
+
static public bool AutomaticSliceTexture(ISpriteEditorDataProvider spriteDataProvider, ITextureDataProvider textureProvider,
|
|
23
|
+
int minRectSize, int extrudeSize, AddNewSpriteMethod addNewSpriteMethod, Func<int, string> nameGenerator,
|
|
24
|
+
float kOverlapTolerance= 0.00001f, float kBestFitTolerance = 0.5f, bool bestFit = false)
|
|
25
|
+
{
|
|
26
|
+
var texture = GetTextureToSlice(textureProvider);
|
|
27
|
+
if (texture == null)
|
|
28
|
+
{
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var rects = UnityEditorInternal.InternalSpriteUtility.GenerateAutomaticSpriteRectangles(texture, minRectSize, extrudeSize);
|
|
33
|
+
|
|
34
|
+
var newRects = GenerateNewSpriteRects(spriteDataProvider, rects, addNewSpriteMethod, nameGenerator, kOverlapTolerance, kBestFitTolerance, bestFit);
|
|
35
|
+
spriteDataProvider.SetSpriteRects(newRects.ToArray());
|
|
36
|
+
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|