Pocket Sorting Games — customer guide
First import
1. Create a Unity 6000.0.62f1 Universal 2D or Universal 3D project. Install Universal RP 17.0.4 and Unity UI 2.0.0 in Package Manager before importing.
2. Import PocketSortingGames-5Games-25Themes.unitypackage. Everything is under Assets/PocketSortingGames. Do not import into a project containing another copy of these same scripts/GUIDs.
3. Open Tools > Pocket Sorting Games > Setup and Help. Add the five demo scenes if appropriate; this button replaces the Build Settings scene list. Assign the supplied pipeline if appropriate; this button sets every quality tier's pipeline and 4x anti-aliasing. Importing alone does not run either action.
4. In Edit > Project Settings > Player > Other Settings, set Active Input Handling to Input Manager (Old) or Both and restart if Unity requests it. The New Input System alone is insufficient.
5. Open Games/MarbleGrove/Scenes/MarbleGrove.unity and press Play. All other game scenes live beside their own Prefabs, Levels, Presentation.asset and Audio folders.
6. Set your own Company Name, Product Name, identifiers and icons before making your game build. Graphics profiles are provided; validate performance on your target hardware.
Play controls
Click a container, then a compatible destination to transfer the top matching group or liquid. Invalid targets cancel the selection. Shelf Party supports dragging an item to a shelf slot or selecting source and destination; occupied slots swap. Matching three front-row items clears them and reveals deeper items when the row empties.
The first level displays a pointer and responds to actual moves. Undo reverses the last move. Extra Space adds room where possible. Hint highlights a valid next move without performing it. Successfully used boosters consume one charge. If empty, clicking buys three charges for 60 coins if affordable; click again to use. Rewards and stock persist locally.
In Editor and Windows builds, Left/Right arrows change games. F2 or the theme button changes appearance. Escape opens pause. The supplied WebGL demo selector is outside the game canvas and calls SortingDemoNavigation.SelectGame. This component is optional; remove it and build one scene for a standalone game. Also remove or gate the theme button and F2 behavior if you want a locked visual style.
Edit levels safely
Each Games/<Game>/Levels asset is a SortLevel ScriptableObject. Duplicate an asset, give it a useful name, and add it to the SortingGame component's levels array on the game prefab/scene. Kind must match the game. Container arrays list tube items bottom-to-top. Capacity is four in the supplied runtime. Shelf arrays list three front slots, followed by optional groups of three behind them. Zero is an empty shelf slot. Nonzero identities are 1–8. Do not exceed the supplied vessel/slot capacity without extending the prefab UI and its layout code.
Set moveLimit above a verified solution length. solution holds source/destination index pairs for introductory guidance and shelf validation. Run Tools > Pocket Sorting Games > Setup and Help > Validate all 60 level solutions after editing. The validator searches tube solutions, checks shelf solution steps, undo and hints; then inspect and play the changed scene. Its report is written to Documentation/sorting-model-validation.txt at project root. Validation may update the level's parMoves value. Automated model checks do not replace device playtesting.
The included level picker has twelve buttons. Adding more levels requires extending that UI. The current progression is authored and finite, not an infinite procedural generator.
Themes, water and art
Settings/SortingThemes.asset stores the shared palettes and sprite references. The runtime ThemeLibrary class retains its original PocketNumbers namespace as a code dependency; there are no number-game scenes in this package. Settings/LiquidThemes contains 25 profiles mapped to theme indexes for Color Lab and Garden Pour. Adjust profiles together with SortingLiquidThemes and the HorizontalLiquid / StyledGlass UI shaders. Water surfaces stay horizontally oriented during animated pours and are masked to the vessel interior. These are presentation effects, not physical fluid simulation.
Art contains the emoji facial frame atlas, vessel and object atlases and stopper. ShelfParty/Art/Unlockables contains four additional images. Keep sprite slicing and bottom pivots when replacing shelf items. Replace audio clips through the serialized SortingGame references / per-game Audio folder. Keep the matching sound index order in the clips array.
UI, persistence and customization
SortingCasualUI, SortingResponsive and SortingFeedback style and animate the saved UI hierarchy. Runtime effects and layout adjustments supplement the serialized game prefab. The screens are not constructed entirely by an external scene generator. Use the saved prefab as your starting point and preserve required references.
SortingModel owns rules; SortingGame coordinates input, rendering, state and partial-class animation systems. SortingPersistence serializes local runs. PlayerPrefs keys begin with PocketSorting.v1. Coin balance is shared across the five demos; levels and booster stock are game-specific. Use a new prefix for a separate product. Do not call DeleteAll in a customer's existing project to reset this template: target only its keys or use a disposable test profile.
SortingProbe is a development/editor-only observation helper. It does not provide live data in release builds. Its WebGL jslib publishes read-only snapshots for automated local QA. You can remove the component/script/plugin in a production fork if not needed.
Build and serve
Use the setup window to add scenes. Windows builds must be delivered with their Data folder, UnityPlayer.dll and accompanying runtime files. Never distribute only the .exe.
For WebGL install Unity's WebGL Build Support module. Recommended baseline: IL2CPP, release (Development Build off), managed stripping High, Optimize Size, 128 MB initial / 512 MB maximum memory, compression Disabled when the host cannot set compression headers. The separate provided demo uses these settings, 1920×1080 and proportional letterboxing. Serve with python ServeDemo.py from the submission folder, then open http://127.0.0.1:8080/. WebAssembly must use application/wasm MIME. No external SDK, ad service or AI service is required.
For a compressed release you may choose Brotli with correctly configured hosting, but that is not the supplied Asset Store demo. Actual download sizes are recorded in the submission verification, rather than promised to be only a few megabytes.
Limitations and troubleshooting
Pink/missing materials: install URP 17.0.4 and use the supplied pipeline. Input ignored: enable legacy Input Manager. Missing types after import: check package dependencies and duplicate script copies. Blank WebGL via file://: serve over HTTP. Missing audio: click the canvas to satisfy browser audio activation and check the in-game mute button. Browser saves are local to its origin/profile; private browsing and clearing data can remove them.
The package has no AdMob, consent service, IAP, cloud saves, multiplayer or native vibration layer. It does not install any third-party SDK. Mobile layouts exist but physical-device validation, native store submission and third-party integrations remain the developer's responsibility. Built-in and HDRP are not covered. English text is embedded in the sample; localization requires adapting UI strings and fonts.
Read Third-Party Notices.txt and all OFL.txt font licenses. Read AI Content Disclosure.txt before writing your own store listing. No reference-game videos or third-party game imagery are distributed.
Support
Questions, bug reports and feature requests: szekipapa77@gmail.com
Please include your Unity version, the game and theme you were in, and the steps that reproduce the problem.