@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.
Files changed (360) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/LICENSE-UNITY-COMPANION.md +122 -0
  3. package/LICENSE.md +31 -0
  4. package/NOTICE.md +90 -0
  5. package/README.md +273 -2
  6. package/cordis.patch.yml +22 -0
  7. package/docs/design.md +297 -0
  8. package/icon.svg +16 -0
  9. package/lib/frontmatter.js +392 -0
  10. package/lib/gating.js +105 -0
  11. package/lib/harness.js +16 -0
  12. package/lib/index.js +171 -0
  13. package/lib/project.js +210 -0
  14. package/lib/registry.js +268 -0
  15. package/lib/requirements.js +214 -0
  16. package/lib/skills.js +191 -0
  17. package/lib/types/frontmatter.d.ts +84 -0
  18. package/lib/types/gating.d.ts +80 -0
  19. package/lib/types/harness.d.ts +152 -0
  20. package/lib/types/index.d.ts +75 -0
  21. package/lib/types/project.d.ts +93 -0
  22. package/lib/types/registry.d.ts +96 -0
  23. package/lib/types/requirements.d.ts +67 -0
  24. package/lib/types/skills.d.ts +54 -0
  25. package/lib/types/watch.d.ts +34 -0
  26. package/lib/watch.js +84 -0
  27. package/locale/en.json +6 -0
  28. package/locale/zh.json +6 -0
  29. package/package.json +70 -4
  30. package/skills/2d-pixel-perfect/SKILL.md +208 -0
  31. package/skills/2d-pixel-perfect/references/api-reference.md +81 -0
  32. package/skills/2d-pixel-perfect/references/camera-setup-builtin.cs +40 -0
  33. package/skills/2d-pixel-perfect/references/camera-setup-urp.cs +49 -0
  34. package/skills/2d-pixel-perfect/references/pipeline-detection.cs +50 -0
  35. package/skills/2d-pixel-perfect/references/sprite-settings.cs +37 -0
  36. package/skills/asset-transformer-toolkit/SECURITY.md +15 -0
  37. package/skills/asset-transformer-toolkit/SKILL.md +39 -0
  38. package/skills/asset-transformer-toolkit/references/create-importer.md +121 -0
  39. package/skills/asset-transformer-toolkit/references/lods.md +61 -0
  40. package/skills/asset-transformer-toolkit/references/rule-api.md +154 -0
  41. package/skills/asset-transformer-toolkit/references/ruleblock-api.md +37 -0
  42. package/skills/asset-transformer-toolkit/references/ruleset-api.md +138 -0
  43. package/skills/asset-transformer-toolkit/references/rulesets-and-actions.md +227 -0
  44. package/skills/audio-setup-mixers/SECURITY.md +16 -0
  45. package/skills/audio-setup-mixers/SKILL.md +127 -0
  46. package/skills/audio-setup-mixers/references/api.md +162 -0
  47. package/skills/build-gtk/SECURITY.md +16 -0
  48. package/skills/build-gtk/SKILL.md +200 -0
  49. package/skills/build-gtk/references/api-reference.md +33 -0
  50. package/skills/build-gtk/references/graph-api-gaps.md +96 -0
  51. package/skills/build-gtk/references/runtime-and-visualization.md +191 -0
  52. package/skills/build-gtk/references/state-machine-api.md +270 -0
  53. package/skills/build-gtk/references/where-the-docs-stop.md +49 -0
  54. package/skills/build-live-game/SKILL.md +159 -0
  55. package/skills/build-live-game/references/achievements.md +757 -0
  56. package/skills/build-live-game/references/apis.md +271 -0
  57. package/skills/build-live-game/references/authentication.md +431 -0
  58. package/skills/build-live-game/references/battlepass.md +904 -0
  59. package/skills/build-live-game/references/blueprints-and-samples.md +75 -0
  60. package/skills/build-live-game/references/cloud-code-cloudbehaviours.md +1111 -0
  61. package/skills/build-live-game/references/cloud-code-modules.md +1276 -0
  62. package/skills/build-live-game/references/cloud-code.md +58 -0
  63. package/skills/build-live-game/references/cloud-save.md +464 -0
  64. package/skills/build-live-game/references/deployment.md +231 -0
  65. package/skills/build-live-game/references/orientation.md +30 -0
  66. package/skills/build-live-game/references/player-account.md +821 -0
  67. package/skills/build-live-game/references/remote-config.md +96 -0
  68. package/skills/build-live-game/references/services-overview.md +76 -0
  69. package/skills/build-live-game/references/tooling.md +375 -0
  70. package/skills/build-live-game/references/ugs-cli.md +86 -0
  71. package/skills/craft-game-floors/SECURITY.md +23 -0
  72. package/skills/craft-game-floors/SKILL.md +134 -0
  73. package/skills/craft-game-floors/references/art-direction.md +85 -0
  74. package/skills/craft-game-floors/references/camera-rigs.md +51 -0
  75. package/skills/craft-game-floors/references/character-motion.md +35 -0
  76. package/skills/craft-game-floors/references/game-audio.md +47 -0
  77. package/skills/craft-game-floors/references/game-feel.md +68 -0
  78. package/skills/craft-game-floors/references/game-shell.md +45 -0
  79. package/skills/craft-game-floors/references/live-floor.md +35 -0
  80. package/skills/craft-game-floors/references/placeholder-assets.md +35 -0
  81. package/skills/craft-game-floors/references/scene-lighting.md +52 -0
  82. package/skills/craft-game-floors/references/toon-shading.md +34 -0
  83. package/skills/craft-game-floors/references/vfx.md +40 -0
  84. package/skills/craft-game-floors/references/visual-scorecard.md +43 -0
  85. package/skills/create-2d-physics/SECURITY.md +16 -0
  86. package/skills/create-2d-physics/SKILL.md +128 -0
  87. package/skills/create-2d-physics/references/2d-physics-core.md +155 -0
  88. package/skills/create-2d-physics/references/legacy-2d-physics.md +45 -0
  89. package/skills/create-tile-palette-or-rule-tiles/SKILL.md +95 -0
  90. package/skills/create-tile-palette-or-rule-tiles/references/hexagonalruletile.md +71 -0
  91. package/skills/create-tile-palette-or-rule-tiles/references/palette-create.md +38 -0
  92. package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createempty.md +37 -0
  93. package/skills/create-tile-palette-or-rule-tiles/references/ruletile-createfromsegment.md +219 -0
  94. package/skills/create-tile-palette-or-rule-tiles/references/ruletile.md +95 -0
  95. package/skills/create-tile-palette-or-rule-tiles/scripts/CreatePaletteTemplate.cs +148 -0
  96. package/skills/create-tile-palette-or-rule-tiles/scripts/ManualWorkflowExample.cs +63 -0
  97. package/skills/create-tile-palette-or-rule-tiles/scripts/RuleTileGenerator.cs +61 -0
  98. package/skills/create-tile-palette-or-rule-tiles/scripts/TilemapRuleTileCreateFromSegment.cs +225 -0
  99. package/skills/fix-3d-physics-collisions/SECURITY.md +17 -0
  100. package/skills/fix-3d-physics-collisions/SKILL.md +139 -0
  101. package/skills/fix-3d-physics-collisions/references/collision-checklist.md +80 -0
  102. package/skills/fix-3d-physics-collisions/references/collision-debugger.md +18 -0
  103. package/skills/fix-3d-physics-collisions/references/console-errors-table.md +9 -0
  104. package/skills/fix-3d-physics-collisions/references/kinematic-trigger-facts.md +18 -0
  105. package/skills/fix-3d-physics-collisions/references/other-symptoms.md +29 -0
  106. package/skills/fix-3d-physics-collisions/references/raycast-checklist.md +8 -0
  107. package/skills/fix-3d-physics-collisions/references/topic-map.md +42 -0
  108. package/skills/fix-3d-physics-collisions/references/trigger-checklist.md +9 -0
  109. package/skills/fix-3d-physics-collisions/scripts/CollisionDebugger.cs +561 -0
  110. package/skills/generate-editor-search-query/SECURITY.md +17 -0
  111. package/skills/generate-editor-search-query/SKILL.md +117 -0
  112. package/skills/generate-editor-search-query/references/open-search-window.md +70 -0
  113. package/skills/generate-editor-search-query/references/query-patterns.md +124 -0
  114. package/skills/implement-in-app-purchases/SKILL.md +82 -0
  115. package/skills/implement-in-app-purchases/references/api-details.md +41 -0
  116. package/skills/implement-in-app-purchases/references/api-notes.md +105 -0
  117. package/skills/implement-in-app-purchases/references/codeless-catalog.md +197 -0
  118. package/skills/implement-in-app-purchases/references/convert-adapty.md +270 -0
  119. package/skills/implement-in-app-purchases/references/convert-essentialkit.md +239 -0
  120. package/skills/implement-in-app-purchases/references/convert-revenuecat.md +277 -0
  121. package/skills/implement-in-app-purchases/references/convert-unipay.md +145 -0
  122. package/skills/implement-in-app-purchases/references/migration-v4-to-v5.md +46 -0
  123. package/skills/implement-in-app-purchases/references/path-add-iap-to-new-project.md +197 -0
  124. package/skills/implement-in-app-purchases/references/path-convert-native-google-billing.md +302 -0
  125. package/skills/implement-in-app-purchases/references/path-convert-native-storekit.md +357 -0
  126. package/skills/implement-in-app-purchases/references/path-implement-iap-d2c.md +253 -0
  127. package/skills/implement-in-app-purchases/references/platform-notes.md +55 -0
  128. package/skills/implement-in-app-purchases/references/pre-check.md +207 -0
  129. package/skills/implement-in-app-purchases/references/topic-map.md +46 -0
  130. package/skills/initialize-ai-navigation/SKILL.md +109 -0
  131. package/skills/initialize-ai-navigation/references/navigation-system.md +793 -0
  132. package/skills/initialize-ai-navigation/references/topic-map.md +66 -0
  133. package/skills/levelplay-unity-integration/SKILL.md +122 -0
  134. package/skills/levelplay-unity-integration/references/adding-more-ad-formats.md +15 -0
  135. package/skills/levelplay-unity-integration/references/banner-api.md +927 -0
  136. package/skills/levelplay-unity-integration/references/best-practices.md +604 -0
  137. package/skills/levelplay-unity-integration/references/dependency-resolution.md +94 -0
  138. package/skills/levelplay-unity-integration/references/examples.md +10 -0
  139. package/skills/levelplay-unity-integration/references/ilrd-api.md +337 -0
  140. package/skills/levelplay-unity-integration/references/initialization-api.md +851 -0
  141. package/skills/levelplay-unity-integration/references/interstitial-api.md +907 -0
  142. package/skills/levelplay-unity-integration/references/ios-setup.md +463 -0
  143. package/skills/levelplay-unity-integration/references/migration-sdk-9.md +666 -0
  144. package/skills/levelplay-unity-integration/references/privacy-settings.md +593 -0
  145. package/skills/levelplay-unity-integration/references/production-release-checklist.md +22 -0
  146. package/skills/levelplay-unity-integration/references/rewarded-api.md +918 -0
  147. package/skills/levelplay-unity-integration/references/step-0-new-or-migration.md +8 -0
  148. package/skills/levelplay-unity-integration/references/step-1-verify-environment.md +4 -0
  149. package/skills/levelplay-unity-integration/references/step-10-testing.md +15 -0
  150. package/skills/levelplay-unity-integration/references/step-2-business-goals.md +12 -0
  151. package/skills/levelplay-unity-integration/references/step-3-install-sdk.md +55 -0
  152. package/skills/levelplay-unity-integration/references/step-4-native-dependencies.md +22 -0
  153. package/skills/levelplay-unity-integration/references/step-5-app-key-and-ad-units.md +18 -0
  154. package/skills/levelplay-unity-integration/references/step-6-5-privacy-and-regulation.md +51 -0
  155. package/skills/levelplay-unity-integration/references/step-6-admob-keys.md +16 -0
  156. package/skills/levelplay-unity-integration/references/step-7-initialize.md +50 -0
  157. package/skills/levelplay-unity-integration/references/step-8-ad-unit-strategy.md +16 -0
  158. package/skills/levelplay-unity-integration/references/step-9-implement-ad-units.md +66 -0
  159. package/skills/levelplay-unity-integration/references/testing-and-validation.md +222 -0
  160. package/skills/levelplay-unity-integration/references/troubleshooting.md +99 -0
  161. package/skills/localize-unity-project/SKILL.md +159 -0
  162. package/skills/localize-unity-project/references/api-notes.md +15 -0
  163. package/skills/localize-unity-project/references/cjk-fonts.md +83 -0
  164. package/skills/localize-unity-project/references/docs-map.md +42 -0
  165. package/skills/localize-unity-project/references/documentation-lookup.md +33 -0
  166. package/skills/localize-unity-project/references/locale-switching.md +17 -0
  167. package/skills/localize-unity-project/references/table-completeness-check.md +47 -0
  168. package/skills/localize-unity-project/references/translating-existing-project.md +47 -0
  169. package/skills/localize-unity-project/references/translation-strategy.md +41 -0
  170. package/skills/localize-unity-project/references/troubleshooting.md +12 -0
  171. package/skills/localize-unity-project/scripts/L10nBatchProcessor.cs +191 -0
  172. package/skills/localize-unity-project/scripts/LocalizedFontAsset.cs +18 -0
  173. package/skills/manage-sprite-atlas/SKILL.md +202 -0
  174. package/skills/manage-sprite-atlas/references/addressables-delivery.md +58 -0
  175. package/skills/manage-sprite-atlas/references/advanced-manual-authoring.md +19 -0
  176. package/skills/manage-sprite-atlas/references/api.md +382 -0
  177. package/skills/manage-sprite-atlas/references/best-practices.md +183 -0
  178. package/skills/manage-sprite-atlas/references/common-errors.md +123 -0
  179. package/skills/manage-sprite-atlas/references/complete-workflow.md +61 -0
  180. package/skills/manage-sprite-atlas/references/custom-packing.md +147 -0
  181. package/skills/manage-sprite-atlas/references/delivery-mechanism.md +30 -0
  182. package/skills/manage-sprite-atlas/references/key-requirements.md +21 -0
  183. package/skills/manage-sprite-atlas/references/manual-authoring.md +39 -0
  184. package/skills/manage-sprite-atlas/references/namespaces.md +15 -0
  185. package/skills/manage-sprite-atlas/references/v2-architecture.md +21 -0
  186. package/skills/manage-sprite-atlas/resources/authoringvsruntime.cs +176 -0
  187. package/skills/manage-sprite-atlas/resources/buildaddressablespostprocess.cs +59 -0
  188. package/skills/manage-sprite-atlas/resources/cacheloadedatlases.cs +145 -0
  189. package/skills/manage-sprite-atlas/resources/cleanupbatchoperations.cs +119 -0
  190. package/skills/manage-sprite-atlas/resources/createandconfiguremasteratlas.cs +57 -0
  191. package/skills/manage-sprite-atlas/resources/custompackersetup.cs +88 -0
  192. package/skills/manage-sprite-atlas/resources/deprecatedmethods.cs +142 -0
  193. package/skills/manage-sprite-atlas/resources/dontmodifywithoutsaving.cs +120 -0
  194. package/skills/manage-sprite-atlas/resources/dontpackinruntimebuilds.cs +190 -0
  195. package/skills/manage-sprite-atlas/resources/dontscriptspriteatlasineditor.cs +114 -0
  196. package/skills/manage-sprite-atlas/resources/editorconfiguration.cs +95 -0
  197. package/skills/manage-sprite-atlas/resources/enablespritepacking.cs +172 -0
  198. package/skills/manage-sprite-atlas/resources/gridspritepacker.cs +50 -0
  199. package/skills/manage-sprite-atlas/resources/handlelatebinding.cs +147 -0
  200. package/skills/manage-sprite-atlas/resources/handlenullcases.cs +141 -0
  201. package/skills/manage-sprite-atlas/resources/migratev1tov2.cs +335 -0
  202. package/skills/manage-sprite-atlas/resources/multipagepacker.cs +80 -0
  203. package/skills/manage-sprite-atlas/resources/optimizetexturesettings.cs +191 -0
  204. package/skills/manage-sprite-atlas/resources/packerdebugging.cs +158 -0
  205. package/skills/manage-sprite-atlas/resources/packtransform.cs +51 -0
  206. package/skills/manage-sprite-atlas/resources/platformnames.cs +127 -0
  207. package/skills/manage-sprite-atlas/resources/queryspritesefficiently.cs +222 -0
  208. package/skills/manage-sprite-atlas/resources/registercallbacks.cs +152 -0
  209. package/skills/manage-sprite-atlas/resources/runtimeatlasloader.cs +15 -0
  210. package/skills/manage-sprite-atlas/resources/runtimespriteaccess.cs +19 -0
  211. package/skills/manage-sprite-atlas/resources/savespriteatlasasset.cs +107 -0
  212. package/skills/manage-sprite-atlas/resources/scriptablepacker.cs +81 -0
  213. package/skills/manage-sprite-atlas/resources/setincludeinbuild.cs +164 -0
  214. package/skills/manage-sprite-atlas/resources/sizeoptimizedpacker.cs +88 -0
  215. package/skills/manage-sprite-atlas/resources/spriteatlaslatebinding.cs +123 -0
  216. package/skills/manage-sprite-atlas/resources/spriteatlasprebuildgenerator.cs +219 -0
  217. package/skills/manage-sprite-atlas/resources/spritedata.cs +35 -0
  218. package/skills/manage-sprite-atlas/resources/spritepack.cs +39 -0
  219. package/skills/manage-sprite-atlas/resources/texturedata.cs +15 -0
  220. package/skills/manage-sprite-atlas/resources/updatebuildscripts.cs +357 -0
  221. package/skills/manage-sprite-atlas/resources/updatesettingsconfiguration.cs +135 -0
  222. package/skills/manage-sprite-atlas/resources/usevariantswisely.cs +179 -0
  223. package/skills/manage-sprite-atlas/resources/variantatlas.cs +39 -0
  224. package/skills/migrate-birp-to-urp/SECURITY.md +16 -0
  225. package/skills/migrate-birp-to-urp/SKILL.md +167 -0
  226. package/skills/migrate-birp-to-urp/references/capturing-the-editor.md +66 -0
  227. package/skills/migrate-birp-to-urp/references/complex-shader-situations.md +272 -0
  228. package/skills/migrate-birp-to-urp/references/conversion-and-rendering-triage.md +113 -0
  229. package/skills/migrate-birp-to-urp/references/custom-shader-triage.md +123 -0
  230. package/skills/migrate-birp-to-urp/references/implementation-patterns.md +529 -0
  231. package/skills/migrate-birp-to-urp/references/migration-workflow.md +265 -0
  232. package/skills/migrate-birp-to-urp/references/parity-validation-and-troubleshooting.md +114 -0
  233. package/skills/migrate-birp-to-urp/references/preflight-and-urp-setup.md +195 -0
  234. package/skills/migrate-birp-to-urp/references/quality-settings-map.md +69 -0
  235. package/skills/new-unity-project/SECURITY.md +26 -0
  236. package/skills/new-unity-project/SKILL.md +171 -0
  237. package/skills/new-unity-project/references/checklist.md +18 -0
  238. package/skills/new-unity-project/references/common-mistakes.md +15 -0
  239. package/skills/new-unity-project/references/skill-setup.md +66 -0
  240. package/skills/new-unity-project/references/step-1-concept.md +13 -0
  241. package/skills/new-unity-project/references/step-2-platforms-and-create.md +31 -0
  242. package/skills/new-unity-project/references/step-3-join-and-reconcile.md +16 -0
  243. package/skills/new-unity-project/references/step-4-source-control.md +9 -0
  244. package/skills/new-unity-project/references/step-5-packages.md +18 -0
  245. package/skills/new-unity-project/references/step-6-identity-and-floors.md +20 -0
  246. package/skills/new-unity-project/references/step-7-visual-baseline.md +75 -0
  247. package/skills/new-unity-project/references/step-8-first-commit.md +21 -0
  248. package/skills/new-unity-project/references/step-9-handoff.md +23 -0
  249. package/skills/optimize-audio/SECURITY.md +16 -0
  250. package/skills/optimize-audio/SKILL.md +120 -0
  251. package/skills/optimize-audio/references/diagnostics.md +42 -0
  252. package/skills/optimize-audio/references/troubleshooting.md +41 -0
  253. package/skills/optimize-audio/resources/audio-import-api.md +149 -0
  254. package/skills/optimize-audio/resources/platform-settings.md +48 -0
  255. package/skills/optimize-text-mesh-pro/SKILL.md +181 -0
  256. package/skills/optimize-text-mesh-pro/references/dynamic-atlas-and-profiling.md +28 -0
  257. package/skills/optimize-text-mesh-pro/references/topic-map.md +36 -0
  258. package/skills/optimize-web/SECURITY.md +16 -0
  259. package/skills/optimize-web/SKILL.md +157 -0
  260. package/skills/optimize-web/references/editor-csharp.md +120 -0
  261. package/skills/optimize-web/references/topic-map.md +49 -0
  262. package/skills/optimize-web/references/troubleshooting.md +45 -0
  263. package/skills/optimize-web/references/understand-request.md +19 -0
  264. package/skills/optimize-web/references/web-assets-quality.md +59 -0
  265. package/skills/optimize-web/references/web-player-settings.md +39 -0
  266. package/skills/optimize-web/references/web-profiling-memory.md +71 -0
  267. package/skills/optimize-web/scripts/WebOptimizer.cs +46 -0
  268. package/skills/optimize-web/scripts/toktx-examples.sh +11 -0
  269. package/skills/setup-multiplayer-services/SKILL.md +36 -0
  270. package/skills/setup-multiplayer-services/references/dgs-entrypoint.md +79 -0
  271. package/skills/setup-multiplayer-services/references/entrypoints.md +213 -0
  272. package/skills/setup-multiplayer-services/references/examples.md +33 -0
  273. package/skills/setup-multiplayer-services/references/implementation-fit.md +30 -0
  274. package/skills/setup-multiplayer-services/references/underlying-services.md +11 -0
  275. package/skills/setup-multiplayer-services/references/workflows-prerequisites.md +17 -0
  276. package/skills/setup-vivox-voice-chat/SECURITY.md +16 -0
  277. package/skills/setup-vivox-voice-chat/SKILL.md +166 -0
  278. package/skills/setup-vivox-voice-chat/references/api-reference-lookup.md +28 -0
  279. package/skills/setup-vivox-voice-chat/references/docs-topic-map.md +13 -0
  280. package/skills/setup-vivox-voice-chat/references/events-and-participants.md +79 -0
  281. package/skills/setup-vivox-voice-chat/references/init-and-login.md +92 -0
  282. package/skills/setup-vivox-voice-chat/references/text-chat.md +93 -0
  283. package/skills/setup-vivox-voice-chat/references/troubleshooting.md +47 -0
  284. package/skills/setup-vivox-voice-chat/references/voice-channels.md +92 -0
  285. package/skills/shader-graph-create-custom-node/SKILL.md +25 -0
  286. package/skills/shader-graph-create-custom-node/resources/all_hints.hlsl +182 -0
  287. package/skills/sprite-editor/SECURITY.md +16 -0
  288. package/skills/sprite-editor/SKILL.md +66 -0
  289. package/skills/sprite-editor/references/api_reference.md +151 -0
  290. package/skills/sprite-editor/references/background.md +112 -0
  291. package/skills/sprite-editor/references/templates.md +72 -0
  292. package/skills/sprite-editor/scripts/AutomaticSliceTexture.cs +40 -0
  293. package/skills/sprite-editor/scripts/GenerateNewSpriteRects.cs +200 -0
  294. package/skills/sprite-editor/scripts/GetTextureSourceImageSize.cs +32 -0
  295. package/skills/sprite-editor/scripts/GetTextureToSlice.cs +55 -0
  296. package/skills/sprite-editor/scripts/GridSliceTexture.cs +40 -0
  297. package/skills/sprite-editor/scripts/IsometricSliceTexture.cs +141 -0
  298. package/skills/sprite-editor/scripts/README.md +134 -0
  299. package/skills/sprite-editor/scripts/SetPivotExample.cs +58 -0
  300. package/skills/sprite-editor/scripts/SpriteToPng.cs +88 -0
  301. package/skills/sprite-segment-3x3grid/SKILL.md +177 -0
  302. package/skills/sprite-segment-3x3grid/references/topic-map.md +37 -0
  303. package/skills/sprite-segment-3x3grid/scripts/SpriteGridAnalysis.cs +119 -0
  304. package/skills/ui/SKILL.md +142 -0
  305. package/skills/ui-imgui/SKILL.md +180 -0
  306. package/skills/ui-imgui/references/gui-elements.md +156 -0
  307. package/skills/ui-imgui/references/templates.md +141 -0
  308. package/skills/ui-ugui/SKILL.md +217 -0
  309. package/skills/ui-ugui/references/layout-and-anchors.md +61 -0
  310. package/skills/ui-ugui/references/scrollview-setup.md +29 -0
  311. package/skills/ui-uitk/SKILL.md +229 -0
  312. package/skills/ui-uitk/references/common-issues.md +74 -0
  313. package/skills/ui-uitk/references/custom-elements.md +241 -0
  314. package/skills/ui-uitk/references/painter2d.md +282 -0
  315. package/skills/ui-uitk/references/pointermanipulator-guide.md +94 -0
  316. package/skills/ui-uitk/references/svg-icons.md +136 -0
  317. package/skills/ui-uitk/references/ui-runtime-binding.md +234 -0
  318. package/skills/ui-uitk/references/uss-guide.md +138 -0
  319. package/skills/unity-cli/CHANGELOG.md +524 -0
  320. package/skills/unity-cli/SECURITY.md +68 -0
  321. package/skills/unity-cli/SKILL.md +160 -0
  322. package/skills/unity-cli/references/auth-license-cloud.md +318 -0
  323. package/skills/unity-cli/references/bootstrap-project.md +177 -0
  324. package/skills/unity-cli/references/build-run-test.md +555 -0
  325. package/skills/unity-cli/references/catalog-plugins.md +86 -0
  326. package/skills/unity-cli/references/ci-recipes.md +76 -0
  327. package/skills/unity-cli/references/cloud-automation.md +819 -0
  328. package/skills/unity-cli/references/cloud-workflows.md +19 -0
  329. package/skills/unity-cli/references/collaboration.md +533 -0
  330. package/skills/unity-cli/references/config-hub.md +239 -0
  331. package/skills/unity-cli/references/diagnostics-maintenance.md +718 -0
  332. package/skills/unity-cli/references/docs-workflow.md +179 -0
  333. package/skills/unity-cli/references/editor-targeting.md +29 -0
  334. package/skills/unity-cli/references/editors-install.md +490 -0
  335. package/skills/unity-cli/references/environment-variables.md +42 -0
  336. package/skills/unity-cli/references/exit-codes.md +47 -0
  337. package/skills/unity-cli/references/global-flags.md +32 -0
  338. package/skills/unity-cli/references/integration-advanced.md +1130 -0
  339. package/skills/unity-cli/references/notes.md +20 -0
  340. package/skills/unity-cli/references/notifications.md +39 -0
  341. package/skills/unity-cli/references/playmode-verification-loop.md +279 -0
  342. package/skills/unity-cli/references/projects-templates.md +997 -0
  343. package/skills/unity-cli/references/scene-editing-preflight.md +25 -0
  344. package/skills/unity-cli/references/setup-and-help.md +54 -0
  345. package/skills/unity-cli/references/version-control.md +612 -0
  346. package/skills/unity-package-management/SKILL.md +169 -0
  347. package/skills/unity-package-management/references/discovering-packages.md +66 -0
  348. package/skills/unity-package-management/references/headless-run.md +31 -0
  349. package/skills/unity-package-management/references/installer-script.md +92 -0
  350. package/skills/unity-package-management/references/select-packages.md +126 -0
  351. package/skills/unity-pipeline/SECURITY.md +17 -0
  352. package/skills/unity-pipeline/SKILL.md +205 -0
  353. package/skills/unity-pipeline/references/csharp-eval.md +23 -0
  354. package/skills/unity-pipeline/references/multiplayer-play-mode.md +103 -0
  355. package/skills/urp-postprocessing/SECURITY.md +16 -0
  356. package/skills/urp-postprocessing/SKILL.md +188 -0
  357. package/skills/urp-postprocessing/references/code-templates.md +150 -0
  358. package/skills/urp-postprocessing/references/effect-reference.md +86 -0
  359. package/skills/validate-urp-render-graph-renderer-feature/SKILL.md +92 -0
  360. package/skills/validate-urp-render-graph-renderer-feature/references/validation-checklist.md +179 -0
@@ -0,0 +1,8 @@
1
+ # 0. New Integration or Migration?
2
+
3
+ Ask: "Are you starting a new LevelPlay integration, migrating an existing one (from an older SDK version or from Unity Ads), or troubleshooting an existing setup?"
4
+
5
+ - **New integration**: proceed to Step 1.
6
+ - **Migration** (SDK upgrade, replacing IronSource.Agent APIs, migrating from Unity Ads, or fixing a Maven Central Android build failure): Read `references/migration-sdk-9.md`. Ask which of the five scenarios applies — A = SDK upgrade, B = init API migration, C = ad unit API migration, D = Maven Central build failure, E = Unity Ads migration — then follow the matching scenario. After applying all code changes, work through the Migration Completeness Checklist (section C5 of the reference) — it catches requirements that a line-by-line translation misses because the legacy code had no equivalent line. Then ask the user to check the Unity console for compilation errors, and fix any that appear before presenting results. Do not block or keep retrying if you cannot see the console: list the files you changed, say what to look for, and continue.
7
+ - **Troubleshooting or adding to an existing setup** (ATT, GDPR, ILRD, Test Suite, build errors on a fresh integration, or adding a feature to an already-working integration): Identify what the user needs and go directly to the relevant step or reference from "When to Read Detailed References."
8
+
@@ -0,0 +1,4 @@
1
+ # 1. Verify Unity Environment
2
+
3
+ Check that the user is working in a Unity project by verifying Assets/ and ProjectSettings/ directories exist. If not in a Unity project, instruct the user to navigate to their Unity project directory. If those directories are not found but the user believes they are in the right place, ask: "It looks like you may not be at your project root — can you navigate to the top-level folder of your Unity project and confirm you can see Assets/ and ProjectSettings/ there?"
4
+
@@ -0,0 +1,15 @@
1
+ # 10. Testing and Validation
2
+
3
+ LevelPlay provides two validation approaches for different stages of development. **Full detail — setup, callback-behavior tables, the Test Suite initializer template, and the iOS coroutine placement — is in `references/testing-and-validation.md`. Read it when the user is testing.**
4
+
5
+ **Early Development: Mock Ads in Unity Editor.** For rapid iteration and callback testing. Pressing Play in the Editor provides mock ads automatically — but **only if the active build target is Android or iOS** (Standalone/PC/Mac returns no ads; this is the most common "no ads in Editor" cause — see Step 4). Mock ads work with any App Key/Ad Unit ID, but recommend real credentials so they aren't forgotten. Mock ads fire most callbacks (OnAdLoaded/Displayed/Rewarded/Closed) but NOT failure, click, or impression/ILRD callbacks — so test error handling on device. Details and the full callback table: `references/testing-and-validation.md`.
6
+
7
+ **Integration Validation: LevelPlay Test Suite (Recommended).** The primary method for comprehensive validation against real ad networks on device. Key rules that must not change:
8
+ - `LevelPlay.SetMetaData("is_test_suite", "enable");` **before** `LevelPlay.Init()`
9
+ - `LevelPlay.LaunchTestSuite();` inside `OnInitSuccess`
10
+ - **Requires a device build** (does not work in the Editor); enable **Development Build** so SDK logs are visible; use the production App Key.
11
+ - **Remove both lines before production release.**
12
+ - iOS coroutine initializer: put `SetMetaData` as the first line inside `InitializeLevelPlay()` before `Init` (not in `Start()`).
13
+
14
+ Add the two lines to the existing `LevelPlayInitializer.cs` (don't create a new file). The full setup, the standalone template for users without an initializer, and the testing workflow are in `references/testing-and-validation.md`.
15
+
@@ -0,0 +1,12 @@
1
+ # 2. Understand Business Goals
2
+
3
+ Before implementing ad units, determine the user's optimization priorities to recommend the appropriate ad unit strategy. Ask:
4
+
5
+ **"What's your primary optimization goal?"**
6
+ - **Revenue-focused**: Maximize ad revenue and impression opportunities
7
+ - **UX-focused**: Prioritize gameplay flow and user satisfaction
8
+ - **Balanced**: Optimize for both revenue and UX
9
+ - **Not sure yet**: Default to Balanced and proceed. At Step 8, briefly note you're using Balanced since they were unsure, and invite them to indicate a different preference now that they've seen the format options.
10
+
11
+ Record this answer for later strategy recommendation in Step 8.
12
+
@@ -0,0 +1,55 @@
1
+ # 3. Install LevelPlay SDK via UPM
2
+
3
+ **If the SDK looks already installed:** do not take that on trust, and do not ask the user to read
4
+ the Package Manager window for you. Read `Packages/packages-lock.json` and look for
5
+ `com.unity.services.levelplay`. If it is there, say which version resolved and proceed to Step 4.
6
+ If it is not, it is not installed, whatever the conversation so far has assumed: continue with the
7
+ install below.
8
+
9
+ Guide through installing the LevelPlay Unity package using Unity Package Manager:
10
+
11
+ 1. Open Unity → Window > Package Manager
12
+ 2. Select Unity Registry dropdown or Services tab
13
+ 3. In the Package Manager search bar, type **Ads Mediation**
14
+ 4. Confirm the package name matches exactly: the correct package is titled **Ads Mediation**. Do not install either of these packages:
15
+ - **Ads IAP Mediation Adaptor** (a separate in-app purchases package, not the LevelPlay SDK)
16
+ - **Advertisement Legacy** (a deprecated package, not compatible with the current LevelPlay integration)
17
+ 5. Click Install button
18
+ 6. Wait for package to download and import
19
+
20
+ When you install the package, you may see a prompt to install Mobile Dependency Resolver — click **Import** if it appears. This is covered in more detail in the next step.
21
+
22
+ **Then verify it resolved, by reading the project rather than by asking.** The package id is
23
+ `com.unity.services.levelplay` (its Package Manager display name is **Ads Mediation**; the id is
24
+ what the project files record). Check both files:
25
+
26
+ - **`Packages/manifest.json`** lists what the project *asks for*. `com.unity.services.levelplay`
27
+ must appear under `dependencies`.
28
+ - **`Packages/packages-lock.json`** records what Unity actually *resolved*. The same id must appear
29
+ here too, with a concrete version. This is the file that answers "did it install", and it is the
30
+ one to trust.
31
+
32
+ Both are plain JSON in the project, so this check needs no Editor, no CLI, and nothing from the
33
+ user. Read them.
34
+
35
+ > **This is a hard gate, not a formality.** Do not write, generate, or paste a single line of
36
+ > LevelPlay code until `com.unity.services.levelplay` is present in `packages-lock.json`. Skipping
37
+ > ahead produces code that looks correct, compiles nowhere, and fails with `CS0246` on every
38
+ > LevelPlay symbol. If the id is missing from `manifest.json`, the install never happened. If it is
39
+ > in `manifest.json` but not `packages-lock.json`, Unity has not resolved it yet: the Editor may
40
+ > still be importing, or resolution failed. Say which of the two you found, and stop.
41
+ >
42
+ > **If you added the id to `manifest.json` yourself and no Editor has run since, the lock file will
43
+ > not show it yet. That is expected, not a failure.** Never write the entry into
44
+ > `packages-lock.json` yourself: that file is Unity's resolution output, hand-editing it is what the
45
+ > migration guide forbids, and an entry you wrote is a false "resolved" signal rather than a passed
46
+ > gate. Ask the user to open the Unity Editor so resolution runs, then re-read the file. If no
47
+ > Editor is available at all, say so and stop there rather than manufacturing the evidence.
48
+
49
+ Report the resolved version you found. Do not report "installed" on the strength of the Package
50
+ Manager window, a previous turn, or a user's recollection.
51
+
52
+ **Network Manager:** Access **Ads Mediation > Network Manager** at any time to install additional ad network adapters and check for SDK and adapter updates.
53
+
54
+ For iOS builds, note that SKAdNetwork configuration will be needed later (reference `references/ios-setup.md` when ready for iOS builds).
55
+
@@ -0,0 +1,22 @@
1
+ # 4. Resolve Native Dependencies (Critical)
2
+
3
+ **Critical for Android/iOS builds**: LevelPlay requires native dependency resolution. Without this, code compiles in Unity Editor but fails during platform builds with gradle (Android) or CocoaPods (iOS) errors.
4
+
5
+ **Platform checkpoint — ask before proceeding:** "Which platform(s) are you targeting — iOS, Android, or both?" Record this. It determines which dependency resolution steps apply here, whether ATT is required (Step 6.5), and which testing steps are relevant (Step 10).
6
+
7
+ **Set the active build target now.** Switch the project's active build target to Android or iOS via **File ▸ Build Profiles** (called **Build Settings** before Unity 6) → **Switch Platform**. This is required before any testing: LevelPlay only runs on Android/iOS targets, so even mock ads in the Editor (Step 10) do nothing while the target is Standalone/PC/Mac.
8
+
9
+ **Resolve dependencies for the target platform(s).** LevelPlay requires native Android/iOS libraries that Unity's package manager alone doesn't handle; a dependency manager (MDR, UEDM, or EDM4U) bridges this gap. The full procedure — checking for an existing dependency manager, resolving on Android vs iOS, installing one if the user has none, verification, and the older-version Custom Main Gradle Template — is in **`references/dependency-resolution.md`**. Walk the user through it now, and **if targeting both Android and iOS, complete resolution for both before proceeding.**
10
+
11
+ Ask: "Have you run dependency resolution for your target platform(s) without errors?"
12
+
13
+ **Android API 33+ (Android 13+):** declare the AD_ID permission in AndroidManifest.xml:
14
+
15
+ ```xml
16
+ <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
17
+ ```
18
+
19
+ Without it, advertising ID access fails on Android 13+ devices. Details in `references/dependency-resolution.md`.
20
+
21
+ **If dependency resolution fails**, see `references/troubleshooting.md` for gradle and CocoaPods error guidance.
22
+
@@ -0,0 +1,18 @@
1
+ # 5. Get App Key and Ad Unit IDs
2
+
3
+ Before initializing LevelPlay, collect credentials from the LevelPlay dashboard.
4
+
5
+ **Dashboard:** https://platform.ironsrc.com/
6
+
7
+ **New to LevelPlay?** Set up your app and ad units first:
8
+ - [Add your app](https://docs.unity.com/en-us/grow/levelplay/platform/get-started/add-app)
9
+ - [Create ad units](https://docs.unity.com/en-us/grow/levelplay/platform/get-started/ad-units)
10
+
11
+ **App Key:** In the dashboard, go to **Apps** in the left sidenav → find your app → copy the alphanumeric string displayed under the app title.
12
+
13
+ **Ad Unit IDs:** Go to **Ad units** in the left sidenav → select your app → copy the ID for each format you plan to implement (Rewarded, Interstitial, Banner).
14
+
15
+ **Note:** You need your App Key now for initialization (Step 7). Ad Unit IDs are only needed at Step 9 — if you haven't decided which ad formats to implement yet, just copy your App Key for now and return here after Step 8.
16
+
17
+ Keep both accessible — you'll need them in the next steps.
18
+
@@ -0,0 +1,51 @@
1
+ # 6.5. Privacy & Regulation Settings (If Required)
2
+
3
+ > **Note:** This skill provides technical integration guidance, including for LevelPlay's privacy APIs. It is not legal advice, and it does not determine which laws apply to your app — that depends on your users, your data practices, and your distribution. Consult your own legal counsel, and refer to [Regulation Advanced Settings for Unity](https://docs.unity.com/en-us/grow/levelplay/sdk/unity/regulation-advanced-settings) for the authoritative LevelPlay documentation.
4
+
5
+ Ask the user: "Do you need to configure privacy settings for GDPR, CCPA/CPRA (or certain state privacy consumer acts), or for child-directed apps?"
6
+
7
+ **If YES to any:**
8
+
9
+ Privacy settings must be configured **BEFORE** SDK initialization. See `references/privacy-settings.md` for the complete implementation guide (UI, consent management, combined regulations, and the full network key list).
10
+
11
+ **GDPR — the correct API depends on the user's SDK version** (check in **Ads Mediation > Network Manager**):
12
+
13
+ **SDK 9.5.0+** — global consent boolean:
14
+ ```csharp
15
+ using Unity.Services.LevelPlay;
16
+
17
+ // true = user has granted consent, false = user has not consented
18
+ LevelPlayPrivacySettings.SetGDPRConsent(true);
19
+ ```
20
+
21
+ **SDK 9.4.x** — per-network consent dictionary (this is the CURRENT API on 9.4.x, not legacy — it only becomes `[Obsolete]` on 9.5.0+; do not mislabel it as deprecated):
22
+ ```csharp
23
+ using Unity.Services.LevelPlay;
24
+ using System.Collections.Generic;
25
+
26
+ // Add an entry for each ad network you have installed
27
+ LevelPlayPrivacySettings.SetGDPRConsents(new Dictionary<string, bool> {
28
+ { "UnityAds", true },
29
+ { "IronSource", true }
30
+ // See references/privacy-settings.md for the full network key list
31
+ });
32
+ ```
33
+
34
+ If neither API compiles, your Unity package/SDK may be below 9.4.0 (legacy) — recommend upgrading via **Ads Mediation > Network Manager**. If the user cannot upgrade, the legacy `LevelPlay.SetConsent(bool)` API is documented in `references/privacy-settings.md`.
35
+
36
+ **CCPA (SDK 9.4.0+):**
37
+ ```csharp
38
+ LevelPlayPrivacySettings.SetCCPA(true); // User opted out of data sale
39
+ ```
40
+
41
+ **COPPA (SDK 9.4.0+):**
42
+ ```csharp
43
+ LevelPlayPrivacySettings.SetCOPPA(true); // Child-directed app
44
+ ```
45
+
46
+ If CCPA or COPPA fails to compile, upgrade your Unity package/SDK via **Ads Mediation > Network Manager**. Call all of these BEFORE `LevelPlay.Init()` in Step 7.
47
+
48
+ **For iOS builds — required regardless of privacy regulations above:** Also implement App Tracking Transparency (ATT) before proceeding to Step 7. Apple requires ATT authorization before your app tracks users or accesses the device's advertising identifier on iOS 14.5+. Request ATT authorization before calling `LevelPlay.Init()` — this is both an Apple platform requirement and necessary for personalized ads (which also affects fill rate). See `references/ios-setup.md` for the ATT implementation code.
49
+
50
+ **If NO privacy regulations and not targeting iOS:** Skip this step and proceed to Step 7.
51
+
@@ -0,0 +1,16 @@
1
+ # 6. Configure AdMob Keys (If Using AdMob Network)
2
+
3
+ **When to use**: Only if using AdMob as a mediation network adapter in LevelPlay.
4
+
5
+ If using AdMob, configure platform-specific app keys in Unity Editor:
6
+
7
+ **Access**: Ads Mediation > Developer Settings > LevelPlay Mediation Settings
8
+
9
+ **Configuration:**
10
+ - **Android App Key**: AdMob Android app key
11
+ - **iOS App Key**: AdMob iOS app key
12
+
13
+ This configuration is required for AdMob to work as a mediation network in LevelPlay.
14
+
15
+ **Troubleshooting**: If you don't see the 'Ads Mediation' menu in Unity Editor, verify the Ads Mediation package is installed (Step 3) and restart Unity Editor.
16
+
@@ -0,0 +1,50 @@
1
+ # 7. Initialize LevelPlay SDK
2
+
3
+ **Installation checkpoint:**
4
+
5
+ **First, re-read `Packages/packages-lock.json` and confirm `com.unity.services.levelplay` is there.**
6
+ Do this every time you reach this point, even if Step 3 already passed earlier in the conversation.
7
+ It costs one file read, and it is the only item here you can settle without the user. An earlier
8
+ turn saying the package was installed is not evidence that it is: this check exists because the
9
+ install step is the one most often skipped, and the resulting code fails with `CS0246` on every
10
+ LevelPlay symbol. If the id is absent, go back to Step 3 and do not write initialization code.
11
+
12
+ Then confirm the remaining prerequisites with the user, which are the ones no file can answer.
13
+ **If the user confirmed they are not using AdMob, omit the Step 6 item.** If Step 4 was already
14
+ confirmed in this conversation, skip that item and ask only about Step 5 and Step 6 (if AdMob).
15
+
16
+ "Please confirm these are working correctly:
17
+ - Step 4: Have you run dependency resolution for your target platform(s) without errors?
18
+ - Step 5: Do you have your App Key copied from the LevelPlay dashboard?
19
+ - Step 6 (only if using AdMob): Have you configured AdMob keys in Unity Editor settings?
20
+
21
+ Verify these are working before proceeding."
22
+
23
+ **If the package check failed or they answer NO or are unsure:**
24
+ - Package id absent from `packages-lock.json`: code will show `CS0246` namespace errors → Direct to Step 3. This one you established yourself; do not ask the user to overrule it.
25
+ - Missing Step 4: Code compiles but Android/iOS builds will fail → Direct to Step 4
26
+ - Missing Step 5: They won't have credentials to initialize → Direct to Step 5
27
+ - Do not provide C# code until they confirm all steps are complete
28
+
29
+ **If they answer YES:**
30
+ - **Optional — Analytics: ILRD Wiring.** Ask this question verbatim — do not summarize or rephrase it: "Do you use an analytics or attribution platform (Firebase, AppsFlyer, Adjust, Singular, or custom backend) that needs ad revenue data? If yes, the init script will include a logging stub for Impression Level Revenue (ILRD) — 3 lines of code, no analytics platform setup required yet. (Yes / No / Not sure — defaults to yes)" Record the answer.
31
+ - Proceed with initialization code.
32
+
33
+ LevelPlay SDK must be initialized before loading or showing any ads. Initialization should happen early in the application lifecycle.
34
+
35
+ **Ask how they want to handle initialization. Present all four options exactly as listed — do not condense or omit any:**
36
+ 1. Create a new dedicated script for LevelPlay initialization
37
+ 2. Add to an existing initialization/manager script they already have
38
+ 3. Create a new LevelPlay script that your existing manager references
39
+ 4. Just show me the initialization code — I'll decide how to integrate it
40
+
41
+ **Full code for each option is in `references/initialization-api.md` (Code Organization Options).** Behavior that must not change:
42
+ - **Option 1 (new script):** If ATT was set up in Step 6.5 (iOS), use the `LevelPlayInitializer.cs` from `references/ios-setup.md` Part 3 (the `IEnumerator Start()` coroutine variant) instead of the plain template.
43
+ - **Option 4 (just the code):** provide the complete Option 1 initialization class as a standalone snippet — do NOT create files or add Inspector/GameObject setup steps — with the note: "save it as `LevelPlayInitializer.cs`, attach it to a persistent GameObject in your first scene, and set the App Key field in the Inspector."
44
+
45
+ **ILRD wiring (if the user answered Yes or Not Sure).** The correct approach depends on the SDK version (check in **Ads Mediation > Network Manager**):
46
+ - **SDK 9.5.0+ (current):** add nothing to the initializer — ILRD is delivered per ad instance via `OnAdImpressionDataReady`, wired when each ad is created in Step 9. The global `LevelPlay.OnImpressionDataReady` event is **deprecated on 9.5.0+ and generates a compiler warning** — do not use it.
47
+ - **SDK 9.4.x and earlier:** subscribe to the global `LevelPlay.OnImpressionDataReady` event **before** `LevelPlay.Init()`, add a logging stub, and unsubscribe in `OnDestroy()`. On the iOS coroutine initializer, place the subscription inside `InitializeLevelPlay()` immediately before `LevelPlay.Init(appKey)`.
48
+
49
+ The exact wiring code for each option (including the iOS coroutine placement) is in `references/initialization-api.md` (Version-Aware ILRD Init Wiring). ILRD callbacks do not fire with mock ads — a device build is needed to verify (see Step 10). For advanced options (user ID, segmentation, consent management), see `references/initialization-api.md`.
50
+
@@ -0,0 +1,16 @@
1
+ # 8. Recommend Ad Unit Strategy
2
+
3
+ Based on the optimization goal identified in Step 2, recommend an ad unit strategy.
4
+
5
+ **Recall the user's optimization goal from Step 2.** If the conversation has been long or the answer is unclear, confirm: "Earlier you mentioned your optimization goal. To confirm, are you primarily focused on revenue, user experience, or a balance of both?"
6
+
7
+ **Map the answer to a strategy** and give a brief recommendation (full detail, benchmarks, and placement guidance are in `references/best-practices.md` under "Ad Format Strategy by Goal"):
8
+
9
+ - **Revenue-focused** → **Revenue Strategy.** Rewarded (primary monetization, multiple high-value moments) → Interstitial (secondary; at transitions; frequency cap 3–5 min) → Banner (persistent during gameplay). Bid floors are an optional revenue lever configured in Step 9. Implementation priority: **Rewarded → Interstitial → Banner**.
10
+ - **UX-focused** → **UX Strategy.** Rewarded only, user-initiated (explicit opt-in), high-value rewards, **no forced ads, ever**. Interstitials optional/sparingly at session boundaries only; banners generally avoided or menu-only. Implementation priority: **Rewarded only, or Rewarded → (optional) Interstitial**.
11
+ - **Balanced** → **Balanced Strategy.** Rewarded (2–3 strategic placements) → Interstitial (moderate; natural breakpoints; frequency cap 5–7 min) → Banner (selective; menus/low-attention). Implementation priority: **Rewarded → Interstitial → Banner (selective)**.
12
+ - **"Not sure yet"** (from Step 2) → use the **Balanced Strategy**, then add: "Since you weren't sure of your goal earlier, I've gone with the Balanced approach — if you'd prefer to lean more toward revenue or user experience now that you've seen the options, just say so."
13
+ - If still unclear, ask: "Would you prioritize revenue, user experience, or a balance of both?"
14
+
15
+ The next step asks which ad formats to implement from this priority list. If the user wants a different order than recommended, accommodate that preference.
16
+
@@ -0,0 +1,66 @@
1
+ # 9. Implement Ad Units
2
+
3
+ **Read `references/best-practices.md` first** — its "Code Generation Guidelines (Step 9)" section carries the general ad lifecycle, the per-organization-approach code-gen rules, the always-include requirements (MonoBehaviour, `DestroyAd()` in `OnDestroy()`, the placement-capping show-path check (when placements are used), event unsubscription, null checks, error handling), and the bid-floor wiring examples. Incorporate those patterns into all ad implementations.
4
+
5
+ **Implementation checkpoint:**
6
+
7
+ "Before providing ad implementation code, please confirm:
8
+ - Did you complete SDK initialization in Step 7?
9
+ - Did you receive the 'LevelPlay SDK initialized successfully' log message in your Unity console?
10
+
11
+ Verify initialization is working before proceeding with ad units."
12
+
13
+ **If they answer NO or are unsure:** direct back to Step 7 and do not provide ad implementation code until initialization is confirmed working.
14
+
15
+ **Ad format checkpoint — ask before generating any code:** "Which ad formats do you want to implement? Rewarded, Interstitial, Banner, or a combination?" Only implement the formats the user selects. They can add more formats later using the 'Adding More Ad Formats Later' section.
16
+
17
+ **First, ask the user how they want to organize the ad code. Do not generate any code until they have answered:**
18
+
19
+ "How would you like to structure your ad implementation?"
20
+
21
+ 1. **Separate manager scripts for each ad format** - Create individual scripts like `RewardedAdManager.cs`, `InterstitialAdManager.cs`, `BannerAdManager.cs` (good for larger projects, clear separation of concerns)
22
+
23
+ 2. **One unified AdManager script** - Create a single `AdManager.cs` that handles all ad formats (simpler, everything in one place)
24
+
25
+ 3. **Just show me the code snippets** - Provide implementation code without wrapping it in specific files, so you can integrate it however you prefer
26
+
27
+ 4. **I already have ad manager code** - Review and help fix/update existing implementation
28
+
29
+ Based on their answer, adapt your response accordingly (see the code-gen guidelines in `references/best-practices.md`).
30
+
31
+ **If the user already has ad code (e.g., an existing manager script), ask to see it before generating any** — so you can provide targeted fixes rather than new code from scratch. This applies regardless of which organization option they picked (Option 4 is specifically for reviewing existing code, but the same "show me your code first" applies whenever the user mentions they already have some).
32
+
33
+ **Then present the optional bid floor feature (skip for Option 4 — review existing code instead):**
34
+
35
+ Present bid floor ranges only for the formats the user is implementing in this session. Reference starting ranges: Rewarded: $0.50–$2.00 | Interstitial: $0.20–$1.00 | Banner: $0.05–$0.20. Include only the ranges for formats being implemented.
36
+
37
+ "**Optional — Advanced: Bid Floors**
38
+
39
+ Most publishers skip this initially and add it once they have real dashboard data. You can safely skip now and return to it later.
40
+
41
+ If you'd like to set bid floors now: a bid floor sets a minimum bid price (USD) per ad unit — it raises your average eCPM at the cost of lower fill rate. Starting ranges:
42
+ [ranges for formats being implemented]
43
+
44
+ Reply with values per format, or just say 'skip' — you can add them any time."
45
+
46
+ **Record the answer per format.** Wire `Config.Builder().SetBidFloor(...)` into the ad construction for any format where a value was provided; formats marked 'skip' use the basic constructor (see the bid-floor examples in `references/best-practices.md`).
47
+
48
+ **If they choose Option 4 (existing code):**
49
+ - Ask: "Please share your existing ad manager code for review" and wait for it.
50
+ - Analyze the implementation: whether they use the current LevelPlay Ad Unit API (LevelPlayRewardedAd, LevelPlayInterstitialAd, LevelPlayBannerAd), whether they use **deprecated IronSource.Agent APIs**, proper callback registration/unsubscription, and missing error handling or memory leaks.
51
+ - Provide specific guidance:
52
+ - If using deprecated APIs: "You're using the old IronSource.Agent API. Here's how to migrate to the new LevelPlay Ad Unit API:" (full migration detail in `references/migration-sdk-9.md` — Scenario B for init, Scenario C per ad format including the C5 completeness checklist)
53
+ - If using current APIs with issues: "Your implementation looks good but I noticed [specific issues]. Here's how to fix them:"
54
+ - If implementation is correct: "Your implementation looks solid. Which additional ad formats would you like to add?"
55
+ - Offer fixes as code snippets or suggest refactoring. When adding new formats after review, present the bid floor prompt scoped to those new formats only, confirm whether to match their existing organization pattern or use a new one, then follow the same guidelines as Options 1–3.
56
+
57
+ For each ad format, follow the implementation guidelines in the detailed references:
58
+
59
+ - **Rewarded ads**: See `references/rewarded-api.md`
60
+ - **Interstitial ads**: See `references/interstitial-api.md`
61
+ - **Banner ads**: See `references/banner-api.md`
62
+
63
+ **Impression Level Revenue Tracking (version-aware):** See `references/ilrd-api.md` to forward impression data to the analytics platform (Firebase, AppsFlyer, Adjust, Singular, or custom backend).
64
+ - **SDK 9.5.0+ (current):** subscribe to each ad object's `OnAdImpressionDataReady` event right after you create it (and unsubscribe in `OnDestroy()`). Add this to every ad manager you generate — it is the correct ILRD path in 9.5.0+.
65
+ - **SDK 9.4.x and earlier:** ILRD uses the single global `LevelPlay.OnImpressionDataReady` event, wired in the init script (Step 7). If the user answered Yes/Not Sure in Step 7, it is already wired. If they said "No" and want it now, subscribe to `LevelPlay.OnImpressionDataReady` **before** the existing `LevelPlay.Init()` call.
66
+
@@ -0,0 +1,222 @@
1
+ # LevelPlay Testing and Validation
2
+
3
+ Detailed guidance for the two validation approaches referenced from Step 10 of SKILL.md: mock ads in
4
+ the Unity Editor (early development) and the LevelPlay Test Suite (integration validation on device).
5
+ Read this when the user is testing their integration, asks how mock ads work, or is setting up the
6
+ Test Suite.
7
+
8
+ ## Contents
9
+ - [Early Development: Mock Ads in Unity Editor](#early-development-mock-ads-in-unity-editor)
10
+ - [Mock Ad Callback Behavior](#mock-ad-callback-behavior)
11
+ - [Mock Ads Limitations](#mock-ads-limitations)
12
+ - [Integration Validation: LevelPlay Test Suite](#integration-validation-levelplay-test-suite)
13
+ - [Test Suite Setup](#test-suite-setup)
14
+ - [Test Suite Initializer Template](#test-suite-initializer-template)
15
+ - [Testing Workflow](#testing-workflow)
16
+
17
+ ## Early Development: Mock Ads in Unity Editor
18
+
19
+ For early iteration and callback testing, use **mock ads** in Unity Editor. When you press Play in the
20
+ Editor, Unity provides mock ads automatically — but only if the active build target is Android or iOS
21
+ (see the requirement below).
22
+
23
+ > **Required: set the active build target to Android or iOS first.** Mock ads (and the LevelPlay SDK
24
+ generally) do **not** work while the active build target is Standalone/PC/Mac — which is the default
25
+ for new desktop projects. On a non-mobile target the SDK runs as an "unsupported platform" and returns
26
+ no ads, so `Init()` and ad loads will appear to do nothing in the Editor. Switch via **File ▸ Build
27
+ Profiles** (called **Build Settings** before Unity 6) → select **Android** or **iOS** → **Switch
28
+ Platform**, then press Play. If mock ads never appear in the Editor, this is the most likely cause.
29
+
30
+ **How it works:**
31
+
32
+ Once the build target is Android or iOS, pressing Play in the Editor provides mock ads automatically.
33
+ Mock ads work with ANY App Key and Ad Unit ID values (including dummy values like "test" or "editor").
34
+ However, **recommend using real App Key and real Ad Unit IDs** from the LevelPlay dashboard so you don't
35
+ forget to update them before building to device.
36
+
37
+ **Example setup (works in both Editor and device builds):**
38
+
39
+ The same initialization code you wrote in Step 7 works in both Editor (with mock ads) and device builds
40
+ (with real ads). For example:
41
+
42
+ ```csharp
43
+ // Initialize with your actual App Key (replace "abc123..." with yours)
44
+ // Mock ads work with any value, but use your real key to avoid forgetting to update it later
45
+ LevelPlay.Init("abc123youractualappkey");
46
+ ```
47
+
48
+ Example for rewarded ads (works in both Editor and device):
49
+ ```csharp
50
+ // In OnInitSuccess callback:
51
+ // Use your real ad unit ID from LevelPlay dashboard (replace "12345..." with yours)
52
+ // Mock ads work with any value, but use your real IDs to avoid forgetting to update them later
53
+ LevelPlayRewardedAd rewardedAd = new LevelPlayRewardedAd("12345youractualadunitid");
54
+ rewardedAd.OnAdLoaded += OnAdLoaded;
55
+ rewardedAd.OnAdRewarded += OnAdRewarded;
56
+ rewardedAd.LoadAd();
57
+ ```
58
+
59
+ **Key points:**
60
+ - **Mock ads work with any App Key/Ad Unit ID values** (you can even use "test" or "editor")
61
+ - **Recommended: Use your real credentials** from Step 5 to avoid forgetting to update them later
62
+ - **Mock ads appear automatically** when testing in Unity Editor
63
+ - **Real ads appear automatically** when building to device
64
+ - **Same code works everywhere** - no switching or conditional compilation needed
65
+ - **Android API 33+**: If targeting Android 13+ devices, verify you've added the AD_ID permission to AndroidManifest.xml (see Step 4)
66
+
67
+ **What mock ads validate:**
68
+ - Ad integration flow works correctly
69
+ - Most callbacks fire as expected (see callback behavior below)
70
+ - Ad loading, showing, and closing logic
71
+ - Ad positioning and layout (for banners)
72
+ - Basic ad logic and state management
73
+
74
+ ## Mock Ad Callback Behavior
75
+
76
+ Mock ads in Unity Editor fire most callbacks, but not all:
77
+
78
+ **Callbacks that FIRE:**
79
+ - `OnAdLoaded` - Always fires after LoadAd()
80
+ - `OnAdDisplayed` - Fires when ShowAd() is called
81
+ - `OnAdRewarded` - Fires for rewarded ads (with test reward)
82
+ - `OnAdClosed` - Fires when mock ad is dismissed
83
+
84
+ **Callbacks that DON'T fire:**
85
+ - `OnAdLoadFailed` - Mock ads always succeed loading
86
+ - `OnAdDisplayFailed` - Mock ads always succeed showing
87
+ - `OnAdClicked` - Mock ads don't simulate user clicks
88
+ - `OnAdExpanded` / `OnAdCollapsed` - Banner expand/collapse not simulated
89
+ - `OnAdLeftApplication` - No real ad redirect in Editor
90
+ - `OnAdInfoChanged` - Mock ads don't update ad info dynamically
91
+ - Impression data events (ILRD — `OnAdImpressionDataReady` on 9.5.0+, or `LevelPlay.OnImpressionDataReady` on 9.4.x and earlier) - No impression data generated in Editor
92
+
93
+ This means you can test your happy-path flow in Editor, but must test error handling on real devices.
94
+
95
+ **Note on SDK initialization in the Editor:** `LevelPlay.OnInitSuccess` may not fire in all SDK
96
+ configurations when running in the Unity Editor. If your initialization callback doesn't trigger and
97
+ your ad objects never load as a result, try creating them directly in `Start()` after calling
98
+ `LevelPlay.Init()` rather than waiting for the callback — mock ads will appear even without
99
+ `OnInitSuccess` firing.
100
+
101
+ ## Mock Ads Limitations
102
+ - Don't simulate network latency or failures
103
+ - Don't test real ad network behavior
104
+ - Don't validate reward logic server-side
105
+ - Placeholder UI instead of real ad creatives
106
+ - Error callbacks never fire
107
+
108
+ **Best for**: Early development, rapid iteration on ad logic, callback testing
109
+
110
+ ## Integration Validation: LevelPlay Test Suite
111
+
112
+ The **Test Suite** is the primary method for comprehensive validation. It tests your integration with
113
+ real ad networks on device.
114
+
115
+ **What Test Suite validates:**
116
+ - All ad formats (Rewarded, Interstitial, Banner) with real ads
117
+ - SDK initialization with production App Key
118
+ - All callbacks fire correctly in production environment
119
+ - Real ad network behavior, latency, and edge cases
120
+ - Ad rendering and user interaction flows
121
+
122
+ **Before running the Test Suite:**
123
+ - **Unity Ads is pre-installed** — the Ads Mediation package includes the Unity Ads adapter by default, so you have at least one network ready without any additional setup. For ads to fill on device, verify your LevelPlay dashboard has active instances configured for your ad units.
124
+ - **Enable Development Build** in **Build Profiles** (called **Build Settings** in Unity versions before Unity 6) before building to device. Without it, SDK console output won't be visible, making it very difficult to diagnose issues if something doesn't work as expected.
125
+ - **Expect an ATS warning on iOS.** Integration validation reports "App Transport Security settings MISSING" when the app uses the default ATS configuration, which is the recommended setup. Ignore it; don't add `NSAllowsArbitraryLoads` to make it go away. See [ios-setup.md](ios-setup.md#app-transport-security-ats-configuration).
126
+
127
+ ## Test Suite Setup
128
+
129
+ **Setup (requires device build):**
130
+
131
+ Add these two lines to your existing `LevelPlayInitializer.cs` — do not create a new file or replace
132
+ your existing initializer:
133
+
134
+ 1. Before `LevelPlay.Init(appKey)` — at the top of `Start()`:
135
+ ```csharp
136
+ LevelPlay.SetMetaData("is_test_suite", "enable");
137
+ ```
138
+
139
+ 2. Inside your `OnInitSuccess` callback:
140
+ ```csharp
141
+ LevelPlay.LaunchTestSuite();
142
+ ```
143
+
144
+ > **iOS path (`references/ios-setup.md` Part 3 initializer):** `Start()` is a coroutine and
145
+ `LevelPlay.Init(appKey)` lives inside `InitializeLevelPlay()`, not `Start()`. Put
146
+ `LevelPlay.SetMetaData("is_test_suite", "enable");` as the **first line inside `InitializeLevelPlay()`,
147
+ before `LevelPlay.Init(appKey)`** — do NOT put it in `Start()` and do NOT put it after `Init`.
148
+ `LaunchTestSuite()` still goes in `OnInitSuccess`. `SetMetaData` must run before `Init` or the Test
149
+ Suite will silently never launch.
150
+
151
+ **Important**: Remove both lines before your production release. Test Suite should only be used during
152
+ development and testing.
153
+
154
+ ## Test Suite Initializer Template
155
+
156
+ **Don't have a `LevelPlayInitializer.cs` yet?** Use this complete template:
157
+
158
+ ```csharp
159
+ using UnityEngine;
160
+ using Unity.Services.LevelPlay;
161
+
162
+ public class LevelPlayInitializer : MonoBehaviour
163
+ {
164
+ [SerializeField] private string appKey;
165
+
166
+ void Awake()
167
+ {
168
+ DontDestroyOnLoad(gameObject);
169
+ }
170
+
171
+ void Start()
172
+ {
173
+ // Enable Test Suite — REMOVE before production release
174
+ LevelPlay.SetMetaData("is_test_suite", "enable");
175
+
176
+ LevelPlay.OnInitSuccess += OnInitSuccess;
177
+ LevelPlay.OnInitFailed += OnInitFailed;
178
+ LevelPlay.Init(appKey);
179
+ }
180
+
181
+ private void OnInitSuccess(LevelPlayConfiguration config)
182
+ {
183
+ Debug.Log("LevelPlay initialized successfully");
184
+ // Launch Test Suite — REMOVE before production release
185
+ LevelPlay.LaunchTestSuite();
186
+ }
187
+
188
+ private void OnInitFailed(LevelPlayInitError error)
189
+ {
190
+ Debug.LogError($"LevelPlay initialization failed: {error.ErrorMessage}");
191
+ }
192
+
193
+ void OnDestroy()
194
+ {
195
+ LevelPlay.OnInitSuccess -= OnInitSuccess;
196
+ LevelPlay.OnInitFailed -= OnInitFailed;
197
+ }
198
+ }
199
+ ```
200
+
201
+ **After creating this script:**
202
+ 1. Attach it to a GameObject in your first scene
203
+ 2. In the Unity Inspector, find the "App Key" field
204
+ 3. Paste your App Key from Step 5 into that field
205
+
206
+ **Key points:**
207
+ - `LevelPlay.SetMetaData("is_test_suite", "enable");` must be called **BEFORE** `LevelPlay.Init()` — if the Test Suite doesn't appear after launch, this is the most likely cause
208
+ - `LevelPlay.LaunchTestSuite();` is called **AFTER** successful initialization (in `OnInitSuccess`)
209
+ - **Requires device build** - Test Suite does not work in Unity Editor
210
+ - Use production App Key, not "editor"
211
+ - Build to Android or iOS device and run the app
212
+ - Test Suite UI will appear automatically after initialization
213
+
214
+ ## Testing Workflow
215
+ 1. Add Test Suite code (SetMetaData before Init, LaunchTestSuite after OnInitSuccess)
216
+ 2. Build to Android or iOS device
217
+ 3. Run the app on device
218
+ 4. Test Suite UI launches automatically
219
+ 5. Follow on-screen instructions to test each ad format
220
+ 6. Verify all ad formats load and callbacks fire correctly
221
+
222
+ **Best for**: Integration validation before production, final testing with real ad networks