Guten Abend,
ich sitze auch zurzeit an der Networking API und habe schon das ein oder andere Problem gehabt.
In deinem Fall liegt das Problem daran, dass du nur das lokale Spielerobjekt bewegst (indirekt durch den rigidbody). Die Velocity ändert sich auf dem Server nicht und daher bewegt sich auch das Objekt auf dem Server nicht. Wenn du nun CmdMove() ausführst, wird der state einfach einfach auf die Position x und y gesetzt, die sich auf dem Server nicht geändert hat. Um dem Server die geänderte Position mitzuteilen, musst du die neuen float Werte mit CmdMove(float x, float y) an den Server senden. Dieser kann sie dann für die anderen Spieler synchronisieren.
Statt in jedem Frame SyncState() aufzurufen, kannst du übrigens die Funktion als hook definieren:
|
C#-Quelltext
|
1
2
|
[SyncVar (hook = "SyncState")]
RacketState state;
|
Damit wird SyncState jedes mal dann aufgerufen, wenn sich state geändert hat. Ich vermute, dass die Variable auch an den Spieler zurück synchronisiert wird. Wenn dann die Hook aufgerufen wird, darf der Lokale Spieler natürlich nicht seine Position zurück ändern. Sonst kommt es bei netzwerkbedingter Verzögerung zu einem Stottern beim Spieler, wenn dieser immer wieder auf die vorherige Position zurückgesetzt wird.
Also quasi einfach:
|
C#-Quelltext
|
1
2
3
4
5
|
void SyncState() {
if(!isLocalPlayer) {
transform.position = new Vector2(state.x, state.y);
}
}
|
Ich hoffe das hilft, bin selber noch nicht so fit mit der API.