@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,927 @@
1
+ # Banner Ads API Reference
2
+
3
+ ## Contents
4
+ - [Overview](#overview)
5
+ - [Key Characteristics](#key-characteristics)
6
+ - [Implementation Pattern](#implementation-pattern)
7
+ - [API Reference](#api-reference)
8
+ - [Data Types](#data-types)
9
+ - [Best Practices](#best-practices)
10
+ - [Common Issues](#common-issues)
11
+ - [Testing Checklist](#testing-checklist)
12
+
13
+ ## Overview
14
+
15
+ Banner ads are rectangular ads that occupy a portion of the screen. They can be displayed at the top or bottom of the screen and remain visible while users interact with your app.
16
+
17
+ ## Key Characteristics
18
+
19
+ - **Persistent**: Remain on screen until explicitly destroyed
20
+ - **Always visible**: Can distract from gameplay if poorly positioned
21
+ - **Best for**: Menu screens, waiting periods, low-attention moments
22
+
23
+ ## Implementation Pattern
24
+
25
+ ### Basic Banner Implementation
26
+
27
+ ```csharp
28
+ using UnityEngine;
29
+ using Unity.Services.LevelPlay;
30
+
31
+ public class BannerAdManager : MonoBehaviour
32
+ {
33
+ private LevelPlayBannerAd bannerAd;
34
+ private string adUnitId = "YOUR_BANNER_AD_UNIT_ID";
35
+
36
+ void Start()
37
+ {
38
+ // Create the banner ad object using constructor
39
+ bannerAd = new LevelPlayBannerAd(adUnitId);
40
+
41
+ // ILRD (SDK 9.5.0+): if impression-revenue tracking is enabled, also subscribe here —
42
+ // bannerAd.OnAdImpressionDataReady += OnImpressionDataReady; // see references/ilrd-api.md
43
+
44
+ // Register event listeners
45
+ bannerAd.OnAdLoaded += OnAdLoaded;
46
+ bannerAd.OnAdLoadFailed += OnAdLoadFailed;
47
+ bannerAd.OnAdDisplayed += OnAdDisplayed;
48
+ bannerAd.OnAdDisplayFailed += OnAdDisplayFailed;
49
+ bannerAd.OnAdClicked += OnAdClicked;
50
+ bannerAd.OnAdExpanded += OnAdExpanded;
51
+ bannerAd.OnAdCollapsed += OnAdCollapsed;
52
+ bannerAd.OnAdLeftApplication += OnAdLeftApplication;
53
+
54
+ // Load and show banner
55
+ LoadBanner();
56
+ }
57
+
58
+ void OnDestroy()
59
+ {
60
+ // Unregister event listeners
61
+ if (bannerAd != null)
62
+ {
63
+ bannerAd.OnAdLoaded -= OnAdLoaded;
64
+ bannerAd.OnAdLoadFailed -= OnAdLoadFailed;
65
+ bannerAd.OnAdDisplayed -= OnAdDisplayed;
66
+ bannerAd.OnAdDisplayFailed -= OnAdDisplayFailed;
67
+ bannerAd.OnAdClicked -= OnAdClicked;
68
+ bannerAd.OnAdExpanded -= OnAdExpanded;
69
+ bannerAd.OnAdCollapsed -= OnAdCollapsed;
70
+ bannerAd.OnAdLeftApplication -= OnAdLeftApplication;
71
+ // ILRD (9.5.0+): bannerAd.OnAdImpressionDataReady -= OnImpressionDataReady;
72
+ }
73
+
74
+ // Destroy banner
75
+ DestroyBanner();
76
+ }
77
+
78
+ public void LoadBanner()
79
+ {
80
+ Debug.Log("Loading banner ad...");
81
+ bannerAd.LoadAd();
82
+ }
83
+
84
+ public void ShowBanner()
85
+ {
86
+ Debug.Log("Showing banner ad");
87
+ bannerAd.ShowAd();
88
+ }
89
+
90
+ public void HideBanner()
91
+ {
92
+ Debug.Log("Hiding banner ad");
93
+ bannerAd.HideAd();
94
+ }
95
+
96
+ public void DestroyBanner()
97
+ {
98
+ if (bannerAd != null)
99
+ {
100
+ Debug.Log("Destroying banner ad");
101
+ bannerAd.DestroyAd();
102
+ bannerAd = null;
103
+ }
104
+ }
105
+
106
+ // Event Callbacks
107
+ private void OnAdLoaded(LevelPlayAdInfo adInfo)
108
+ {
109
+ Debug.Log($"Banner ad loaded - network: {adInfo.AdNetwork}, revenue: ${adInfo.Revenue}");
110
+ // Banner is ready, can call ShowAd() if needed
111
+ }
112
+
113
+ private void OnAdLoadFailed(LevelPlayAdError error)
114
+ {
115
+ Debug.LogWarning($"Banner ad load failed: {error.ErrorMessage}");
116
+ // Retry loading after delay
117
+ Invoke(nameof(LoadBanner), 60f);
118
+ }
119
+
120
+ private void OnAdDisplayed(LevelPlayAdInfo adInfo)
121
+ {
122
+ Debug.Log($"Banner ad displayed - network: {adInfo.AdNetwork}, placement: {adInfo.PlacementName}");
123
+ }
124
+
125
+ private void OnAdDisplayFailed(LevelPlayAdInfo adInfo, LevelPlayAdError error)
126
+ {
127
+ Debug.LogError($"Banner ad display failed: {error.ErrorMessage}");
128
+ // Retry loading
129
+ Invoke(nameof(LoadBanner), 60f);
130
+ }
131
+
132
+ private void OnAdClicked(LevelPlayAdInfo adInfo)
133
+ {
134
+ Debug.Log($"Banner ad clicked - network: {adInfo.AdNetwork}");
135
+ }
136
+
137
+ private void OnAdExpanded(LevelPlayAdInfo adInfo)
138
+ {
139
+ Debug.Log($"Banner ad expanded - network: {adInfo.AdNetwork}");
140
+ // Optionally pause game if banner expands to full screen
141
+ }
142
+
143
+ private void OnAdCollapsed(LevelPlayAdInfo adInfo)
144
+ {
145
+ Debug.Log($"Banner ad collapsed - network: {adInfo.AdNetwork}");
146
+ // Resume game if paused
147
+ }
148
+
149
+ private void OnAdLeftApplication(LevelPlayAdInfo adInfo)
150
+ {
151
+ Debug.Log($"Banner ad left application - network: {adInfo.AdNetwork}");
152
+ }
153
+ }
154
+ ```
155
+
156
+ ### Banner with Custom Configuration
157
+
158
+ Use the Config Builder pattern to customize banner size, position, and behavior:
159
+
160
+ ```csharp
161
+ using UnityEngine;
162
+ using Unity.Services.LevelPlay;
163
+
164
+ public class CustomBannerAdManager : MonoBehaviour
165
+ {
166
+ private LevelPlayBannerAd bannerAd;
167
+ private string adUnitId = "YOUR_BANNER_AD_UNIT_ID";
168
+
169
+ void Start()
170
+ {
171
+ // Create config using Builder pattern
172
+ var configBuilder = new LevelPlayBannerAd.Config.Builder();
173
+
174
+ // Set banner size (UPPERCASE!)
175
+ configBuilder.SetSize(LevelPlayAdSize.LARGE); // 320x90
176
+
177
+ // Set position on screen
178
+ configBuilder.SetPosition(LevelPlayBannerPosition.BottomCenter);
179
+
180
+ // Auto-display when loaded
181
+ configBuilder.SetDisplayOnLoad(true);
182
+
183
+ // Respect safe area (Android only)
184
+ configBuilder.SetRespectSafeArea(true);
185
+
186
+ // Build the config
187
+ var bannerConfig = configBuilder.Build();
188
+
189
+ // Create banner with config
190
+ bannerAd = new LevelPlayBannerAd(adUnitId, bannerConfig);
191
+
192
+ // Register callbacks
193
+ bannerAd.OnAdLoaded += OnAdLoaded;
194
+ bannerAd.OnAdLoadFailed += OnAdLoadFailed;
195
+ bannerAd.OnAdDisplayed += OnAdDisplayed;
196
+
197
+ // Load banner
198
+ bannerAd.LoadAd();
199
+ }
200
+
201
+ void OnDestroy()
202
+ {
203
+ if (bannerAd != null)
204
+ {
205
+ bannerAd.OnAdLoaded -= OnAdLoaded;
206
+ bannerAd.OnAdLoadFailed -= OnAdLoadFailed;
207
+ bannerAd.OnAdDisplayed -= OnAdDisplayed;
208
+ bannerAd.DestroyAd();
209
+ }
210
+ }
211
+
212
+ private void OnAdLoaded(LevelPlayAdInfo adInfo)
213
+ {
214
+ Debug.Log("Custom banner loaded");
215
+ }
216
+
217
+ private void OnAdLoadFailed(LevelPlayAdError error)
218
+ {
219
+ Debug.LogWarning($"Banner load failed: {error.ErrorMessage}");
220
+ }
221
+
222
+ private void OnAdDisplayed(LevelPlayAdInfo adInfo)
223
+ {
224
+ Debug.Log("Custom banner displayed");
225
+ }
226
+ }
227
+ ```
228
+
229
+ ### Advanced: Context-Aware Banner Management
230
+
231
+ Show banners only in appropriate scenes:
232
+
233
+ ```csharp
234
+ using UnityEngine;
235
+ using UnityEngine.SceneManagement;
236
+ using Unity.Services.LevelPlay;
237
+
238
+ public class ContextAwareBannerManager : MonoBehaviour
239
+ {
240
+ private LevelPlayBannerAd bannerAd;
241
+ private string adUnitId = "YOUR_BANNER_AD_UNIT_ID";
242
+
243
+ // Scenes where banner should be shown
244
+ private string[] bannerEnabledScenes = { "MainMenu", "LevelSelect", "Shop" };
245
+
246
+ private bool isBannerLoaded = false;
247
+
248
+ void Start()
249
+ {
250
+ // Make this manager persist across scenes
251
+ DontDestroyOnLoad(gameObject);
252
+
253
+ // Create banner ad
254
+ bannerAd = new LevelPlayBannerAd(adUnitId);
255
+
256
+ // Register callbacks
257
+ bannerAd.OnAdLoaded += OnAdLoaded;
258
+ bannerAd.OnAdLoadFailed += OnAdLoadFailed;
259
+
260
+ // Register for scene changes
261
+ SceneManager.sceneLoaded += OnSceneLoaded;
262
+
263
+ // Load banner
264
+ bannerAd.LoadAd();
265
+
266
+ // Check initial scene
267
+ OnSceneLoaded(SceneManager.GetActiveScene(), LoadSceneMode.Single);
268
+ }
269
+
270
+ void OnDestroy()
271
+ {
272
+ // Unregister callbacks
273
+ if (bannerAd != null)
274
+ {
275
+ bannerAd.OnAdLoaded -= OnAdLoaded;
276
+ bannerAd.OnAdLoadFailed -= OnAdLoadFailed;
277
+ }
278
+
279
+ SceneManager.sceneLoaded -= OnSceneLoaded;
280
+
281
+ // Destroy banner
282
+ if (bannerAd != null)
283
+ {
284
+ bannerAd.DestroyAd();
285
+ }
286
+ }
287
+
288
+ private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
289
+ {
290
+ if (ShouldShowBannerInScene(scene.name))
291
+ {
292
+ ShowBanner();
293
+ }
294
+ else
295
+ {
296
+ HideBanner();
297
+ }
298
+ }
299
+
300
+ private bool ShouldShowBannerInScene(string sceneName)
301
+ {
302
+ foreach (string enabledScene in bannerEnabledScenes)
303
+ {
304
+ if (sceneName == enabledScene)
305
+ {
306
+ return true;
307
+ }
308
+ }
309
+ return false;
310
+ }
311
+
312
+ private void ShowBanner()
313
+ {
314
+ if (isBannerLoaded && bannerAd != null)
315
+ {
316
+ bannerAd.ShowAd();
317
+ }
318
+ }
319
+
320
+ private void HideBanner()
321
+ {
322
+ if (bannerAd != null)
323
+ {
324
+ bannerAd.HideAd();
325
+ }
326
+ }
327
+
328
+ private void OnAdLoaded(LevelPlayAdInfo adInfo)
329
+ {
330
+ Debug.Log("Banner ad loaded");
331
+ isBannerLoaded = true;
332
+
333
+ // Show banner if we're in an enabled scene
334
+ if (ShouldShowBannerInScene(SceneManager.GetActiveScene().name))
335
+ {
336
+ ShowBanner();
337
+ }
338
+ }
339
+
340
+ private void OnAdLoadFailed(LevelPlayAdError error)
341
+ {
342
+ Debug.LogWarning($"Banner ad load failed: {error.ErrorMessage}");
343
+ isBannerLoaded = false;
344
+ Invoke(nameof(LoadBanner), 60f);
345
+ }
346
+
347
+ private void LoadBanner()
348
+ {
349
+ if (bannerAd != null)
350
+ {
351
+ isBannerLoaded = false; // Reset flag when loading
352
+ bannerAd.LoadAd();
353
+ }
354
+ }
355
+ }
356
+ ```
357
+
358
+ ## API Reference
359
+
360
+ ### Constructor
361
+
362
+ #### `new LevelPlayBannerAd(string adUnitId)`
363
+ Create a banner ad object with default configuration.
364
+
365
+ **Parameters:**
366
+ - `adUnitId`: The ad unit identifier from your LevelPlay dashboard
367
+
368
+ **Returns:** `LevelPlayBannerAd` object
369
+
370
+ **Usage:**
371
+ ```csharp
372
+ LevelPlayBannerAd bannerAd = new LevelPlayBannerAd("your_ad_unit_id");
373
+ ```
374
+
375
+ **Default behavior:**
376
+ - Size: Standard banner (320x50)
377
+ - Position: Bottom center
378
+ - DisplayOnLoad: true (banner shows automatically when loaded)
379
+
380
+ **Important:** Call this only after `LevelPlay.Init()` has completed successfully.
381
+
382
+ #### `new LevelPlayBannerAd(string adUnitId, Config config)`
383
+ Create a banner ad object with custom configuration.
384
+
385
+ **Parameters:**
386
+ - `adUnitId`: The ad unit identifier
387
+ - `config`: Configuration object built using Config.Builder()
388
+
389
+ **Usage:**
390
+ ```csharp
391
+ var configBuilder = new LevelPlayBannerAd.Config.Builder();
392
+ configBuilder.SetSize(LevelPlayAdSize.LARGE);
393
+ configBuilder.SetPosition(LevelPlayBannerPosition.TopCenter);
394
+ var config = configBuilder.Build();
395
+
396
+ LevelPlayBannerAd bannerAd = new LevelPlayBannerAd("your_ad_unit_id", config);
397
+ ```
398
+
399
+ ### Configuration Builder
400
+
401
+ #### `LevelPlayBannerAd.Config.Builder()`
402
+ Create a configuration builder for customizing banner behavior.
403
+
404
+ **Methods:**
405
+
406
+ **`SetSize(LevelPlayAdSize size)`**
407
+ Set the banner size.
408
+
409
+ **Usage:**
410
+ ```csharp
411
+ configBuilder.SetSize(LevelPlayAdSize.BANNER); // 320x50
412
+ configBuilder.SetSize(LevelPlayAdSize.LARGE); // 320x90
413
+ configBuilder.SetSize(LevelPlayAdSize.MEDIUM_RECTANGLE); // 300x250
414
+ configBuilder.SetSize(LevelPlayAdSize.LEADERBOARD); // 728x90
415
+ configBuilder.SetSize(LevelPlayAdSize.CreateAdaptiveAdSize()); // Adaptive
416
+ configBuilder.SetSize(LevelPlayAdSize.CreateCustomBannerSize(300, 150)); // Custom size
417
+ ```
418
+
419
+ **`SetPosition(LevelPlayBannerPosition position)`**
420
+ Set the banner position on screen.
421
+
422
+ **Usage:**
423
+ ```csharp
424
+ configBuilder.SetPosition(LevelPlayBannerPosition.TopCenter);
425
+ configBuilder.SetPosition(LevelPlayBannerPosition.BottomCenter);
426
+ // Also: TopLeft, TopRight, BottomLeft, BottomRight
427
+ ```
428
+
429
+ **`SetDisplayOnLoad(bool displayOnLoad)`**
430
+ Whether to automatically show banner when loaded.
431
+
432
+ **Usage:**
433
+ ```csharp
434
+ configBuilder.SetDisplayOnLoad(true); // Auto-show (default)
435
+ configBuilder.SetDisplayOnLoad(false); // Manual show
436
+ ```
437
+
438
+ **`SetRespectSafeArea(bool respectSafeArea)`**
439
+ Whether to respect device safe area (Android only).
440
+
441
+ **Usage:**
442
+ ```csharp
443
+ configBuilder.SetRespectSafeArea(true); // Avoid notches/cutouts
444
+ ```
445
+
446
+ **`SetPlacementName(string placementName)`**
447
+ Set the placement name for analytics tracking.
448
+
449
+ **Usage:**
450
+ ```csharp
451
+ configBuilder.SetPlacementName("main_menu_banner");
452
+ ```
453
+
454
+ **When to use:** When tracking multiple banner placements for analytics and reporting.
455
+
456
+ **Set minimum bid price:**
457
+ ```csharp
458
+ configBuilder.SetBidFloor(1.0); // Minimum bid price in USD ($1.00 CPM)
459
+ ```
460
+
461
+ **When to use:** Set a minimum bid price in USD for ad requests to ensure revenue floor.
462
+
463
+ **`Build()`**
464
+ Build the configuration object.
465
+
466
+ **Usage:**
467
+ ```csharp
468
+ var config = configBuilder.Build();
469
+ ```
470
+
471
+ ### Core Methods
472
+
473
+ #### `LoadAd()`
474
+ Load a banner ad.
475
+
476
+ **Usage:**
477
+ ```csharp
478
+ bannerAd.LoadAd();
479
+ ```
480
+
481
+ **Note:** After loading succeeds, you can call `ShowAd()` to display it (unless `SetDisplayOnLoad(true)` was used).
482
+
483
+ #### `ShowAd()`
484
+ Show the banner ad.
485
+
486
+ **Usage:**
487
+ ```csharp
488
+ bannerAd.ShowAd();
489
+ ```
490
+
491
+ **Note:** Banner must be loaded first.
492
+
493
+ #### `HideAd()`
494
+ Hide the banner ad without destroying it.
495
+
496
+ **Usage:**
497
+ ```csharp
498
+ bannerAd.HideAd();
499
+ ```
500
+
501
+ **When to use:** Temporarily hide banner (e.g., during gameplay) while keeping it loaded for quick re-display.
502
+
503
+ #### `DestroyAd()`
504
+ Destroy the banner ad and free resources.
505
+
506
+ **Usage:**
507
+ ```csharp
508
+ bannerAd.DestroyAd();
509
+ ```
510
+
511
+ **When to use:** When leaving a scene where banner was shown, or when switching to a different banner size.
512
+
513
+ **Note on IsAdReady():** Unlike Rewarded and Interstitial ads, Banner ads do NOT have an `IsAdReady()` method. Banners are ready to show immediately after `OnAdLoaded` fires. Simply call `ShowAd()` in the `OnAdLoaded` callback or afterward.
514
+
515
+ #### `PauseAutoRefresh()`
516
+ Pause automatic banner refresh.
517
+
518
+ **Usage:**
519
+ ```csharp
520
+ bannerAd.PauseAutoRefresh();
521
+ ```
522
+
523
+ **When to use:** When banner is not visible but still loaded (e.g., during gameplay).
524
+
525
+ #### `ResumeAutoRefresh()`
526
+ Resume automatic banner refresh.
527
+
528
+ **Usage:**
529
+ ```csharp
530
+ bannerAd.ResumeAutoRefresh();
531
+ ```
532
+
533
+ **When to use:** When banner becomes visible again after pausing.
534
+
535
+ ### Banner Sizes
536
+
537
+ Available banner sizes from `LevelPlayAdSize` (note: **UPPERCASE**):
538
+
539
+ | Size | Description | Typical Dimensions |
540
+ |------|-------------|-------------------|
541
+ | `LevelPlayAdSize.BANNER` | Standard banner | 320x50 |
542
+ | `LevelPlayAdSize.LARGE` | Large banner | 320x90 |
543
+ | `LevelPlayAdSize.MEDIUM_RECTANGLE` | Medium rectangle | 300x250 |
544
+ | `LevelPlayAdSize.LEADERBOARD` | Leaderboard banner | 728x90 |
545
+ | `LevelPlayAdSize.CreateAdaptiveAdSize()` | Adaptive banner | Adapts to screen width |
546
+ | `LevelPlayAdSize.CreateCustomBannerSize(int width, int height)` | Custom size | Custom dimensions |
547
+
548
+ **Usage:**
549
+ ```csharp
550
+ // Standard banner (most common)
551
+ LevelPlayAdSize.BANNER
552
+
553
+ // Large banner
554
+ LevelPlayAdSize.LARGE
555
+
556
+ // Medium rectangle
557
+ LevelPlayAdSize.MEDIUM_RECTANGLE
558
+
559
+ // Leaderboard
560
+ LevelPlayAdSize.LEADERBOARD
561
+
562
+ // Adaptive banner (method call)
563
+ LevelPlayAdSize.CreateAdaptiveAdSize()
564
+
565
+ // Custom size
566
+ LevelPlayAdSize.CreateCustomBannerSize(300, 150)
567
+ ```
568
+
569
+ **Recommendation:** Use `BANNER` (320x50) for most cases. Use `CreateAdaptiveAdSize()` for adaptive sizing across devices.
570
+
571
+ **LevelPlayAdSize Properties (SDK 8.8.0+):**
572
+
573
+ After setting a banner size, you can query the actual dimensions:
574
+
575
+ ```csharp
576
+ LevelPlayAdSize adSize = LevelPlayAdSize.BANNER;
577
+ int width = adSize.Width; // e.g., 320
578
+ int height = adSize.Height; // e.g., 50
579
+ ```
580
+
581
+ **Properties:**
582
+ - `Width` (int): Banner width in pixels
583
+ - `Height` (int): Banner height in pixels
584
+
585
+ **When to use:** When calculating UI layout offsets or positioning other UI elements around the banner.
586
+
587
+ ### Banner Positions
588
+
589
+ Available positions from `LevelPlayBannerPosition`:
590
+
591
+ | Position | Description |
592
+ |----------|-------------|
593
+ | `TopLeft` | Top-left corner |
594
+ | `TopCenter` | Top-center |
595
+ | `TopRight` | Top-right corner |
596
+ | `CenterLeft` | Center-left |
597
+ | `Center` | Center |
598
+ | `CenterRight` | Center-right |
599
+ | `BottomLeft` | Bottom-left corner |
600
+ | `BottomCenter` | Bottom-center (most common) |
601
+ | `BottomRight` | Bottom-right corner |
602
+
603
+ **Usage:**
604
+ ```csharp
605
+ LevelPlayBannerPosition.BottomCenter
606
+ LevelPlayBannerPosition.TopCenter
607
+ LevelPlayBannerPosition.Center
608
+ // etc.
609
+ ```
610
+
611
+ **Additional:** Custom positioning can be achieved using a Vector2 constructor.
612
+
613
+ **Recommendation:** `BottomCenter` is less intrusive and more commonly used.
614
+
615
+ ### Events
616
+
617
+ All events are properties of the `LevelPlayBannerAd` object.
618
+
619
+ **Threading:** All ad callbacks run on the Unity main thread, so you can safely call Unity APIs (update UI, access GameObjects, etc.) directly in these callbacks. This is different from `LevelPlay.OnImpressionDataReady` which runs on a background thread.
620
+
621
+ #### `OnAdLoaded`
622
+ Fired when a banner ad is loaded.
623
+
624
+ **Signature:** `event Action<LevelPlayAdInfo>`
625
+
626
+ **Usage:**
627
+ ```csharp
628
+ bannerAd.OnAdLoaded += (adInfo) =>
629
+ {
630
+ Debug.Log("Banner loaded");
631
+ bannerAd.ShowAd();
632
+ };
633
+ ```
634
+
635
+ #### `OnAdLoadFailed`
636
+ Fired when a banner ad fails to load.
637
+
638
+ **Signature:** `event Action<LevelPlayAdError>`
639
+
640
+ **Usage:**
641
+ ```csharp
642
+ bannerAd.OnAdLoadFailed += (error) =>
643
+ {
644
+ Debug.LogWarning($"Banner load failed: {error.ErrorMessage}");
645
+ };
646
+ ```
647
+
648
+ #### `OnAdDisplayed`
649
+ Fired when banner ad is displayed.
650
+
651
+ **Signature:** `event Action<LevelPlayAdInfo>`
652
+
653
+ **Usage:**
654
+ ```csharp
655
+ bannerAd.OnAdDisplayed += (adInfo) =>
656
+ {
657
+ Debug.Log("Banner displayed");
658
+ };
659
+ ```
660
+
661
+ #### `OnAdDisplayFailed`
662
+ Fired when banner ad fails to display.
663
+
664
+ **Signature:** `event Action<LevelPlayAdInfo, LevelPlayAdError>`
665
+
666
+ **Usage:**
667
+ ```csharp
668
+ bannerAd.OnAdDisplayFailed += (adInfo, error) =>
669
+ {
670
+ Debug.LogError($"Banner display failed: {error.ErrorMessage}");
671
+ };
672
+ ```
673
+
674
+ #### `OnAdClicked`
675
+ Fired when user clicks on the banner.
676
+
677
+ **Signature:** `event Action<LevelPlayAdInfo>`
678
+
679
+ **Usage:**
680
+ ```csharp
681
+ bannerAd.OnAdClicked += (adInfo) =>
682
+ {
683
+ Debug.Log("Banner clicked");
684
+ };
685
+ ```
686
+
687
+ #### `OnAdExpanded`
688
+ Fired when banner ad expands to full screen (e.g., after click).
689
+
690
+ **Signature:** `event Action<LevelPlayAdInfo>`
691
+
692
+ **Usage:**
693
+ ```csharp
694
+ bannerAd.OnAdExpanded += (adInfo) =>
695
+ {
696
+ Debug.Log("Banner expanded");
697
+ // Pause game if needed
698
+ };
699
+ ```
700
+
701
+ #### `OnAdCollapsed`
702
+ Fired when expanded banner collapses back.
703
+
704
+ **Signature:** `event Action<LevelPlayAdInfo>`
705
+
706
+ **Usage:**
707
+ ```csharp
708
+ bannerAd.OnAdCollapsed += (adInfo) =>
709
+ {
710
+ Debug.Log("Banner collapsed");
711
+ // Resume game if paused
712
+ };
713
+ ```
714
+
715
+ #### `OnAdLeftApplication`
716
+ Fired when banner click causes user to leave the application.
717
+
718
+ **Signature:** `event Action<LevelPlayAdInfo>`
719
+
720
+ **Usage:**
721
+ ```csharp
722
+ bannerAd.OnAdLeftApplication += (adInfo) =>
723
+ {
724
+ Debug.Log("Banner left application");
725
+ };
726
+ ```
727
+
728
+ ## Data Types
729
+
730
+ ### LevelPlayAdInfo
731
+
732
+ Contains information about the ad.
733
+
734
+ **Properties:**
735
+ - `AdId` (string): Unique identifier for this specific ad instance
736
+ - `AdUnitId` (string): The ad unit identifier
737
+ - `AdUnitName` (string): The ad unit name
738
+ - `AdSize` (LevelPlayAdSize): The ad size (may be null; banner-relevant)
739
+ - `AdFormat` (string): The ad format (e.g., "BANNER")
740
+ - `PlacementName` (string): Placement name where ad was shown
741
+ - `AuctionId` (string): Unique auction identifier
742
+ - `CreativeId` (string): Creative identifier
743
+ - `Country` (string): User's country code (ISO 3166-1)
744
+ - `Ab` (string): A/B test segment identifier
745
+ - `SegmentName` (string): User segment name
746
+ - `AdNetwork` (string): Ad network that served the ad
747
+ - `InstanceName` (string): Ad network instance name
748
+ - `InstanceId` (string): Ad network instance identifier
749
+ - `Revenue` (double?): Estimated revenue in USD (nullable - check for null)
750
+ - `Precision` (string): Revenue precision level
751
+ - `EncryptedCPM` (string): Encrypted CPM value
752
+
753
+ ### LevelPlayAdError
754
+
755
+ Contains error information when ad operations fail.
756
+
757
+ **Properties:**
758
+ - `ErrorCode` (int): Numeric error code
759
+ - `ErrorMessage` (string): Human-readable error description
760
+ - `AdUnitId` (string): The ad unit identifier where the error occurred
761
+ - `AdId` (string): Unique identifier for the specific ad instance
762
+
763
+ ## Best Practices
764
+
765
+ ### Loading
766
+
767
+ - Load banners when entering scenes where they'll be displayed
768
+ - Destroy banners when leaving those scenes to free memory
769
+ - Only one banner per ad unit can be active at a time
770
+ - If you need to change size/position, destroy and recreate
771
+
772
+ ### Placement
773
+
774
+ - **Bottom position** is generally less intrusive than top
775
+ - **Avoid during gameplay** - show in menus, waiting screens
776
+ - **Consider UI overlap** - ensure banner doesn't cover important UI
777
+ - **Test on various screen sizes** - especially important for mobile
778
+
779
+ ### Visibility Management
780
+
781
+ - Use `HideAd()` / `ShowAd()` for temporary visibility changes
782
+ - Use `DestroyAd()` when permanently done with banner (frees memory)
783
+ - Hide banners during gameplay for UX-focused strategy
784
+ - Show banners persistently for revenue-focused strategy
785
+
786
+ ### Auto-Refresh Management
787
+
788
+ - Use `PauseAutoRefresh()` when banner is hidden
789
+ - Use `ResumeAutoRefresh()` when banner is shown again
790
+
791
+ **Example:**
792
+ ```csharp
793
+ void OnGameplayStart()
794
+ {
795
+ bannerAd.HideAd();
796
+ bannerAd.PauseAutoRefresh();
797
+ }
798
+
799
+ void OnGameplayEnd()
800
+ {
801
+ bannerAd.ShowAd();
802
+ bannerAd.ResumeAutoRefresh();
803
+ }
804
+ ```
805
+
806
+ ### Memory Management
807
+
808
+ - Always call `DestroyAd()` in `OnDestroy()` or when leaving scene
809
+ - Don't keep banners loaded in scenes where they're not displayed
810
+ - Unsubscribe from events properly
811
+
812
+ ```csharp
813
+ void OnDestroy()
814
+ {
815
+ if (bannerAd != null)
816
+ {
817
+ bannerAd.DestroyAd();
818
+ }
819
+ }
820
+ ```
821
+
822
+ ### UX Considerations
823
+
824
+ - Banners can be distracting during gameplay
825
+ - Best practice: Show in menus, hide during gameplay
826
+ - For revenue-focused: Show persistently but position carefully
827
+ - Test with actual users to gauge impact on experience
828
+
829
+ ## Common Issues
830
+
831
+ ### Issue: Repeated LoadAd() calls
832
+
833
+ **Cause:** Calling `LoadAd()` more than once on the same banner object — in `Update()`, on scene re-entry, or to manually refresh the creative.
834
+
835
+ **Common mistake:**
836
+ ```csharp
837
+ void Update()
838
+ {
839
+ // WRONG - never call LoadAd() every frame.
840
+ // Banners load once and then auto-refresh on their own.
841
+ bannerAd.LoadAd();
842
+ }
843
+ ```
844
+
845
+ **Note:** Banner ads have no `IsAdReady()` method (unlike Rewarded and Interstitial ads) — a banner is ready to show once `OnAdLoaded` fires, so there is nothing to poll for here.
846
+
847
+ **Why to avoid:** A banner object takes exactly one `LoadAd()` call for its lifetime, whether or not auto-refresh is enabled. New creatives come from auto-refresh (based on your platform settings), and visibility is controlled with `ShowAd()`/`HideAd()` — never by reloading. Banner ads don't throw errors for repeated loads like interstitial/rewarded ads do, but extra `LoadAd()` calls waste resources and can cause unexpected behavior.
848
+
849
+ **Solution:** Call `LoadAd()` once after creating the banner:
850
+ ```csharp
851
+ void Start()
852
+ {
853
+ bannerAd = new LevelPlayBannerAd(adUnitId);
854
+ bannerAd.OnAdLoaded += OnAdLoaded;
855
+ bannerAd.OnAdLoadFailed += OnAdLoadFailed;
856
+ bannerAd.LoadAd(); // The only LoadAd() for this object's lifetime
857
+ }
858
+
859
+ void OnAdLoadFailed(LevelPlayAdError error)
860
+ {
861
+ // Optionally retry after delay
862
+ Invoke(nameof(RetryLoad), 5f);
863
+ }
864
+
865
+ void RetryLoad()
866
+ {
867
+ bannerAd.LoadAd();
868
+ }
869
+ ```
870
+
871
+ **Note:** The failure retry above is the only case where calling `LoadAd()` again on the same object is correct. After `DestroyAd()`, create a new banner object and give it its own single `LoadAd()`.
872
+
873
+ ### Issue: Banner overlaps UI elements
874
+
875
+ **Solutions:**
876
+ - Calculate banner height and offset UI elements
877
+ - Use `Canvas.offsetMin` or `RectTransform.anchoredPosition` to create spacing
878
+ - Test on different screen sizes
879
+ - Use `SetRespectSafeArea(true)` to avoid notches
880
+
881
+ ### Issue: Banner not showing
882
+
883
+ **Possible causes:**
884
+ - SDK not initialized before creating banner
885
+ - Banner not loaded before calling `ShowAd()`
886
+ - Banner is hidden with `HideAd()`
887
+ - `SetDisplayOnLoad(false)` used without manual `ShowAd()`
888
+
889
+ **Solutions:**
890
+ - Create banner only after `OnInitSuccess` callback
891
+ - Ensure `LoadAd()` is called and `OnAdLoaded` fires before `ShowAd()`
892
+ - Check banner visibility state
893
+
894
+ ### Issue: Banner shows in wrong scenes
895
+
896
+ **Solutions:**
897
+ - Implement scene-based visibility management
898
+ - Destroy banner when leaving scenes where it shouldn't appear
899
+ - Use `SceneManager.sceneLoaded` event for automatic management
900
+
901
+ ### Issue: Wrong banner size
902
+
903
+ **Possible causes:**
904
+ - Using lowercase enum values (e.g., `.Banner` instead of `.BANNER`)
905
+ - Not using Config Builder to set size
906
+
907
+ **Solutions:**
908
+ - Always use UPPERCASE: `LevelPlayAdSize.BANNER`, not `.Banner`
909
+ - Use Config Builder to explicitly set size:
910
+ ```csharp
911
+ var config = new LevelPlayBannerAd.Config.Builder()
912
+ .SetSize(LevelPlayAdSize.LARGE)
913
+ .Build();
914
+ ```
915
+
916
+ ## Testing Checklist
917
+
918
+ - [ ] Banner loads and displays correctly
919
+ - [ ] Banner appears in correct position (top/bottom)
920
+ - [ ] Banner size is appropriate for screen
921
+ - [ ] Banner doesn't overlap important UI
922
+ - [ ] Banner hides/shows correctly
923
+ - [ ] Banner destroys properly when leaving scene
924
+ - [ ] Banner works on different screen sizes/orientations
925
+ - [ ] Retry logic works if banner fails to load
926
+ - [ ] Auto-refresh pauses/resumes correctly
927
+ - [ ] Safe area respected on devices with notches (Android)