@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,604 @@
1
+ # LevelPlay Ad Unit Implementation Best Practices
2
+
3
+ ## Contents
4
+ - [Overview](#overview)
5
+ - [Strategic Framework: Revenue vs UX Optimization](#strategic-framework-revenue-vs-ux-optimization)
6
+ - [Ad Format Strategy by Goal](#ad-format-strategy-by-goal)
7
+ - [Placement Strategy](#placement-strategy)
8
+ - [Implementation Patterns](#implementation-patterns)
9
+ - [Frequency Management](#frequency-management)
10
+ - [Error Handling and Graceful Degradation](#error-handling-and-graceful-degradation)
11
+ - [A/B Testing Considerations](#ab-testing-considerations)
12
+ - [Common Mistakes to Avoid](#common-mistakes-to-avoid)
13
+ - [Platform-Specific Considerations](#platform-specific-considerations)
14
+ - [Success Metrics by Strategy](#success-metrics-by-strategy)
15
+ - [Final Recommendations](#final-recommendations)
16
+ - [Code Generation Guidelines (Step 9)](#code-generation-guidelines-step-9)
17
+
18
+ ## Overview
19
+
20
+ This reference compiles best practices from the LevelPlay enablement playbook, covering strategy selection, placement optimization, and common implementation patterns that drive both revenue and user satisfaction.
21
+
22
+ ## Strategic Framework: Revenue vs UX Optimization
23
+
24
+ ### Understanding the Trade-off
25
+
26
+ Every ad implementation involves a fundamental trade-off between revenue generation and user experience. Your optimization goal should guide every decision.
27
+
28
+ | Optimization Goal | Philosophy | Typical Outcome |
29
+ |-------------------|------------|-----------------|
30
+ | **Revenue-Focused** | Maximize impression opportunities | Higher revenue, potential UX impact |
31
+ | **UX-Focused** | Protect user experience at all costs | Better retention, lower short-term revenue |
32
+ | **Balanced** | Optimize for sustainable long-term value | Moderate revenue with good UX |
33
+
34
+ ### Choosing Your Optimization Goal
35
+
36
+ **Ask yourself:**
37
+ 1. What stage is your app in? (Early = UX focus, Mature = revenue optimization)
38
+ 2. What's your business model? (Ads-only = revenue, Hybrid = balanced)
39
+ 3. What's your competitive landscape? (High competition = UX focus)
40
+ 4. What are your user expectations? (Casual games = more ads tolerated)
41
+
42
+ ## Ad Format Strategy by Goal
43
+
44
+ ### Revenue-Focused Implementation
45
+
46
+ **Goal**: Maximize ad revenue and impression opportunities
47
+
48
+ **Rewarded Ads** (Primary):
49
+ - Implement 3-5 placements across high-value moments
50
+ - Examples: Hints, extra lives, power-ups, bonus currency, skip levels
51
+ - Always keep a rewarded ad loaded and ready
52
+ - Reload immediately after showing
53
+
54
+ **Interstitial Ads** (Secondary):
55
+ - Show at every natural transition point
56
+ - Frequency cap: Every 3-5 minutes of active gameplay
57
+ - Placements: Level complete, game over, returning to menu
58
+ - Load proactively before transitions
59
+
60
+ **Banner Ads** (Tertiary):
61
+ - Show persistently during gameplay
62
+ - Position: Bottom (less intrusive than top)
63
+ - Keep loaded throughout session for continuous impressions
64
+ - Accept some visual clutter for revenue
65
+
66
+ **Expected Outcomes:** *(Industry benchmarks, not LevelPlay-specific)*
67
+ - ✅ 30-50% higher ad revenue
68
+ - ⚠ 5-15% increase in early abandonment
69
+ - ⚠ Lower user satisfaction scores
70
+ - ✅ Strong monetization from engaged users
71
+
72
+ ### UX-Focused Implementation
73
+
74
+ **Goal**: Maintain excellent user experience while monetizing thoughtfully
75
+
76
+ **Rewarded Ads** (Only or Primary):
77
+ - Single placement or 2 maximum
78
+ - User-initiated only (player chooses to watch)
79
+ - High-value rewards that feel generous
80
+ - Never force ads
81
+
82
+ **Interstitial Ads** (Optional, Rare):
83
+ - Only at major session boundaries (returning to menu, closing app)
84
+ - Frequency cap: 10+ minutes or once per session
85
+ - Skip during active gameplay entirely
86
+
87
+ **Banner Ads** (Avoid or Minimize):
88
+ - Show only in menus, never during gameplay
89
+ - If used, small sizes (standard 320x50, not rectangles)
90
+ - Hide during any active user engagement
91
+
92
+ **Expected Outcomes:** *(Industry benchmarks, not LevelPlay-specific)*
93
+ - ⚠ 40-60% lower ad revenue vs revenue-focused
94
+ - ✅ Better user retention and satisfaction
95
+ - ✅ Higher organic growth and word-of-mouth
96
+ - ✅ Premium brand perception
97
+
98
+ ### Balanced Implementation (Recommended for Most Apps)
99
+
100
+ **Goal**: Sustainable monetization with good user experience
101
+
102
+ **Rewarded Ads** (Primary):
103
+ - 2-3 well-chosen placements
104
+ - Focus on moments of high user engagement
105
+ - Make rewards feel valuable but not exploitative
106
+ - Examples: Extra attempts, time skips, premium currency
107
+
108
+ **Interstitial Ads** (Moderate):
109
+ - Natural transition points only (level complete, game over)
110
+ - Frequency cap: Every 5-7 minutes
111
+ - Never interrupt active gameplay
112
+ - Respect user flow
113
+
114
+ **Banner Ads** (Selective):
115
+ - Show in menus and low-attention moments
116
+ - Hide during intense or immersive gameplay
117
+ - Position at bottom with proper UI offset
118
+ - Rotation: Show/hide based on context
119
+
120
+ **Expected Outcomes:** *(Industry benchmarks, not LevelPlay-specific)*
121
+ - ✅ Strong ad revenue (70-85% of revenue-focused approach)
122
+ - ✅ Good user retention
123
+ - ✅ Sustainable long-term monetization
124
+ - ✅ Positive user sentiment
125
+
126
+ ## Placement Strategy
127
+
128
+ ### Identifying Strong Placement Moments
129
+
130
+ **High-value moments** (Best for rewarded ads):
131
+ - Post-victory celebrations
132
+ - Level progression milestones
133
+ - Unlock opportunities
134
+ - User feels positive emotion
135
+
136
+ **Natural transitions** (Good for interstitials):
137
+ - Level complete
138
+ - Game over
139
+ - Returning to main menu
140
+ - Session boundaries
141
+
142
+ **Low-attention periods** (Acceptable for banners):
143
+ - Waiting screens
144
+ - Loading periods
145
+ - Menu browsing
146
+ - Non-interactive moments
147
+
148
+ ### Placement Anti-Patterns (Avoid These)
149
+
150
+ ❌ **Mid-gameplay interruptions**: Never show interstitials during active play
151
+ ❌ **Bait-and-switch**: Don't offer rewards then show unrewarded interstitials
152
+ ❌ **Excessive frequency**: Showing ads every 1-2 minutes frustrates users
153
+ ❌ **Punitive ads**: Using ads as punishment for failure feels manipulative
154
+ ❌ **Blocking progression**: Making ads mandatory to continue playing
155
+ ❌ **Poor timing**: Showing ads right before key moments or cliffhangers
156
+
157
+ ## Implementation Patterns
158
+
159
+ > **Note:** These patterns build on the manager classes defined in `rewarded-api.md` and `interstitial-api.md` (`RewardedAdManager`, `InterstitialAdManager`). They use only those managers' public members — `LoadAd()`, `ShowAd()`, `IsAdReady()`, and (for rewarded) the `OnRewardGranted` hook. Generate the manager classes from those references first so these examples compile.
160
+
161
+ ### Pattern 1: Rewarded Hints System
162
+
163
+ **Use case**: Puzzle or strategy games where hints add value
164
+
165
+ ```csharp
166
+ public class HintSystem : MonoBehaviour
167
+ {
168
+ [SerializeField] private RewardedAdManager adManager;
169
+ [SerializeField] private int hintsAvailable = 3;
170
+
171
+ public void RequestHint()
172
+ {
173
+ if (hintsAvailable > 0)
174
+ {
175
+ // User has free hints remaining
176
+ UseHint();
177
+ hintsAvailable--;
178
+ }
179
+ else
180
+ {
181
+ // Offer ad-based hint
182
+ if (adManager.IsAdReady())
183
+ {
184
+ ShowHintAdOffer();
185
+ }
186
+ else
187
+ {
188
+ ShowHintNotAvailableMessage();
189
+ }
190
+ }
191
+ }
192
+
193
+ private void ShowHintAdOffer()
194
+ {
195
+ // Show dialog: "Watch an ad to get a hint?"
196
+ // If user accepts, subscribe to the reward hook and show the ad.
197
+ adManager.OnRewardGranted = OnHintAdRewardEarned;
198
+ adManager.ShowAd();
199
+ }
200
+
201
+ private void OnHintAdRewardEarned()
202
+ {
203
+ // RewardedAdManager invokes this only after the user earns the reward
204
+ UseHint();
205
+ }
206
+
207
+ private void UseHint()
208
+ {
209
+ // Show hint to player
210
+ Debug.Log("Showing hint");
211
+ }
212
+
213
+ private void ShowHintNotAvailableMessage()
214
+ {
215
+ // Inform user that hints aren't available right now
216
+ Debug.Log("Hints not available at the moment");
217
+ }
218
+ }
219
+ ```
220
+
221
+ **Why this works:**
222
+ - User has free hints first (generous)
223
+ - Ad is optional, not forced
224
+ - Clear value exchange (ad for hint)
225
+ - Graceful handling when ads unavailable
226
+
227
+ ### Pattern 2: Level Transition Interstitial (Frequency Capped)
228
+
229
+ **Use case**: Showing interstitials between levels without annoying users
230
+
231
+ ```csharp
232
+ public class LevelTransitionAds : MonoBehaviour
233
+ {
234
+ [SerializeField] private InterstitialAdManager adManager;
235
+ private int levelsCompletedSinceAd = 0;
236
+ private int levelsRequiredBetweenAds = 3; // Show ad every 3 levels
237
+
238
+ public void OnLevelComplete()
239
+ {
240
+ levelsCompletedSinceAd++;
241
+
242
+ if (levelsCompletedSinceAd >= levelsRequiredBetweenAds)
243
+ {
244
+ ShowInterstitialOpportunistically();
245
+ levelsCompletedSinceAd = 0;
246
+ }
247
+
248
+ ProceedToNextLevel();
249
+ }
250
+
251
+ private void ShowInterstitialOpportunistically()
252
+ {
253
+ // Try to show, but don't wait if not ready
254
+ if (adManager.IsAdReady())
255
+ {
256
+ adManager.ShowAd();
257
+ }
258
+ }
259
+
260
+ private void ProceedToNextLevel()
261
+ {
262
+ // Load next level regardless of ad status
263
+ // Never block user flow waiting for ads
264
+ }
265
+ }
266
+ ```
267
+
268
+ **Why this works:**
269
+ - Frequency capping prevents ad fatigue
270
+ - Opportunistic showing (doesn't block if not ready)
271
+ - User flow never interrupted
272
+ - Predictable pattern users can adapt to
273
+
274
+ ### Pattern 3: Context-Aware Banner Management
275
+
276
+ **Use case**: Showing banners in menus but hiding during gameplay
277
+
278
+ ```csharp
279
+ public class ContextAwareBanners : MonoBehaviour
280
+ {
281
+ [SerializeField] private BannerAdManager bannerManager;
282
+
283
+ public enum AppContext
284
+ {
285
+ MainMenu,
286
+ Playing,
287
+ Paused,
288
+ GameOver
289
+ }
290
+
291
+ private AppContext currentContext;
292
+
293
+ public void SetContext(AppContext newContext)
294
+ {
295
+ currentContext = newContext;
296
+ UpdateBannerVisibility();
297
+ }
298
+
299
+ private void UpdateBannerVisibility()
300
+ {
301
+ switch (currentContext)
302
+ {
303
+ case AppContext.MainMenu:
304
+ case AppContext.GameOver:
305
+ // Show banners in menu contexts
306
+ bannerManager.ShowBanner();
307
+ break;
308
+
309
+ case AppContext.Playing:
310
+ // Hide during active gameplay
311
+ bannerManager.HideBanner();
312
+ break;
313
+
314
+ case AppContext.Paused:
315
+ // Optional: Show or hide based on your preference
316
+ // For UX-focused: Hide
317
+ // For revenue-focused: Show
318
+ bannerManager.ShowBanner();
319
+ break;
320
+ }
321
+ }
322
+ }
323
+ ```
324
+
325
+ **Why this works:**
326
+ - Banners shown only in appropriate contexts
327
+ - Gameplay experience uninterrupted
328
+ - Easy to adjust strategy by changing visibility logic
329
+ - Clean separation of concerns
330
+
331
+ ## Frequency Management
332
+
333
+ ### Time-Based Frequency Capping
334
+
335
+ Implement minimum time intervals between ads:
336
+
337
+ ```csharp
338
+ public class FrequencyManager : MonoBehaviour
339
+ {
340
+ private float minSecondsBetweenInterstitials = 300f; // 5 minutes
341
+ private float lastInterstitialTime = -300f; // Allow first ad immediately
342
+
343
+ public bool CanShowInterstitial()
344
+ {
345
+ float timeSinceLast = Time.realtimeSinceStartup - lastInterstitialTime;
346
+ return timeSinceLast >= minSecondsBetweenInterstitials;
347
+ }
348
+
349
+ public void RecordInterstitialShown()
350
+ {
351
+ lastInterstitialTime = Time.realtimeSinceStartup;
352
+ }
353
+ }
354
+ ```
355
+
356
+ **Recommended intervals:**
357
+ - Revenue-focused: 3-5 minutes
358
+ - Balanced: 5-7 minutes
359
+ - UX-focused: 10+ minutes
360
+
361
+ ### Count-Based Frequency Capping
362
+
363
+ Implement minimum actions between ads:
364
+
365
+ ```csharp
366
+ private int actionsRequiredBetweenAds = 3;
367
+ private int actionsSinceLastAd = 0;
368
+
369
+ public void OnUserAction()
370
+ {
371
+ actionsSinceLastAd++;
372
+
373
+ if (actionsSinceLastAd >= actionsRequiredBetweenAds)
374
+ {
375
+ // Eligible to show ad
376
+ TryShowAd();
377
+ actionsSinceLastAd = 0;
378
+ }
379
+ }
380
+ ```
381
+
382
+ **Examples of "actions":**
383
+ - Levels completed
384
+ - Games played
385
+ - Sessions started
386
+ - Feature uses
387
+
388
+ ## Error Handling and Graceful Degradation
389
+
390
+ ### Always Have a Fallback
391
+
392
+ Never let ad failures block user flow:
393
+
394
+ ```csharp
395
+ public void OnAdLoadFailed()
396
+ {
397
+ // Log for debugging
398
+ Debug.LogWarning("Ad failed to load");
399
+
400
+ // Continue with user flow
401
+ ProceedWithoutAd();
402
+
403
+ // Schedule retry
404
+ Invoke(nameof(RetryLoadAd), 30f);
405
+ }
406
+
407
+ private void ProceedWithoutAd()
408
+ {
409
+ // Your app continues normally
410
+ // Never block users because ads aren't available
411
+ }
412
+ ```
413
+
414
+ ### Reward Users Even When Ads Fail
415
+
416
+ For rewarded ads, consider granting rewards even if ad fails:
417
+
418
+ ```csharp
419
+ public void OnRewardedAdShowFailed()
420
+ {
421
+ // User intended to watch ad, but it failed
422
+ // Consider granting reward anyway (generous approach)
423
+ if (shouldBeGenerousOnFailure)
424
+ {
425
+ GrantReward();
426
+ ShowMessage("Reward granted! (Ad unavailable)");
427
+ }
428
+ else
429
+ {
430
+ ShowMessage("Ad unavailable, please try again later");
431
+ }
432
+ }
433
+ ```
434
+
435
+ **When to be generous:**
436
+ - UX-focused strategy
437
+ - High-value users
438
+ - Failure is on your end (not user's fault)
439
+
440
+ ## A/B Testing Considerations
441
+
442
+ ### What to Test
443
+
444
+ **High-impact variables:**
445
+ 1. **Frequency caps**: 3min vs 5min vs 7min between interstitials
446
+ 2. **Placement timing**: Immediate vs delayed interstitials
447
+ 3. **Reward generosity**: 1x vs 2x multiplier for rewarded ads
448
+ 4. **Banner visibility**: Always vs context-aware vs never during gameplay
449
+ 5. **Interstitial presence**: With vs without interstitials
450
+
451
+ **How to test:**
452
+ - Split users into cohorts
453
+ - Track both revenue AND retention
454
+ - Run tests for 7-14 days minimum
455
+ - Focus on long-term value (LTV), not just day-1 revenue
456
+
457
+ ### Metrics to Track
458
+
459
+ **Revenue metrics:**
460
+ - ARPDAU (Average Revenue Per Daily Active User)
461
+ - Impression per DAU
462
+ - eCPM (effective Cost Per Mille)
463
+
464
+ **UX metrics:**
465
+ - D1, D7, D30 retention
466
+ - Session length
467
+ - Session frequency
468
+ - Organic virality (shares, referrals)
469
+
470
+ **Balance metrics:**
471
+ - LTV (Lifetime Value)
472
+ - ARPU / Retention ratio
473
+ - User satisfaction scores
474
+
475
+ ## Common Mistakes to Avoid
476
+
477
+ 1. **Over-monetizing early**: Don't show tons of ads before users are engaged
478
+ 2. **Ignoring retention**: High revenue means nothing if users quit
479
+ 3. **Blocking without ads**: Never require watching ads to progress
480
+ 4. **Poor frequency capping**: Ads every minute frustrate users
481
+ 5. **Forcing rewarded ads**: Rewarded ads should always be optional
482
+ 6. **Ignoring load failures**: Always handle ad failures gracefully
483
+ 7. **One-size-fits-all**: Different user segments may need different strategies
484
+ 8. **Neglecting testing**: Always A/B test major monetization changes
485
+
486
+ ## Platform-Specific Considerations
487
+
488
+ ### iOS
489
+ - Lower opt-in rates post-ATT (iOS 14.5+)
490
+ - Users who deny tracking see lower-value ads
491
+ - More privacy-conscious user base
492
+ - Consider more UX-focused approach
493
+
494
+ ### Android
495
+ - Higher ad fill rates
496
+ - More permissive user expectations
497
+ - Diverse hardware requires testing
498
+ - Can push frequency slightly higher
499
+
500
+ ## Success Metrics by Strategy
501
+
502
+ *(Example benchmarks from industry typical ranges, not LevelPlay-specific targets)*
503
+
504
+ ### Revenue-Focused Success
505
+ - ARPDAU > $0.15
506
+ - Impression/DAU > 8
507
+ - D7 retention > 20%
508
+
509
+ ### UX-Focused Success
510
+ - D7 retention > 35%
511
+ - Session length > 15 minutes
512
+ - Low uninstall rate (<5% weekly)
513
+ - ARPDAU > $0.05
514
+
515
+ ### Balanced Success
516
+ - ARPDAU > $0.10
517
+ - D7 retention > 28%
518
+ - Impression/DAU > 5
519
+ - High user satisfaction
520
+
521
+ ## Final Recommendations
522
+
523
+ 1. **Start UX-focused**: Better to under-monetize early than drive users away
524
+ 2. **Increase gradually**: Add monetization as users become engaged
525
+ 3. **Always test**: Data beats assumptions
526
+ 4. **Watch retention closely**: It's easier to add ads than win back users
527
+ 5. **Be transparent**: Users appreciate honesty about ad-supported models
528
+ 6. **Reward patience**: Give users free options before pushing ads
529
+ 7. **Optimize continuously**: Ad strategy should evolve with your product
530
+
531
+ ## Code Generation Guidelines (Step 9)
532
+
533
+ Read this before generating ad implementation code in Step 9. It contains the general ad lifecycle,
534
+ per-organization-approach guidance, the always-include requirements, and bid-floor wiring.
535
+
536
+ ### General Implementation Pattern
537
+
538
+ All ad formats follow a similar lifecycle:
539
+
540
+ 1. **Load**: Request an ad from LevelPlay
541
+ 2. **Listen**: Register callbacks for ad events (loaded, failed, shown, clicked, closed)
542
+ 3. **Check readiness**: Verify ad is ready before showing
543
+ 4. **Show**: Display the ad to the user
544
+ 5. **Handle callbacks**: Respond to user interactions and ad lifecycle events
545
+
546
+ ### Adapt Output to the Chosen Organization Approach
547
+
548
+ **If the user mentions they have existing code**, ask to see it before providing implementation
549
+ guidance. This allows you to provide targeted fixes rather than generating new code from scratch.
550
+
551
+ **Option 1: Separate manager scripts**
552
+ - Create complete, production-ready `.cs` files for each ad format
553
+ - Name them clearly: `RewardedAdManager.cs`, `InterstitialAdManager.cs`, `BannerAdManager.cs`
554
+ - Include full class structure with proper namespaces
555
+ - Each manager handles one ad format completely
556
+
557
+ **Option 2: Unified AdManager**
558
+ - Create a single `AdManager.cs` file
559
+ - Include methods and callbacks for all requested ad formats in one class
560
+ - Use clear method naming to distinguish between formats (e.g., `LoadRewardedAd()`, `LoadInterstitial()`)
561
+ - Keep code organized with regions or comments separating each ad format
562
+
563
+ **Option 3: Code snippets only**
564
+ - Provide focused code blocks without full class wrappers
565
+ - Clearly label each snippet (e.g., "Rewarded Ad Initialization", "Interstitial Event Callbacks")
566
+ - Explain where/how to integrate each snippet
567
+ - Note any dependencies between snippets
568
+
569
+ ### Regardless of Chosen Approach, Always Include
570
+ - All manager classes must inherit from `MonoBehaviour` — required for Unity lifecycle methods (`Start()`, `OnDestroy()`) and to attach the script to a GameObject
571
+ - After generating any manager script, instruct the user to attach it to a persistent GameObject in their scene (the same one as the initializer, with `DontDestroyOnLoad`)
572
+ - For banner and interstitial managers, call `DestroyAd()` in `OnDestroy()` so ads are destroyed and memory is freed when the manager is destroyed
573
+ - Rewarded and interstitial show paths check `IsAdReady()` before `ShowAd()`. If the game uses dashboard placements, also check the static `IsPlacementCapped(placementName)` — capping is configured per placement in the LevelPlay dashboard, and showing a capped placement fails (error codes 524/526)
574
+ - Proper event subscription and unsubscription (to avoid memory leaks)
575
+ - Null checks and defensive programming
576
+ - Debug logs for troubleshooting
577
+ - Clear variable names that match LevelPlay conventions
578
+ - Error handling and graceful degradation
579
+
580
+ ### Bid Floor Handling (per-format)
581
+ - If the user provided a bid floor value for a format, wrap construction in `Config.Builder().SetBidFloor(value).Build()` and pass the config to the constructor.
582
+ - If the user said 'skip' for that format, use the basic constructor (`new LevelPlayRewardedAd(adUnitId)`).
583
+ - Apply per-format: a publisher may set a floor on rewarded but skip banner.
584
+
585
+ Example (with bid floor):
586
+ ```csharp
587
+ var config = new LevelPlayRewardedAd.Config.Builder()
588
+ .SetBidFloor(0.80)
589
+ .Build();
590
+ rewardedAd = new LevelPlayRewardedAd(adUnitId, config);
591
+ ```
592
+
593
+ Example (skipped):
594
+ ```csharp
595
+ rewardedAd = new LevelPlayRewardedAd(adUnitId);
596
+ ```
597
+
598
+ ## Additional Resources
599
+
600
+ For detailed API implementation, see:
601
+ - `rewarded-api.md`: Rewarded ad implementation
602
+ - `interstitial-api.md`: Interstitial ad implementation
603
+ - `banner-api.md`: Banner ad implementation
604
+ - `initialization-api.md`: SDK setup and configuration
@@ -0,0 +1,94 @@
1
+ # LevelPlay Native Dependency Resolution
2
+
3
+ Detailed guidance for Step 4 of SKILL.md. LevelPlay requires native Android/iOS libraries that Unity's
4
+ package manager alone doesn't handle; a dependency manager bridges this gap. Read this when resolving
5
+ native dependencies, when the user does not yet have a dependency manager, or when diagnosing gradle
6
+ (Android) / CocoaPods (iOS) build failures.
7
+
8
+ ## Contents
9
+ - [Check for an Existing Dependency Manager](#check-for-an-existing-dependency-manager)
10
+ - [If They Have a Dependency Manager](#if-they-have-a-dependency-manager)
11
+ - [If They Don't Have a Dependency Manager](#if-they-dont-have-a-dependency-manager)
12
+ - [Verification](#verification)
13
+ - [Android Custom Main Gradle Template (Older Versions)](#android-custom-main-gradle-template-older-versions)
14
+ - [Android API 33+ Requirement](#android-api-33-requirement)
15
+
16
+ LevelPlay requires native Android/iOS libraries that Unity's package manager alone doesn't handle. A
17
+ dependency manager bridges this gap. If this is a new project without a dependency manager already set
18
+ up, the steps below cover installing one.
19
+
20
+ ## Check for an Existing Dependency Manager
21
+
22
+ Ask: "Do you have a dependency manager like Mobile Dependency Resolver (MDR), Unity External Dependency
23
+ Manager (UEDM), or External Dependency Manager for Unity (EDM4U) installed? Check your Assets folder for
24
+ these tools."
25
+
26
+ **If unsure**: Check Assets folder in Unity for folders named 'Mobile Dependency Resolver', 'External
27
+ Dependency Manager', or 'EDM4U'. If you see any folder with these names, answer 'Yes'. If not, answer 'No'.
28
+
29
+ ## If They Have a Dependency Manager
30
+
31
+ **For Android:**
32
+ - With newer versions of Mobile Dependency Resolver (shipped with the Ads Mediation package): Dependencies auto-resolve on build (no manual action needed). If unsure, try building first — if it fails, manually resolve via the Android Resolver menu.
33
+ - With older MDR or other managers: Go to Assets > [Your Dependency Manager] > Android Resolver > Resolve
34
+ - Example paths:
35
+ - MDR: `Assets > Mobile Dependency Resolver > Android Resolver > Resolve`
36
+ - EDM4U: `Assets > External Dependency Manager > Android Resolver > Resolve`
37
+ - Menu paths may vary depending on dependency manager version. Look for 'Android Resolver' under your dependency manager's menu.
38
+
39
+ **For iOS:**
40
+ - All dependency managers require manual CocoaPods installation:
41
+ - MDR: `Assets > Mobile Dependency Resolver > iOS Resolver > Install Cocoapods`
42
+ - EDM4U: `Assets > External Dependency Manager > iOS Resolver > Install Cocoapods`
43
+ - UEDM: Similar path under Unity External Dependency Manager
44
+
45
+ Ask: "Have you run the dependency resolution for your target platform(s)?"
46
+
47
+ **If targeting both Android and iOS**, complete dependency resolution for both platforms before proceeding.
48
+
49
+ ## If They Don't Have a Dependency Manager
50
+
51
+ If the user didn't see the Mobile Dependency Resolver prompt during installation (see Step 3), restart
52
+ Unity Editor — the prompt may appear after restart. If it still doesn't appear, they may already have a
53
+ dependency manager installed.
54
+
55
+ When prompted:
56
+ 1. Click **Import** on the prompt to install Mobile Dependency Resolver
57
+ 2. After installation:
58
+ - **Android**: Dependencies will auto-resolve on build (newer MDR versions)
59
+ - **iOS**: Go to Assets > Mobile Dependency Resolver > iOS Resolver > Install Cocoapods
60
+
61
+ **Alternative**: Install another dependency manager like EDM4U if preferred (search for installation instructions in their documentation).
62
+
63
+ **Note**: Unity is transitioning to Unity External Dependency Manager (UEDM). If available in your Unity version, prefer UEDM over MDR.
64
+
65
+ ## Verification
66
+
67
+ After resolution, verify:
68
+ - **Android**: Gradle dependencies in `Assets/Plugins/Android/`
69
+ - **iOS**: Podfile references or CocoaPods installation confirmation in console
70
+
71
+ **If dependency resolution fails**: Check the Unity console for specific error messages and share them for troubleshooting — or see `references/troubleshooting.md` for gradle and CocoaPods error guidance.
72
+
73
+ ## Android Custom Main Gradle Template (Older Versions)
74
+
75
+ For older LevelPlay Unity package versions, manually enable the Custom Main Gradle Template:
76
+ 1. Go to Edit > Project Settings > Player
77
+ 2. Select Android tab
78
+ 3. Expand Publishing Settings
79
+ 4. Under Build, check Custom Main Gradle Template
80
+
81
+ In newer LevelPlay Unity package versions (with newer Mobile Dependency Resolver), this is enabled
82
+ automatically by default.
83
+
84
+ ## Android API 33+ Requirement
85
+
86
+ If targeting Android API level 33 or higher, declare the AD_ID permission in AndroidManifest.xml:
87
+
88
+ ```xml
89
+ <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
90
+ ```
91
+
92
+ This permission is required for advertising ID access on Android 13+.
93
+
94
+ **If you skip this step and target Android API 33+:** advertising ID access will fail on Android 13+ devices.
@@ -0,0 +1,10 @@
1
+ # Examples
2
+
3
+ **Note**: Examples show abbreviated workflows for illustration. In practice, follow all steps 1–10 in order.
4
+
5
+ **Revenue-focused game** ("maximize ad revenue in my casual puzzle game"): Steps 1–7 to verify environment/goal/install/deps/App Key/AdMob/init → Step 8 recommend Revenue strategy → Step 9 ask code organization and generate the chosen structure → Step 10 testing.
6
+
7
+ **UX-focused game** ("optional rewarded ads for extra lives without annoying players"): same spine, but Step 8 recommends UX strategy (rewarded only, user-initiated) and Step 9 implements rewarded with proper patterns.
8
+
9
+ **Existing project** ("existing GameManager, add interstitials between levels"): same spine, Step 8 Balanced, Step 9 ask to see `GameManager.cs` then provide Option-2 snippets.
10
+