- Home /
Question by
kalelovil · Mar 23, 2016 at 01:44 PM ·
errormultiplayerspawningsynchronization5.3
Multiplayer Custom Object Spawning (ClientScene.RegisterSpawnHandler) Out Of Sync Error
I am trying to spawn an object across the network.
This object is defined by configuration data loaded at runtime, so as far as I can tell I cannot use the ClientScene.RegisterPrefab() -> NetworkServer.Spawn() protocol.
As an alternative the Unity Scripting API suggests using ClientScene.RegisterSpawnHandler().
However, in attempting to use it within some stripped-down testing code I keep being stopped by the following error:
InvalidOperationException: out of sync
System.Collections.Generic.Dictionary`2+Enumerator[UnityEngine.Networking.NetworkInstanceId,UnityEngine.Networking.NetworkIdentity].VerifyState () (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:912)
System.Collections.Generic.Dictionary`2+Enumerator[UnityEngine.Networking.NetworkInstanceId,UnityEngine.Networking.NetworkIdentity].MoveNext () (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:835)
System.Collections.Generic.Dictionary`2+ValueCollection+Enumerator[UnityEngine.Networking.NetworkInstanceId,UnityEngine.Networking.NetworkIdentity].MoveNext () (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Collections.Generic/Dictionary.cs:1145)
UnityEngine.Networking.NetworkServer.ActivateLocalClientScene () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkServer.cs:361)
UnityEngine.Networking.ClientScene.ConnectLocalServer () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/ClientScene.cs:299)
UnityEngine.Networking.NetworkManager.ConnectLocalClient () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManager.cs:538)
UnityEngine.Networking.NetworkManager.StartHost () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManager.cs:526)
UnityEngine.Networking.NetworkManagerHUD.OnGUI () (at C:/buildslave/unity/build/Extensions/Networking/Runtime/NetworkManagerHUD.cs:80)
The code I am using is as follows (the error occurs on the NetworkServer.Spawn line):
// Runs on Local Host
private void SpawnLocation(GameObject type, Vector2 pos, string ownerTag, string controllerTag, int level)
{
GameObject testObj = new GameObject();
testObj.AddComponent<NetworkIdentity>();
NetworkHash128 testAssetId = NetworkHash128.Parse("e2656f");
RpcRegisterCustomLocationSpawner();
NetworkServer.Spawn(testObj, testAssetId);
}
[ClientRpc]
private void RpcRegisterCustomLocationSpawner()
{
NetworkHash128 testAssetId = NetworkHash128.Parse("e2656f");
ClientScene.RegisterSpawnHandler(testAssetId, SpawnCustomLocation, UnspawnCustomLocation);
}
private GameObject SpawnCustomLocation(Vector3 position, NetworkHash128 testAssetId)
{
GameObject testObj = new GameObject();
testObj.AddComponent<NetworkIdentity>();
return testObj;
}
private void UnspawnCustomLocation(GameObject obj)
{
obj.SetActive(false);
}
Comment