Commit Graph

6066 Commits

Author SHA1 Message Date
ninjakickja
04f247d43e Fixed V2 where full sync data is quantized first before considering delta
This causes premature rounding error (seen in tank turret bobbing) because full sync data has a rotation less than rotationSensitivity but non 0. but new snapshot derived from delta + quantized full sync data will produce a rotation of 0.

WIP - Need to fix this in V1
2024-01-20 21:58:12 +08:00
MrGadget
258a84c066
feat(NetworkTransform): Default Sync Direction = Client To Server (#3741)
* feat(NetworkTransform): Default Sync Direction = Client To Server
- This is done in Reset so Network Behaviour isn't effected.
- This will not change NT components already in place on objects / prefabs unless user manually chooses Reset in the inspector.

* Update Assets/Mirror/Components/NetworkTransform/NetworkTransformBase.cs

---------

Co-authored-by: mischa <16416509+miwarnec@users.noreply.github.com>
2024-01-20 10:47:41 +01:00
MrGadget
e10ab75bf5
fix(InterestManagement): Separate ResetState (#3743)
* fix(InterestManagement): Separate ResetState
We should not have hijacked Unity's callback for runtime resets.

* Updated Template
2024-01-20 10:46:29 +01:00
MrGadget
dd1a457f71
fix(NetworkIdentity): Separate ResetState (#3742)
* fix(NetworkTransform): Separate ResetState
We should not have hijacked Unity's callback for runtime resets.

* Rename test too
2024-01-20 10:46:13 +01:00
ninjakickja
65280a8f17 Porting V2 Settings and Time Interval Changes to V1 2024-01-20 09:18:29 +08:00
MrGadget
87979aeb38 fix: Updated Network Transform Template 2024-01-19 14:30:05 -05:00
MrGadget
b885db3703
fix(NetworkTransform): Separate ResetState (#3738)
We should not have hijacked Unity's callback for runtime resets.
2024-01-19 18:23:35 +01:00
MrGadget
ac050a804d
fix(NetworkServerTest): Updated tests (#3739)
- Expect Errors from PR #3737
2024-01-19 09:39:05 -05:00
MrGadget
e1a1f49d0c
fix: NetworkServer and NetworkClient respect exceptionDisconnect (#3737)
Throws error for disconnect, warning otherwise.
2024-01-19 11:07:33 +01:00
ninjakickja
5e52596b5c Updated Intervals to Frequency instead of Multiplier 2024-01-19 14:18:48 +08:00
ninjakickja
14e1091e0c Refined Sync Settings
Renamed SyncSettings to FullHeader - Affects V1 and V2
Added new enum SyncSettings to exclude rotation sync methods - Only affects V2
Added new enum RotationSettings to select rotation sync methods - Only affects V2
2024-01-19 11:11:19 +08:00
ninjakickja
15ed88779c Fix: Client Broadcast Delta sent on Reliable channel instead of Unreliable 2024-01-19 00:53:45 +08:00
ninjakickja
eb352f5485 Update HybridNetworkTransform.cs 2024-01-18 17:34:37 +08:00
ninjakickja
fb5c8399b5 Amend Register Handler Command to not require authority
Any object on that connection can send the command. We don't need an authorised object.
2024-01-18 13:25:38 +08:00
ninjakickja
af4bab60b2 Hybrid V2 using Network Messages
Saves header bandwidth.
WIP
Not cleaned up yet.
2024-01-18 10:43:01 +08:00
ninjakickja
e45e1b633a Fix: Euler Rotation quantized not updated when receiving full state. 2024-01-18 10:42:15 +08:00
ninjakickja
c7555d061c Corrected Typo In OnSerialize 2024-01-17 22:47:01 +08:00
ninjakickja
40fcefde6d Fix: Non-full position syncing causes unsynced axis to be at 0.
Added function to consider unsynced axes and use current axes values.
Added check to ensure deltas do not send before full syncs and full sync index should start at 1.
This prevents sending of delta, indexed at 0, being received and applied because the initial value of the index is 0 (thus the delta does not get rejected).
2024-01-17 10:48:26 +08:00
ninjakickja
937c59d504 Decouple Hybrid from NT Base 2024-01-16 23:08:07 +08:00
ninjakickja
d4835d0091 Initial Fixes on settings and validate.
Fixed OnValidate on full and delta send Multiplier.
Fixed syncSettings condition in OnEnable
2024-01-16 17:55:52 +08:00
JesusLuvsYooh
854de5644d Initial Push 2024-01-16 08:58:48 +00:00
mischa
1791d29da2 Prediction: force syncInterval=0 for now to reduce risks of projects misconfiguring this 2024-01-15 21:13:20 +01:00
mischa
98061c0f59 Prediction: increase default snap threshold from 0.5 to 2.0 to reduce jitter/fighting at 500ms RTT before objects are coming to rest 2024-01-15 15:46:41 +01:00
mischa
552ea5a6b1 Prediction: snapping now inserts the snapped state into history for more accurate corrections afterward 2024-01-15 10:45:31 +01:00
mischa
3719b25d3d Prediction: snapping now applies velocity. fixes stop-start-stop effect for final slow movements 2024-01-15 10:45:31 +01:00
MrGadget
f963f0eb9e fix(NetworkMatch): Added read only display of MatchID 2024-01-14 08:54:57 -05:00
mischa
0cb96901b8 Prediction: add server state ghost too 2024-01-14 13:39:29 +01:00
mischa
d3f916fc25 Prediction: inverse control flow where instead of separating renderers, we separate physics 2024-01-14 11:18:40 +01:00
mischa
ea136ee265 Prediction: recordInterval option 2024-01-14 10:15:33 +01:00
MrGadget
4e5e7a18c4 fix(NetworkAnimator): Added gameObject to Debug.LogWarnings 2024-01-13 16:27:49 -05:00
MrGadget
82a96a28f0 style(Attributes): removed space 2024-01-13 16:24:27 -05:00
mischa
832eb79876 Prediction: remove preview warning 2024-01-12 12:09:36 +01:00
mischa
7ec272f733 NetworkIdentity: make clientStarted internal, this doesn't need to be in the user facing API 2024-01-12 10:46:28 +01:00
mischa
7fae26ff6f PredictedRigidbody: add user callbacks 2024-01-11 19:45:28 +01:00
mischa
4dde5bf7d8 PredictedRigidbody: remove 'preview' warning! 2024-01-11 14:28:40 +01:00
mischa
10e7d716a7 PredictedRigidbody: now corrects rotations (hard, without deltas for now) 2024-01-11 14:23:59 +01:00
mischa
92444bfcb3 PredictedState: add quaternion requirements 2024-01-11 14:23:02 +01:00
mischa
0cb3568bb1 PredictedRigidbody: correctionThreshold renamed to positionCorrectionThreshold for clarity 2024-01-11 13:43:00 +01:00
mischa
8de65b5ae3 syntax 2024-01-11 13:42:51 +01:00
mischa
79c4298db9 Prediction: InsertCorrection moved into CorrectHistory, with complete step by step test coverage for the algorithm 2024-01-11 13:07:15 +01:00
mischa
383aff2698 fix(Prediction): revert to previous Sample() implementation, but with manual 'afterIndex' counting to fix failing test 2024-01-11 11:52:14 +01:00
mischa
e441ddb88d Predicton: update comment 2024-01-11 11:32:21 +01:00
MrGadget
d5bbfee793 fix(NetworkAnimator): Enable -> OnEnable 2024-01-10 15:06:22 -05:00
mischa
d525be9670 perf(Prediction): CorrectHistory now starts at the 'afterIndex' from Sampling. replaces two full iterations with two half = one full iteration 2024-01-10 15:56:03 +01:00
mischa
b1419db4f4 Prediction: Sample() now returns 'afterIndex' to reuse in the other iteration later 2024-01-10 15:56:01 +01:00
mischa
8473eff1ff Prediction.CorrectHistory: reuse 'key'. same but cleaner. 2024-01-10 15:41:33 +01:00
mischa
0fd342e6a9 Prediction: CompareState renamed to OnReceivedState 2024-01-10 15:39:53 +01:00
mischa
eab82ee465 Prediction: simplify CorrectHistory by moving InsertCorrection into CompareState 2024-01-10 15:38:52 +01:00
mischa
e06fcd5535 Prediction: call ApplyState directly; move ApplyCorrection into Compare state. prepares for more improvements later. 2024-01-10 15:36:11 +01:00
mischa
9aadcbf442 syntax 2024-01-10 15:25:29 +01:00
mischa
13aa0c2e6b Prediction: syntax 2024-01-10 14:36:44 +01:00
mischa
157a86fa7b Prediction: simplify CompareState. detect edge cases early instead of late to prepare for more refactoring 2024-01-10 14:34:18 +01:00
MrGadget
9b9b9cc400
fix(NetworkServer): Improve Warnings (#3727)
* fix(NetworkServer): Improve Warnings
- Attempt to dig up the Object, component, and method name to make debugging easier
- Changes identity to identity.name so the object name is logged correctly.

* Update Assets/Mirror/Core/NetworkServer.cs

Co-authored-by: mischa <16416509+miwarnec@users.noreply.github.com>

* Update Assets/Mirror/Core/NetworkServer.cs

Co-authored-by: mischa <16416509+miwarnec@users.noreply.github.com>

* Use GetFunctionMethodName

* cleanup

---------

Co-authored-by: mischa <16416509+miwarnec@users.noreply.github.com>
2024-01-10 13:46:48 +01:00
MrGadget1024
ac72d3670d fix(NetworkServer): Log message cleanup 2024-01-10 07:24:26 -05:00
MrGadget
d86d297c26
feat(RemoteProcedureCalls): Added GetFunctionMethodName (#3732)
* fix(Weaver): Move InvokeRpcPrefix from Weaver to RemoteProcedureCalls

* feat(RemoteProcedureCalls): Added GetFunctionMethodName
2024-01-10 13:17:44 +01:00
MrGadget
110580a454
fix(Weaver): Move InvokeRpcPrefix from Weaver to RemoteProcedureCalls (#3731) 2024-01-10 13:16:49 +01:00
mischa
849dd94ce7 Tests: Prediction.Sample() 2024-01-10 11:51:22 +01:00
mischa
b3e102e4fd perf(PredictedRigidbody): comparing idle objects now skips recording state (= inserting into tree structure) as well 2024-01-10 10:27:27 +01:00
MrGadget
6e0c4a66d8
fix(NetworkManager): Prevent client from calling ServerChangeScene (#3729)
- Throws error if server isn't active
- allows for changing to offline scene regardless
2024-01-10 10:16:47 +01:00
MrGadget1024
6445547aef fix(SyncVarAttributeAccessReplacer): Corrected error log message
- assembly identifiers were reveresed.
- also improved phrasing
2024-01-10 04:09:15 -05:00
MrGadget1024
8543f1f37d fix(NetworkIdentity): Improved DisallowChildNetworkIdentities Error Logging
References the offending object so it gets highlighted in the Editor when the error is clicked.
2024-01-09 19:43:48 -05:00
MrGadget1024
28b1e8b374 fix(NetworkBehaviour): Improved OnValidate Error Logging
References the offending object so it gets highlighted in the Editor when the error is clicked.
2024-01-09 19:43:17 -05:00
mischa
24513562a4 perf(PredictedRigidbody) make CompareState O(1) for idle objects by comparing last first 2024-01-09 12:47:50 +01:00
mischa
a295d7d330 PredictedRigidbody: cleaner 'remember last' approach that allows for reuse elsewhere 2024-01-09 12:47:50 +01:00
mischa
f05623526c PredictedRigidbody: explain the concept 2024-01-09 12:47:50 +01:00
JesusLuvsYooh
dd950018dc
fix: NT-Unreliable Quaternion Compression Fix (#3725)
* fix: NT-Unreliable Quaternion Compression Fix

Credits to ninja of course :D

* Client using server snapshots fix.

* Nothing to see here..

* Added comment to Quat Rotation Fix
2024-01-09 11:37:47 +01:00
mischa
c6741061d9 Prediction: explain SortedList 2024-01-08 19:41:05 +01:00
mischa
b0933a1d07 remove TODO 2024-01-08 18:01:53 +01:00
mischa
587a5fe92a perf(Prediction): replace O(logN) binary search with O(1) in RecordState 2024-01-08 18:01:36 +01:00
mischa
609c3e1e41 Prediction: RigidbodyState moved to separate file 2024-01-08 17:48:14 +01:00
mischa
10b3b234a4 Prediction: CorrectHistory moved into Prediction.cs for easier unit testing 2024-01-08 17:42:53 +01:00
mischa
8225f97d5d Prediction: move Debug.DrawLine before the recalculations 2024-01-08 17:42:50 +01:00
mischa
f51af69499 Prediction: move snapping above insertion because insertion would've been useless if snapped 2024-01-08 17:42:48 +01:00
mischa
19a47e67b2 Prediction: disable correction message logging 2024-01-08 17:07:28 +01:00
mischa
011ce5a331 comments 2024-01-08 11:56:07 +01:00
mischa
a843232a86 adjust defaults 2024-01-08 11:43:04 +01:00
mischa
ba16e2f949 fix(PredictedRigidbody): now snaps into place below a velocity threshold to fix dancing rigidbodies near rest position due to prediction fighting with corrections 2024-01-08 11:34:50 +01:00
MrGadget
e32914969f
feat(NetworkClient): Add RegisterHandler with ChannelId (#3728)
- Same as NetworkServer...allows NetworkMessage handlers to have a channelId param

This is NetworkServer's version:
```cs
public static void RegisterHandler<T>(Action<NetworkConnectionToClient, T, int> handler, bool requireAuthentication = true)
    where T : struct, NetworkMessage
{
    ushort msgType = NetworkMessageId<T>.Id;
    if (handlers.ContainsKey(msgType))
    {
        Debug.LogWarning($"NetworkServer.RegisterHandler replacing handler for {typeof(T).FullName}, id={msgType}. If replacement is intentional, use ReplaceHandler instead to avoid this warning.");
    }

    // register Id <> Type in lookup for debugging.
    NetworkMessages.Lookup[msgType] = typeof(T);

    handlers[msgType] = NetworkMessages.WrapHandler(handler, requireAuthentication, exceptionsDisconnect);
}
```
2024-01-08 10:37:47 +01:00
MrGadget
1299676d79
fix(Multiplexer): Avoid KeyNotFoundException in OriginalId (#3723)
Fixes: #3719
2024-01-08 09:53:08 +01:00
MrGadget1024
c38603b0c5 fix(NetworkServer): RemovePlayerForConnection use NetworkConnectionToClient
- This has to be an oversight - all callers are passing NetworkConnectionToClient
2024-01-07 11:16:15 -05:00
mischa
7ff1fd0dfe fix(KCP): KcpClient RawSend may throw ConnectionRefused SocketException when OnDisconnected calls SendDisconnect(), which is fine 2024-01-07 12:53:47 +01:00
mischa
df918ecf9f fix(Prediction): InsertCorrection would produce NaN multipliers, spreading through prediction code 2024-01-07 12:37:45 +01:00
mischa
febcce9513 perf: PredictedRigidbody ghost visibility update now only runs every 200ms 2024-01-06 12:30:11 +01:00
mischa
3a34dba5ed perf: PredictedRigidbody now caches original renderers instead of calling GetComponentsInChildren every frame 2024-01-06 12:23:05 +01:00
mischa
4eb9a255a0 PredictedRigidbody: UpdateVisualCopy helper function 2024-01-06 12:23:02 +01:00
mischa
0cc4726728 fix(InterestManagement): calling OnEnable multiple times doesn't show an error anymore 2024-01-06 11:57:13 +01:00
JesusLuvsYooh
be6c6c7c64
Renamed example scene to better explain its purpose. (#3717)
* Renamed example scene to better explain its purpose.

Made Mirror Better

* TanksCoop Scripts and folders renamed.

* Removed the s

Removed the s
2024-01-05 14:26:11 +01:00
MrGadget1024
92bec39f1a MatchController: syntax 2024-01-04 20:54:00 -05:00
MrGadget1024
912b170989 style(NetworkMatch): removed private 2024-01-04 13:59:14 -05:00
MrGadget1024
5b65afd68d doc(MatchInterestManagement): comments 2024-01-04 13:59:13 -05:00
MrGadget
0c46045130
perf(NetworkAnimator): ClientRpc includeOwner False (#3716)
No need to send the Trigger message back to the owner since we already called animator.SetTrigger
- RpcOnAnimationTriggerClientMessage
- RpcOnAnimationResetTriggerClientMessage
2024-01-04 18:57:46 +01:00
MrGadget
882bc6d2b6
fix(NetworkManager): No Auth Required for NotReadyMessage (#3715) 2024-01-03 19:33:48 +01:00
mischa
9a9fadbbf2 fix(KCP): V1.40 [2024-01-03]
- added [KCP] to all log messages
- fix: #3704 remove old fix for #2353 which caused log spam and isn't needed anymore since the
  original Mirror issue is long gone
- fix: KcpClient.RawSend now returns if socket wasn't created yet
- fix: https://github.com/MirrorNetworking/Mirror/issues/3591 KcpPeer.SendDisconnect now rapid
  fires several unreliable messages instead of sending reliable. Fixes disconnect message not
  going through if the connection is closed & removed immediately after.
2024-01-03 14:17:54 +01:00
mischa
7faa7a31f7
fix: #2852 NetworkAnimator now always serializes and deserializes the exact amount of data, and logs errors if runtime counts are mismatching (#3711)
* fix: #2852 NetworkAnimator now serializes animator.layerCount to make a mismatch in OnDeserialize impossible.

* parameters.length too
2024-01-03 10:42:08 +01:00
MrGadget1024
80ebeed7a1 NetworkRoomManager: Silenced Debug Logs 2024-01-02 21:59:58 -05:00
MrGadget
66b38852d5
perf(Match Interest Mgmt): Complete Overhaul (#3707)
* perf(Match Interest Mgmt) Use Dictionary instead of spawned
This is better than iterating all spawned objects and doing TryGetComponent in Update.

* undo rename

* Simplified OnRebuildObservers

* Overhauled Match Interest Mgmt
- no more looping dictionaries
- no more TryGetComponent in hot path
- NetworkMatch component drives the updates

* Cleanup

* syntax

* Merged UpdateDirtyMatches & UpdateMatchObjects into OnMatchChanged

* NetworkMatch - Added isServer check

* MatchInterestManagement: Better matchObjects cleanup
- moved match removal to LateUpdate
- added matchCount for debugging

* Added comment

Co-authored-by: Robin Rolf <imer@imer.cc>

* Formatting

Co-authored-by: Robin Rolf <imer@imer.cc>

* Updated OnMatchChanged / matchCount -> ushort
- Depends on ReadOnlyAttribute

* matchCount -> internal

* matchCount Header

---------

Co-authored-by: Robin Rolf <imer@imer.cc>
2024-01-02 20:21:00 -05:00
MrGadget1024
d2ad0b851b fix(MultipleMatches): Applied ReadOnly Attributes 2024-01-02 14:39:14 -05:00
MrGadget1024
ee8fda05fd fix(PlayerController): Applied ReadOnly Attributes 2024-01-02 14:37:35 -05:00
MrGadget1024
6a8502b8ed fix(NetworkRoomPlayer): Applied ReadOnly Attributes 2024-01-02 14:36:50 -05:00
MrGadget1024
d494ac28b7 fix(NetworkRoomManager): Applied ReadOnly Attributes 2024-01-02 14:36:18 -05:00