SyncVar works fine when Time.timeScale is greater than 0. When Time.timescale is set to 0 the SyncVar seems to only receive the first value, and ignore any value after that. When timeScale is set to greater than 0 the latest value is then synced.
How to reproduce it:
Create a value with a SyncVar in a network enabled application.
Sync it’s value to see that it’s working.
Set Time.timeScale to 0.
Sync it’s value, it should work the first time.
Sync it’s value again. it should not update this time.
What seems to be happening to me is that the syncvar is going off of game time (Time.time) instead of real time to compare which sync message to use. Since all messages with Time.timeScale set to 0 will have the same game time it only uses the first.
What I expect to happen is that SyncVars will continue to sync even when Time.timeScale equals 0.