Release
Nebula 0.1.0-beta.0
Nebula's first beta follows alpha.32. You can now test a multiplayer change by pressing Play, without building a player. A behavior can send its state only to the players who should see it, and a procedural world can remember which rocks were mined.
Play without a build
Set NebulaConfig.EditorRunMode to MultiplayerPlayMode and enable one virtual player in Unity's Multiplayer Play Mode. When you press Play, the virtual player runs the server in its own Editor process: the orchestrator, the gateway, and one worker. The main Editor joins it as a client.
The server keeps persistent entities in a save file in your project's Library folder from one Play to the next. Nebula > Dev Loop > Reset Dev Saves starts over. The dev loop uses its own ports, so it can run next to a mesh started with nebula start, and the client joins only the server its own session started.
One worker cannot test handovers between workers. Use nebula start for those.
Keep sync state private
A NetworkBehaviour can now choose which clients receive its sync state. Override SyncAudience with Owner for state that only its player should see, such as an inventory, WorkersOnly for state no client needs, or Custom for a rule of your own, such as teammates only. Everyone remains the default.
The gateway filters every message it sends, including the state a late joiner starts from, so a client outside the audience never receives the bytes. NetworkVariables are not filtered: every client that holds the entity still receives them.
Save changes to procedural objects
A world that places trees, rocks, or resource nodes from a chunk's seed can now record what players changed without making each object an entity. ChunkState reads an object's entry on any process, and a worker writes through NebulaWorker.ChunkStates. CompareAndSet runs on the worker that holds the chunk, so two players cannot both take the last unit of a node.
An entry can expire, which lets a node grow back. A chunk that no one changed saves and sends nothing.
Save procedural object stateChoose a worker's port with PORT
A worker now reads its listen port from -nebula-port, then the PORT environment variable, then WorkerBasePort plus its index. A host that runs one worker per machine can set the port without a command-line switch.
Fixes
- A pawn brought back with
Applykept an old epoch, so every save of it was refused for the rest of the session. It now continues its record's epoch, and the stores log a warning when they refuse a save. - A gateway or worker whose port was taken threw an exception on every frame. It now logs one error that names the port and stops.
- In a single-process run, the orchestrator could erase the scopes its worker had just activated. It now resets the control plane before the worker starts.
Upgrade to the beta
0.1.0-beta.0 uses wire protocol 20. A gateway still admits clients of protocol 19, so players on an alpha.31 or alpha.32 build can keep playing, but they are not told when they leave a sync audience. Gateways and workers of one mesh must run the same build. Nebula now reserves network prefab ids from 0xFF00 for its own prefabs, so move any of your prefabs that use them.