- Home /
SyncVars stop working after restarting Host
I have just started using the networking HLAPI, this issue might just be my lack of understanding. This is a test project to broaden my understanding of Unity's networking system. Please help me see what is going wrong here.
I have two instances of my application running. The application has a 'chatbox' (`_client.Send()`) and a 'timer (`[SyncVar]`). On both the chatbox and the timer, I have a NetworkIdentity set.
Using the NetworkManagerHUD, I select one of the applications as Host, and one as a Client.
Works perfect, my code allows messages to be sent and received, and using a SyncVar, the timer on screen stays updated.
-If I disconnect the Client, the chatbox and timer disappear (expected for NetworkIdentity objects), and if I reconnect the Client, automatically enable again, the chatbox works, the timer jumps to the correct value.
-If I disconnect the Host, restart the Client as the new Host, and set the old Host as the Client, everything works just fine but in reverse. Same as above.
-If I disconnect the Host, and start the -same- Host, and then reconnect the Client, it messes up.
First of all, the chatbox and the timer stay disabled and won't enable again even after connecting. (debug shows connecting worked).
If I manually enable them through the editor and then send a message from the Host, the chatbox seems to work just fine (ergo, connection worked), messages are sent, received and printed.
However, the timer stays not working. Setting a breakpoint in the code also shows that the var isn't updated, and the editor also shows the SyncVar value stays zero.
-Restarting the Host app completely fixes the issue and allows the Client to sync fully again. Restarting the Client app doesn't affect anything.
For reference, the code. This is all.
public class GameManager : NetworkBehaviour
{
[SyncVar]
public float GameTime;
void Update () {
if (!isServer) return;
GameTime += Time.deltaTime;
}
}
Thank you for your reply.
EDIT: I've been debugging some.
public class GameManager : NetworkBehaviour
{
[SyncVar]
public float GameTime;
void Update () {
if (!isServer) return;
GameTime += Time.deltaTime;
}
public override bool OnSerialize(NetworkWriter writer, bool initialState)
{
return true;
}
}
Playing a breakpoint on return true;
there is being called no problem the first time I start the Host. When I Stop and then restart the host, the breakpoint is no longer being hit.
In other words, OnSerialize stops being called when the Host restarts. (I know using an OnSerialize override stops SyncVars natural syncing from working. The point being that it isn't even being called)
Could be a hint for a possible solution. :(
EDIT2: Moved to Photon.
Your answer
Follow this Question
Related Questions
Service Unavailable, Please Try Again Later popping up for 2 days now 0 Answers
Network.Connect returns NoError but no connection? 0 Answers
Best way to sync scene with new connections? 0 Answers
Can't Establish connection using NetworkTransport 0 Answers
Unity Asset Store cannot download assets 0 Answers