DOTSNET icon indicating copy to clipboard operation
DOTSNET copied to clipboard

DistanceInterestManagementSystem / NetworkClientSystem spawning networked entities that have not been spawned on the server

Open Ro4m3r opened this issue 4 years ago • 1 comments

Reproduction steps:

  1. Add NetworkServerSystem, TransportServerSystem, DistanceInterestManagementSystem to Server
  2. Add NetworkClientSystem, TransportClientSystem, SpawnMessageSystem, UnspawnMessageSystem to Client
  3. Start the Server
  4. Connect with the Client
  5. Instantiate a prefab with a NetworkIdentity from the prefab manager on the server
  6. Spawn it on the server with authority given to the client (this will also spawn it on the server)
  7. Instantiate a prefab with a NetworkIdentity from the prefab manager on the server (without spawning it)
  8. The entity with netid==0 will be spawned on the client

If there is trouble reproducing the issue I can add a reproduction project (omitting the DOTSNET package)

Edit: Adding this here from my discord message

I would suggest adding a Spawned component to entities that have been spawned on the server. This makes it more clear what NetworkServerSystem.Spawn() actually does (since the actual spawn messages are created by an InterestManagementSystem).

NetworkServerSystem.Spawn would add the Spawned component, and NetworkServerSystem.Unspawn would remove it. This would also make it easier to iterate over only spawned entities as the components would be linearly laid out in memory and make better use of cache levels. InterestManagementSystems would then only iterate over entities with the Spawned component. It would also make it easier to only look at spawned entities in the entity debugger on the server world, as spawned and non-spawned entities would be in separate archetypes.

Ro4m3r avatar Jun 12 '21 22:06 Ro4m3r

Tagging @vis2k

Ro4m3r avatar Jun 21 '21 11:06 Ro4m3r