Billiards (not predicted): add latency simulation and improve explanation

This commit is contained in:
mischa 2024-03-21 12:14:03 +08:00 committed by MrGadget
parent cded6bc736
commit a0bb738705
2 changed files with 38 additions and 9 deletions

View File

@ -213,7 +213,9 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
height: 150
offsetY: 40
maxLogCount: 50
showInEditor: 0
hotKey: 293
--- !u!1001 &250045978
PrefabInstance:
@ -746,6 +748,7 @@ GameObject:
- component: {fileID: 1282001519}
- component: {fileID: 1282001521}
- component: {fileID: 1282001522}
- component: {fileID: 1282001523}
m_Layer: 0
m_Name: NetworkManager
m_TagString: Untagged
@ -796,12 +799,14 @@ MonoBehaviour:
m_EditorClassIdentifier:
dontDestroyOnLoad: 1
runInBackground: 1
autoStartServerBuild: 1
autoConnectClientBuild: 0
headlessStartMode: 1
editorAutoStart: 0
sendRate: 120
autoStartServerBuild: 0
autoConnectClientBuild: 0
offlineScene:
onlineScene:
transport: {fileID: 1282001521}
transport: {fileID: 1282001523}
networkAddress: localhost
maxConnections: 2
disconnectInactiveConnections: 0
@ -814,6 +819,7 @@ MonoBehaviour:
spawnPrefabs:
- {fileID: 3429911415116987808, guid: d07e00a439ecd46e79554ec89f65317b, type: 3}
- {fileID: 3429911415116987808, guid: 0100f0c90700741b496ccbc2fe54c196, type: 3}
exceptionsDisconnect: 1
snapshotSettings:
bufferTimeMultiplier: 2
bufferLimit: 32
@ -825,7 +831,8 @@ MonoBehaviour:
dynamicAdjustment: 1
dynamicAdjustmentTolerance: 1
deliveryTimeEmaDuration: 2
connectionQualityInterval: 3
evaluationMethod: 0
evaluationInterval: 3
timeInterpolationGui: 1
--- !u!114 &1282001521
MonoBehaviour:
@ -852,7 +859,7 @@ MonoBehaviour:
MaxRetransmit: 40
MaximizeSocketBuffers: 1
ReliableMaxMessageSize: 297433
UnreliableMaxMessageSize: 1195
UnreliableMaxMessageSize: 1194
debugLog: 0
statisticsGUI: 0
statisticsLog: 0
@ -872,6 +879,24 @@ MonoBehaviour:
padding: 2
width: 180
height: 25
--- !u!114 &1282001523
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1282001517}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 96b149f511061407fb54895c057b7736, type: 3}
m_Name:
m_EditorClassIdentifier:
wrap: {fileID: 1282001521}
latency: 50
jitter: 0.02
jitterSpeed: 1
unreliableLoss: 2
unreliableScramble: 2
--- !u!1001 &1633978772
PrefabInstance:
m_ObjectHideFlags: 0

View File

@ -4,11 +4,15 @@ Mouse drag the white ball to apply force.
Billiards is surprisingly easy to implement, which makes this a great demo for beginners!
Hits are sent to the server with a [Command].
There will always be some latency for the results to show.
Server simulates physics and sends results back to the client.
To solve this, there's another BilliardsPredicted demo which uses prediction & reconciliation.
This demo however is meant for complete beginners to learn Mirror!
While simple, this approach has a major flaw: latency.
The NetworkManager has a LatencySimulation component to see this on your own computer.
Client actions will always feel a bit delayed while waiting for the server.
The solution to this is called Prediction, which we implemented in our BilliardsPredicted demo.
See the Prediction article in our documentation!
Notes:
- Red/White ball Rigidbody CollisionMode needs to be ContinousDynamic to avoid white flying through red sometimes.
even 'Continous' is not enough, we need ContinousDynamic.
even 'Continuous' is not enough, we need ContinuousDynamic.