Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NRE Transform for Predicted pooled objects #792

Closed
f2069 opened this issue Oct 9, 2024 · 3 comments
Closed

NRE Transform for Predicted pooled objects #792

f2069 opened this issue Oct 9, 2024 · 3 comments

Comments

@f2069
Copy link
Contributor

f2069 commented Oct 9, 2024

General
Unity version: 2021.3.18f1
Fish-Networking version: 4.5.0R Pro
Discord link: https://discord.com/channels/424284635074134018/1293524096423825439

Description
In the example, the server and client load the global game scene.
After the client initializes, both start spawning SimpleBullet every 300ms.
The SimpleBullet is a pooled object that allows for predicting spawn/despawn.
The blue bullet in the screenshots represents is own object, while the grey one represents the other player.

After several seconds, numerous NRE appear on both the server and client, along with some strange warnings. All network objects are spawned.

Replication
Steps to reproduce the behaviour:

  1. Open the "NrePredict.Menu" scene in both windows;
  2. Start the Server and Client in one window and Client in other;
  3. Press the "Load Scene" button on Server;
  4. Wait and see errors in both windows;

Expected behavior
No NRE, correct spawn and sync objects position.

Video
Spawn both: https://youtu.be/Lxzno9cXi5k
Spawn only client: https://youtu.be/GDXOvcaCP-g

Package
NrePredict.Report.091024.unitypackage.zip

Screenshots

  • Network Manager settings
Network Manager settings
  • Bullet settings
Снимок экрана 2024-10-09 в 14 16 17

Spawn bullet

private void SpawnBullet(Vector3 screenPosition)
{
    // ....
    var poolItem = InstanceFinder.NetworkManager.GetPooledInstantiated(
        prefab.NetworkObject, position, rotation, IsServerStarted);

    Spawn(poolItem, LocalConnection);
}

Despawn bullet

private void OnCollisionEnter(Collision _)
{
    if (_exploded)
    {
        return;
    }

    _exploded = true;
    gameObject.SetActive(false);
}

private void OnDisable()
{
    if (IsSpawned)
    {
        Despawn(NetworkObject);
    }
}
Server error 1 (NRE SendToServer)
NullReferenceException: Object reference not set to an instance of an object
FishNet.Component.Transforming.NetworkTransform.GetChanged (FishNet.Component.Transforming.NetworkTransform+TransformData transformData) (at Assets/FishNet/Runtime/Generated/Component/NetworkTransform/NetworkTransform.cs:1793)
FishNet.Component.Transforming.NetworkTransform.SendToServer (FishNet.Component.Transforming.NetworkTransform+TransformData lastSentTransformData) (at Assets/FishNet/Runtime/Generated/Component/NetworkTransform/NetworkTransform.cs:1705)
FishNet.Component.Transforming.NetworkTransform.TimeManager_OnPostTick () (at Assets/FishNet/Runtime/Generated/Component/NetworkTransform/NetworkTransform.cs:897)
FishNet.Managing.Timing.TimeManager.IncreaseTick () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:724)
FishNet.Managing.Timing.TimeManager.<TickUpdate>g__MethodLogic|100_0 () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:376)
FishNet.Managing.Timing.TimeManager.TickUpdate () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:366)
FishNet.Transporting.NetworkReaderLoop.Update () (at Assets/FishNet/Runtime/Transporting/NetworkReaderLoop.cs:28)
Server error 2 (NRE SendToClients)
NullReferenceException: Object reference not set to an instance of an object
FishNet.Component.Transforming.NetworkTransform.SendToClients () (at Assets/FishNet/Runtime/Generated/Component/NetworkTransform/NetworkTransform.cs:1639)
FishNet.Component.Transforming.NetworkTransform.TimeManager_OnPostTick () (at Assets/FishNet/Runtime/Generated/Component/NetworkTransform/NetworkTransform.cs:894)
FishNet.Managing.Timing.TimeManager.IncreaseTick () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:724)
FishNet.Managing.Timing.TimeManager.<TickUpdate>g__MethodLogic|100_0 () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:376)
FishNet.Managing.Timing.TimeManager.TickUpdate () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:366)
FishNet.Transporting.NetworkReaderLoop.Update () (at Assets/FishNet/Runtime/Transporting/NetworkReaderLoop.cs:28)
Client error (NRE OnStartNetwork)
NullReferenceException: Object reference not set to an instance of an object
FishNet.Component.Transforming.NetworkTransform.OnStartNetwork () (at Assets/FishNet/Runtime/Generated/Component/NetworkTransform/NetworkTransform.cs:634)
FishNet.Object.NetworkBehaviour.OnStartNetwork_Internal () (at Assets/FishNet/Runtime/Object/NetworkBehaviour.Callbacks.cs:94)
FishNet.Object.NetworkBehaviour.InvokeOnNetwork (System.Boolean start) (at Assets/FishNet/Runtime/Object/NetworkBehaviour.Callbacks.cs:79)
FishNet.Object.NetworkObject.InvokeStartCallbacks (System.Boolean asServer, System.Boolean invokeSyncTypeCallbacks) (at Assets/FishNet/Runtime/Object/NetworkObject.Callbacks.cs:39)
FishNet.Object.NetworkObject.Initialize (System.Boolean asServer, System.Boolean invokeSyncTypeCallbacks) (at Assets/FishNet/Runtime/Object/NetworkObject.cs:1012)
FishNet.Managing.Client.ClientObjectCache.Iterate () (at Assets/FishNet/Runtime/Managing/Client/Object/ObjectCaching.cs:438)
FishNet.Managing.Client.ClientObjects.IterateObjectCache () (at Assets/FishNet/Runtime/Managing/Client/Object/ClientObjects.cs:490)
FishNet.Managing.Client.ClientManager.ParseReader (FishNet.Serializing.PooledReader reader, FishNet.Transporting.Channel channel, System.Boolean print) (at Assets/FishNet/Runtime/Managing/Client/ClientManager.cs:538)
FishNet.Managing.Client.ClientManager.ParseReceived (FishNet.Transporting.ClientReceivedDataArgs args) (at Assets/FishNet/Runtime/Managing/Client/ClientManager.cs:385)
FishNet.Managing.Client.ClientManager.Transport_OnClientReceivedData (FishNet.Transporting.ClientReceivedDataArgs args) (at Assets/FishNet/Runtime/Managing/Client/ClientManager.cs:343)
FishNet.Transporting.Tugboat.Tugboat.HandleClientReceivedDataArgs (FishNet.Transporting.ClientReceivedDataArgs receivedDataArgs) (at Assets/FishNet/Runtime/Transporting/Transports/Tugboat/Tugboat.cs:245)
FishNet.Transporting.Tugboat.Client.ClientSocket.IterateIncoming () (at Assets/FishNet/Runtime/Transporting/Transports/Tugboat/Core/ClientSocket.cs:295)
FishNet.Transporting.Tugboat.Tugboat.IterateIncoming (System.Boolean server) (at Assets/FishNet/Runtime/Transporting/Transports/Tugboat/Tugboat.cs:218)
FishNet.Managing.Transporting.TransportManager.IterateIncoming (System.Boolean server) (at Assets/FishNet/Runtime/Managing/Transporting/TransportManager.cs:705)
FishNet.Managing.Timing.TimeManager.TryIterateData (System.Boolean incoming) (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:1064)
FishNet.Managing.Timing.TimeManager.IncreaseTick () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:708)
FishNet.Managing.Timing.TimeManager.<TickUpdate>g__MethodLogic|100_0 () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:376)
FishNet.Managing.Timing.TimeManager.TickUpdate () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:366)
FishNet.Transporting.NetworkReaderLoop.Update () (at Assets/FishNet/Runtime/Transporting/NetworkReaderLoop.cs:28)
Client error (RPCLink not be found)
RPCLink of Id 28 could not be found. Remaining data will be purged.
UnityEngine.Debug:LogError (object)
FishNet.Managing.Logging.LevelLoggingConfiguration:LogError (string) (at Assets/FishNet/Runtime/Managing/Logging/LevelLoggingConfiguration.cs:129)
FishNet.Managing.NetworkManager:InternalLogError (string) (at Assets/FishNet/Runtime/Managing/NetworkManager.Logging.cs:83)
FishNet.Managing.NetworkManagerExtensions:LogError (FishNet.Managing.NetworkManager,string) (at Assets/FishNet/Runtime/Managing/NetworkManager.Logging.cs:146)
FishNet.Managing.Object.ManagedObjects:SkipDataLength (uint16,FishNet.Serializing.PooledReader,int,int) (at Assets/FishNet/Runtime/Managing/Object/ManagedObjects.cs:381)
FishNet.Managing.Client.ClientObjects:ParseRpcLink (FishNet.Serializing.PooledReader,uint16,FishNet.Transporting.Channel) (at Assets/FishNet/Runtime/Managing/Client/Object/ClientObjects.RpcLinks.cs:42)
FishNet.Managing.Client.ClientManager:ParseReader (FishNet.Serializing.PooledReader,FishNet.Transporting.Channel,bool) (at Assets/FishNet/Runtime/Managing/Client/ClientManager.cs:456)
FishNet.Managing.Client.ClientManager:ParseReceived (FishNet.Transporting.ClientReceivedDataArgs) (at Assets/FishNet/Runtime/Managing/Client/ClientManager.cs:385)
FishNet.Managing.Client.ClientManager:Transport_OnClientReceivedData (FishNet.Transporting.ClientReceivedDataArgs) (at Assets/FishNet/Runtime/Managing/Client/ClientManager.cs:343)
FishNet.Transporting.Tugboat.Tugboat:HandleClientReceivedDataArgs (FishNet.Transporting.ClientReceivedDataArgs) (at Assets/FishNet/Runtime/Transporting/Transports/Tugboat/Tugboat.cs:245)
FishNet.Transporting.Tugboat.Client.ClientSocket:IterateIncoming () (at Assets/FishNet/Runtime/Transporting/Transports/Tugboat/Core/ClientSocket.cs:295)
FishNet.Transporting.Tugboat.Tugboat:IterateIncoming (bool) (at Assets/FishNet/Runtime/Transporting/Transports/Tugboat/Tugboat.cs:218)
FishNet.Managing.Transporting.TransportManager:IterateIncoming (bool) (at Assets/FishNet/Runtime/Managing/Transporting/TransportManager.cs:705)
FishNet.Managing.Timing.TimeManager:TryIterateData (bool) (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:1064)
FishNet.Managing.Timing.TimeManager:IncreaseTick () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:708)
FishNet.Managing.Timing.TimeManager:<TickUpdate>g__MethodLogic|100_0 () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:376)
FishNet.Managing.Timing.TimeManager:TickUpdate () (at Assets/FishNet/Runtime/Managing/Timing/TimeManager.cs:366)
FishNet.Transporting.NetworkReaderLoop:Update () (at Assets/FishNet/Runtime/Transporting/NetworkReaderLoop.cs:28)
@FirstGearGames
Copy link
Owner

Is this new to 4.5.0 or have you always had this issue?

@FirstGearGames FirstGearGames added the Waiting For Information Not enough information has been supplied to resolve this issue. label Oct 11, 2024
@f2069
Copy link
Contributor Author

f2069 commented Oct 11, 2024

Is this new to 4.5.0 or have you always had this issue?

Error in SendToServer always has been. At least since version 3.11.x
Errors in SendToClients, OnStartNetwork, RPCLink - something new.

@FirstGearGames
Copy link
Owner

FirstGearGames commented Oct 11, 2024

This does seem to only happen on pooled objects, while clientHost. I'm not 100% sure if predicted spawning is part of the problem.

None the less, long as there isn't another sneaky scenario, it appears to be resolved in 4.5.1 (release pending).

@FirstGearGames FirstGearGames added Resolved Pending Release and removed Waiting For Information Not enough information has been supplied to resolve this issue. labels Oct 11, 2024
FirstGearGames pushed a commit that referenced this issue Oct 12, 2024
- Fixed nested scene NetworkObjects not spawning (#791).
- Added 'Rebuild Selected Scene's Ids' (#789).
- Improved SyncList, removed unused code. (#785).
- Fixed incorrect equality check in SyncList.Set (#784).
- Improved readability for clientHost renderer update methods.
- Improved Dictionaries utilities, removed unused code.
- Fixed collection modified error in ServerObjects.Observers, introduced in 4.5.0 dev branch.
- Fixed NetworkTransform sometimes causing null reference errors with predicted spawning (#792).
- Fixed predicted spawning no longer sends spawn message back to predicted spawner; only confirmation message.
- Improved removed unused code in NetworkAnimator.
- Fixed null check order on NetworkAnimator._canSynchronizeAnimator (#794).
FirstGearGames pushed a commit that referenced this issue Oct 12, 2024
- Fixed nested scene NetworkObjects not spawning (#791).
- Added 'Rebuild Selected Scene's Ids' (#789).
- Improved SyncList, removed unused code. (#785).
- Fixed incorrect equality check in SyncList.Set (#784).
- Improved readability for clientHost renderer update methods.
- Improved Dictionaries utilities, removed unused code.
- Fixed collection modified error in ServerObjects.Observers, introduced in 4.5.0 dev branch.
- Fixed NetworkTransform sometimes causing null reference errors with predicted spawning (#792).
- Fixed predicted spawning no longer sends spawn message back to predicted spawner; only confirmation message.
- Improved removed unused code in NetworkAnimator.
- Fixed null check order on NetworkAnimator._canSynchronizeAnimator (#794).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants