Unity-Technologies / Unity-Technologies/com.unity.netcode.gameobjects
IsOwner is False on owning Client when spawning object during ConnectionApproval.
Nessuno ha ancora preso questa issue.
- Lingua principale
- C#
- Stelle
- 2.3k
- Fork
- 461
- Merge medio
- 3g 16h
- PR unite (30g)
- 20
Descrizione
Description
When spawning a Player object and a Player Owned object during Connection Approval, the Network Behaviors on the Clients GameObjects report IsOwner as being false, while the Network Object reports IsOwner as true.
It seems based on my repro project that the client receives the CreateObjectMessages for their Player and Owned object before their ConnectionApproved message. This causes the client to not have an assigned clientId so when the Network Behaviours initialze, they set IsOwner as false (Although, the Network Object seems to include IsOwner as part of its serialized data). My guess is that this is some kind of knock on from distributed authority being added to the library (I am 99% certain I have done what is happening in this repro here in other projects from a couple years ago...)
I think that the fix here (at least if I was to rework my code) would be to do all spawning once the connection is approved and once the client reports they are ready to get their objects (somehow)
I have included a small repro project with this report.
Reproduce Steps
Download the repro project.
ownership_issue_repro.zip
- Go to Scenes and open Bootstrap
- Click the MPPM dropdown near the play button and select "Client - Direct Connection"
- Click Play, and wait for the client to connect to the host.
- Find their Player(clone) or ClientObject(clone) object in the hierarchy, note that IsOwner is True on the Network Object.
- Switch inspector to Debug mode, and look at the IsOwner field on the attached network behaviors. Note that it is set to false.
- Additionally, note that some random network objects are in the hierarchy, which were never spawned.
Actual Outcome
Objects spawned during ConnectionApproval are incorrectly set as IsOwner = false;
Expected Outcome
Either an error / warning is called when spawning with ownership for a none approved client OR the spawn messages are only sent once the approval is complete and the client has their clientId
Environment
- OS: Windows 11
- Unity Version: 6000.0.60f1
- Netcode Version: 2.7.0
- Netcode Topology: Client-Server
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con il file ownership_issue_repro.zip incluso e riproduci il problema tramite la Bootstrap scene usando la configurazione Client - Direct Connection. Traccia ConnectionApproval, CreateObjectMessages, l’assegnazione di clientId e l’inizializzazione di Network Behavior; il lavoro è completato quando gli oggetti generati durante l’approvazione riportano una proprietà coerente, senza che compaiano oggetti non generati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- csharp, unity
- Ambito
- networking
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100