the symptom, in your words
"Title / Ident / StartupScene fields that bite new projects"
✓ verified on 26.07.08e
lane Getting set upposted
▸ SYMPTOM
- Play loads the wrong scene (or nothing useful).
- Editor fails to boot with something like
File doesn't exist? Maybe a case sensitivity issue??fromSandbox.PackageLoader.LoadAssemblyFromPackage, looks like engine corruption. - You're unsure which
.sbprojfields matter on day one vs at publish.
▸ CAUSE
.sbproj is the package manifest. Three fields bite early:
Metadata.StartupScene: exactly what Play loads (e.g."scenes/main.scene").Org: must be a valid lowercase package ident. An uppercase TODO placeholder breaks engine bootstrap, not just publishing.Title/Ident: display name vs package identity; Ident becomes part of the publicorg.packagestory later.
Also load-bearing for architecture: TickRate: 50 (fixed update 50 Hz), and keep GameNetworkType: "Multiplayer" even for single-player so networking stays open.
▸ FIX
snippet
{
"Title": "YourGame",
"Type": "game",
"Org": "local",
"Ident": "yourgame",
"Schema": 1,
"Metadata": {
"MaxPlayers": 64,
"MinPlayers": 1,
"TickRate": 50,
"GameNetworkType": "Multiplayer",
"StartupScene": "scenes/main.scene"
}
}Rules:
- Dev: keep
"Org": "local"until a real org exists. Document publish TODOs in a doc, never parkTODO_PLACEHOLDER(or any non-ident string) inOrg. - Point
StartupSceneat a scene that actually exists underAssets/(path withoutAssets/prefix, as in the example). - Pick a stable
Identearly; treat first public publish naming carefully, see org-ident-pick-early.
▸ WHY IT WORKS
The editor mounts your project as a package using Org/Ident before your game code runs. An invalid Org fails assembly load at startup. StartupScene is the only Play entrypoint the manifest declares. Changing scenes in the asset browser without updating this field leaves Play on the old path.
Verified on engine 26.07.08e: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?
related gotchas
Pick org and ident early for sbox.game
Ident is org.package: two lowercase segments; keep Org local until real; never put TODO placeholders in Org or the editor won't boot.
Getting set up: new project skeleton
.sbproj + Assets/Code/ProjectSettings/tools layout, 4-object scene + Bootstrap, dotnet build before anything else.
Minimal scene: Sun, Skybox, Camera, Bootstrap
Scene holds four GameObjects; Bootstrap OnStart builds the world in code: hotloads better, no scene/code drift.
First successful Play: what to verify after the skeleton
Folders → sbproj → Assembly.cs → 4-object scene → green dotnet build → tagged logs on Play, then optional art tools.