Languages: English · Русский · Bahasa Indonesia
This Unity project is a template for building your own custom maps for Evertech Sandbox. Open it, edit the scene, build, and drop the result into the game.
- Unity 2022 — use the version this template ships with (2022.3.x). Any 2022.x works; the game only checks the major year. (See Unity version below.)
- The render pipeline is URP — already set up. Don't switch it.
| Path | What it is |
|---|---|
Assets/Scene.unity |
The map scene. This is what gets built into the map. Its AssetBundle name is scene — keep it. |
Assets/MapScripts/ |
Map markers (PlayerSpawnPoint, WaterLevel, LadderVolume). |
Assets/MapSDK/ |
The Map Settings SDK — lets you expose in-game settings, no coding. |
Assets/Editor/AssetBundleCreator.cs |
The build tool (menu Custom Tools → Build Map …). |
Assets/AssetBundles/ |
Build output + your info.json and preview.png. This folder becomes your map. |
When you open Assets/Scene.unity you'll see a working example. Study it, then delete
--- Map Settings Example (delete me) --- and build your own.
Edit Assets/Scene.unity freely — terrain, props, lighting, etc.
⚠️ Do NOT add a Camera. The game supplies the player and camera.⚠️ Keep everything in this one scene — onlyAssets/Scene.unityis built into the map.
- Player Spawn Point — empty GameObject + component
PlayerSpawnPoint. Sets where the player appears and which way they face (the blue Z / forward axis). Optional — without it the player spawns at the default position (world origin). - Water Level — empty GameObject + component
WaterLevel. The object's world Y becomes the water surface height. Optional — without it the game uses its built-in default water level.- When the camera goes below this Y the game shows its underwater screen effect (a colored overlay).
- Custom underwater look (optional): tick Override Appearance to set your own Tint Color (RGB; alpha = strength) and toggle the Play Sound ambience. Leave it off and the map keeps the game's default underwater look.
- Ladder climb zone — GameObject + component
LadderVolume(adds a BoxCollider automatically). An invisible trigger volume placed in front of a vertical ladder — it is not the ladder, just the "grab" zone the player walks into to start climbing (like the built-in ladders).- The ladder itself still needs its own solid collider — one flat, wall-like collider over
the whole ladder (not one per rung) so the climbing player presses against it and doesn't
fall through.
LadderVolumeis trigger-only and does not provide this. - Put this box just in front of that solid surface, sized to the reachable climb area (slight overlap with the ladder is fine).
- Keep the object upright; the player climbs along its local Up (green Y) axis.
- 👉 See the ready-made
Ladderexample inAssets/Scene.unity: a solid wall-like collider (Ladder) with the visible rungs as children, and aLadderVolumetrigger sitting right in front of it. Copy that setup for your own ladders.
- The ladder itself still needs its own solid collider — one flat, wall-like collider over
the whole ladder (not one per rung) so the climbing player presses against it and doesn't
fall through.
The SDK lets players tweak your map from the in-game World Settings panel.
Add one empty GameObject with the MapSettingsDeclaration component and fill its settings list.
Each entry is one setting:
| Type | Shows as | Fields you fill |
|---|---|---|
| Bool | Toggle | key, label, defaultBool |
| Slider | Slider | key, label, min, max, step (0 = smooth), defaultFloat |
| Enum | Dropdown | key, label, options[], defaultOption |
key is a unique id (e.g. showDecorations). label is the text players see.
Add any of these components and point their key at a setting you declared:
| Component | Works with | What it does |
|---|---|---|
SettingToggleObject |
Bool | Shows/hides the GameObjects in targets. |
SettingEnumObjects |
Enum | Activates one object from optionObjects per option (index matches option order). |
SettingSwapMaterial |
Bool / Enum | Swaps the materials on the listed renderers (Bool: 0 = off, 1 = on; Enum: index = option). |
MapSettingBinding |
Any | Generic. Wire its onBool / onFloat / onOption UnityEvent in the Inspector to anything built-in. |
Slider settings have no dedicated receiver — use
MapSettingBinding: set itskeyto your slider, then in the Inspector drag a target into theonFloatevent and pick a float setter (e.g.Light.intensity,AudioSource.volume). The event fires once on load and on every change.
Keep keys unique and identical between the declaration and the receivers/bindings.
There's a live example in the scene under --- Map Settings Example (delete me) ---
(a Bool toggle showing/hiding cubes, and an Enum switching between shapes). Delete that whole object before shipping.
Edit these two files in Assets/AssetBundles/:
info.json(required — a map with noinfo.jsonwon't show up in the game){ "name": "My Map Name", "author": "YourName", "version": "1.0", "description": "Short description shown in the map browser" }preview.png— the thumbnail shown on the map card. Keep it small — around 300×200 is plenty. Don't ship a huge full-resolution screenshot; it just bloats the map.
Menu: Custom Tools → Build Map for all platforms For a quick single-platform test there are also Build Map for Android only, Build Map for Windows only, and Build Map for iOS only — but each only build clears the other platforms' output first and rebuilds just that one.
This writes the AssetBundles into Assets/AssetBundles/<Platform>/ for every platform the game uses:
Android, Windows64, iOS.
The game expects a map folder shaped like this — info.json and preview.png at the root, one folder per platform, each holding just the scene file:
<MyMap>/
info.json
preview.png
Android/scene
Windows64/scene
iOS/scene
Good news: after building, Assets/AssetBundles/ already contains info.json, preview.png
and the platform folders — so it is your map folder. Just copy it out and rename it to your map.
The folder name is the map's id, so give it something unique.
Each platform folder only needs the file named
scene. The extra*.manifestfiles and the folder-named bundle files are build leftovers — you can delete them to keep the map clean (the game ignores them).
Put your <MyMap> folder into the game's maps folder, then start the game — it shows up in the
Maps list, where you can Open it.
The maps folder is inside the game's save data:
- Windows:
%USERPROFILE%\AppData\LocalLow\IronTube Games\Evertech Sandbox\maps\ - Mobile: the app's persistent data folder,
…/Evertech Sandbox/maps/
So the final path is e.g.
…\Evertech Sandbox\maps\<MyMap>\info.json, …\maps\<MyMap>\Windows64\scene, etc.
The game checks the major year of the Unity used to build the map (it must be 2022).
- Building on any 2022.x patch is fine — small differences (e.g.
2022.3.56vs2022.3.62) at most cause minor visual differences. - Building on a different major version (2021, 2023, 6000, …) makes the game flag the map as not supported in the maps list. Stick to 2022.
- ❌ Added a Camera to the scene → the game already has one. Remove it.
- ❌ Renamed
Assets/Scene.unityor changed its AssetBundle name → it must stayscene. - ❌
info.json/preview.pngplaced inside a platform folder → they go in the root of the map folder. - ❌ Missing
info.json→ the map won't appear in the game's list at all. - ❌ Two settings sharing the same
key, or a receiverkeynot matching the declaration.