-
Notifications
You must be signed in to change notification settings - Fork 464
Description
Description
Cannot Sync NetworkVariable<FixedString64Bytes>
I just updated my Projects Unity version to 2022.3.42f1 LTS from 2022.3.12f1
Everything works fine except FixedString synchronisation. Following code was working fine on Netcode 1.6.0 but now not working on 1.10.0
When I create a Network Variable by:
[HideInInspector] public NetworkVariable<FixedString64Bytes> playerNickname;
private void Awake()
{
playerNickname = new NetworkVariable<FixedString64Bytes>(new FixedString64Bytes("Nameless Jelly"), NetworkVariableReadPermission.Everyone, NetworkVariableWritePermission.Owner);
}or
[HideInInspector] public NetworkVariable<FixedString64Bytes> playerNickname = new NetworkVariable<FixedString64Bytes>(new FixedString64Bytes("Nameless Jelly"), NetworkVariableReadPermission.Everyone, NetworkVariableWritePermission.Owner);and when I change its value I get following errors:
NullReferenceException: Object reference not set to an instance of an object
Unity.Netcode.FixedStringSerializer`1[T].WriteDelta (Unity.Netcode.FastBufferWriter writer, T& value, T& previousValue) (at ./Library/PackageCache/[email protected]/Runtime/NetworkVariable/NetworkVariableSerialization.cs:701)
Unity.Netcode.NetworkVariableSerialization`1[T].WriteDelta (Unity.Netcode.FastBufferWriter writer, T& value, T& previousValue) (at ./Library/PackageCache/[email protected]/Runtime/NetworkVariable/NetworkVariableSerialization.cs:1642)
Unity.Netcode.NetworkVariable`1[T].WriteDelta (Unity.Netcode.FastBufferWriter writer) (at ./Library/PackageCache/[email protected]/Runtime/NetworkVariable/NetworkVariable.cs:199)
Unity.Netcode.NetworkVariableDeltaMessage.Serialize (Unity.Netcode.FastBufferWriter writer, System.Int32 targetVersion) (at ./Library/PackageCache/[email protected]/Runtime/Messaging/Messages/NetworkVariableDeltaMessage.cs:99)
Unity.Netcode.NetworkMessageManager.SendMessage[TMessageType,TClientIdListType] (TMessageType& message, Unity.Netcode.NetworkDelivery delivery, TClientIdListType& clientIds) (at ./Library/PackageCache/[email protected]/Runtime/Messaging/NetworkMessageManager.cs:641)
Unity.Netcode.NetworkMessageManager.SendMessage[T] (T& message, Unity.Netcode.NetworkDelivery delivery, System.UInt64 clientId) (at ./Library/PackageCache/[email protected]/Runtime/Messaging/NetworkMessageManager.cs:814)
Unity.Netcode.NetworkConnectionManager.SendMessage[T] (T& message, Unity.Netcode.NetworkDelivery delivery, System.UInt64 clientId) (at ./Library/PackageCache/[email protected]/Runtime/Connection/NetworkConnectionManager.cs:1297)
Unity.Netcode.NetworkBehaviour.NetworkVariableUpdate (System.UInt64 targetClientId, System.Int32 behaviourIndex) (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviour.cs:1004)
Unity.Netcode.NetworkBehaviour.VariableUpdate (System.UInt64 targetClientId) (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviour.cs:950)
Unity.Netcode.NetworkBehaviourUpdater.NetworkBehaviourUpdate () (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviourUpdater.cs:76)
Unity.Netcode.NetworkBehaviourUpdater.NetworkBehaviourUpdater_Tick () (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviourUpdater.cs:129)
Unity.Netcode.NetworkTickSystem.UpdateTick (System.Double localTimeSec, System.Double serverTimeSec) (at ./Library/PackageCache/[email protected]/Runtime/Timing/NetworkTickSystem.cs:102)
Unity.Netcode.NetworkTimeSystem.UpdateTime () (at ./Library/PackageCache/[email protected]/Runtime/Timing/NetworkTimeSystem.cs:141)
Unity.Netcode.NetworkManager.NetworkUpdate (Unity.Netcode.NetworkUpdateStage updateStage) (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkManager.cs:57)
Unity.Netcode.NetworkUpdateLoop.RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage updateStage) (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkUpdateLoop.cs:192)
Unity.Netcode.NetworkUpdateLoop+NetworkPreUpdate+<>c.<CreateLoopSystem>b__0_0 () (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkUpdateLoop.cs:239)
Reproduce Steps
Of course I know the part of the code I've sent in the bottom is not a good idea but whenever I update the value by doing playerNickname.Value = new FixedString64Bytes("SOMESTRING"); I get the errors I've given
[HideInInspector] public NetworkVariable<FixedString64Bytes> playerNickname = new NetworkVariable<FixedString64Bytes>(new FixedString64Bytes("Nameless Jelly"), NetworkVariableReadPermission.Everyone, NetworkVariableWritePermission.Owner);
public override void OnNetworkSpawn()
{
base.OnNetworkSpawn();
if (IsOwner)
{
StartCoroutine(GetPlayerNick());
}
}
private IEnumerator GetPlayerNick()
{
yield return new WaitForSeconds(0.5f);
string nick = "Nameless Jelly";
if (PlayerPrefs.HasKey("Nick"))
nick = PlayerPrefs.GetString("Nick");
Debug.Log("Setting nickname to " + nick);
playerNickname.Value = new FixedString64Bytes(nick);
}Actual Outcome
Those errors:
NullReferenceException: Object reference not set to an instance of an object
Unity.Netcode.FixedStringSerializer`1[T].WriteDelta (Unity.Netcode.FastBufferWriter writer, T& value, T& previousValue) (at ./Library/PackageCache/[email protected]/Runtime/NetworkVariable/NetworkVariableSerialization.cs:701)
Unity.Netcode.NetworkVariableSerialization`1[T].WriteDelta (Unity.Netcode.FastBufferWriter writer, T& value, T& previousValue) (at ./Library/PackageCache/[email protected]/Runtime/NetworkVariable/NetworkVariableSerialization.cs:1642)
Unity.Netcode.NetworkVariable`1[T].WriteDelta (Unity.Netcode.FastBufferWriter writer) (at ./Library/PackageCache/[email protected]/Runtime/NetworkVariable/NetworkVariable.cs:199)
Unity.Netcode.NetworkVariableDeltaMessage.Serialize (Unity.Netcode.FastBufferWriter writer, System.Int32 targetVersion) (at ./Library/PackageCache/[email protected]/Runtime/Messaging/Messages/NetworkVariableDeltaMessage.cs:99)
Unity.Netcode.NetworkMessageManager.SendMessage[TMessageType,TClientIdListType] (TMessageType& message, Unity.Netcode.NetworkDelivery delivery, TClientIdListType& clientIds) (at ./Library/PackageCache/[email protected]/Runtime/Messaging/NetworkMessageManager.cs:641)
Unity.Netcode.NetworkMessageManager.SendMessage[T] (T& message, Unity.Netcode.NetworkDelivery delivery, System.UInt64 clientId) (at ./Library/PackageCache/[email protected]/Runtime/Messaging/NetworkMessageManager.cs:814)
Unity.Netcode.NetworkConnectionManager.SendMessage[T] (T& message, Unity.Netcode.NetworkDelivery delivery, System.UInt64 clientId) (at ./Library/PackageCache/[email protected]/Runtime/Connection/NetworkConnectionManager.cs:1297)
Unity.Netcode.NetworkBehaviour.NetworkVariableUpdate (System.UInt64 targetClientId, System.Int32 behaviourIndex) (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviour.cs:1004)
Unity.Netcode.NetworkBehaviour.VariableUpdate (System.UInt64 targetClientId) (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviour.cs:950)
Unity.Netcode.NetworkBehaviourUpdater.NetworkBehaviourUpdate () (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviourUpdater.cs:76)
Unity.Netcode.NetworkBehaviourUpdater.NetworkBehaviourUpdater_Tick () (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkBehaviourUpdater.cs:129)
Unity.Netcode.NetworkTickSystem.UpdateTick (System.Double localTimeSec, System.Double serverTimeSec) (at ./Library/PackageCache/[email protected]/Runtime/Timing/NetworkTickSystem.cs:102)
Unity.Netcode.NetworkTimeSystem.UpdateTime () (at ./Library/PackageCache/[email protected]/Runtime/Timing/NetworkTimeSystem.cs:141)
Unity.Netcode.NetworkManager.NetworkUpdate (Unity.Netcode.NetworkUpdateStage updateStage) (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkManager.cs:57)
Unity.Netcode.NetworkUpdateLoop.RunNetworkUpdateStage (Unity.Netcode.NetworkUpdateStage updateStage) (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkUpdateLoop.cs:192)
Unity.Netcode.NetworkUpdateLoop+NetworkPreUpdate+<>c.<CreateLoopSystem>b__0_0 () (at ./Library/PackageCache/[email protected]/Runtime/Core/NetworkUpdateLoop.cs:239)
And when I get value of playerNickname I just get the default value I initialised it with.
Expected Outcome
After I do playerNickname.Value = new FixedString64Bytes("SOMESTRING"); I expect change of that string value.
Screenshots
Just to show timing of errors:

Environment
- OS: Ubuntu 24.04 LTS (x86_64) & Nvidia Driver Version: 550.90.07
- Unity Version: 2022.3.42f1 LTS
- Netcode Version: 1.10.0