private void LateUpdate() { JobHandle localStateHandle = _localState.Simulate(); JobHandle syncedStateHandle = _syncronizedState.Simulate(); JobHandle combinedJobHandle = JobHandle.CombineDependencies(localStateHandle, syncedStateHandle); JCompareChangesInLocalState jCompare = new JCompareChangesInLocalState { SentRPCNumber = _sentRPCNumber, RpcNumberPerNode = _rpcNumberPerNode, LocalStateSurface = _localState.Surface, LastFrameLocalSurface = _localStateBackup, }; JUpdateSyncedToLocalState jUpdateJob = new JUpdateSyncedToLocalState { ReceivedRpcNumber = _receivedRpcNumber, LocalStateSurface = _localState.Surface, SyncedStateSurface = _syncronizedState.Surface, RpcNumberPerNode = _rpcNumberPerNode, }; combinedJobHandle = jCompare.Schedule(SurfacePieceCount, ParallelJobBatchCount, combinedJobHandle); combinedJobHandle = jUpdateJob.Schedule(SurfacePieceCount, ParallelJobBatchCount, combinedJobHandle); combinedJobHandle = GameSurfaceRenderingHandler.Instance.ScheduleJobs(_localState, combinedJobHandle); combinedJobHandle.Complete(); _localState.FinishSimulation(); _syncronizedState.FinishSimulation(); GameSurfaceRenderingHandler.Instance.Finish(_localState); _localState.CopySurfaceTo(_combinedSurface); _localState.CopySurfaceTo(_localStateBackup); }