The process of advancing an simulation involves running several different classes of simulations and then converging and reconciling the systems. The staple of games involve advancing physics, executing state machine based systems for a wide range of mechanisms, and planning actuation inputs based on locally available sensory data.

Simulation Systems

Network Synchronization

When we introduce the network into the picture, creating an seamless and responsive connected experience becomes slightly more complex. The main issue that we have to deal with is that there is network latency and thus the local and network state may not be completely in sync. However, we don't want to unfairly penalize the user for issues which may be out of their control. Games like Overwatch balance doing what each local player thought they did and what actually happened (Overwatch Gameplay Architecture and Netcode, GDC).

Simulation Overview

Component Data Coherence

In 2019, Unity has been pushing what they have named data-oriented design as a means to improve performance for their entity component system. To summarize this change, we can look at components in two ways. The first is that there are different instances of components tied to each entity which will need to be iterated and processed. This can be detrimental to performance since the data structures can be scattered in memory. The alternate way to structure this relationship is to have contiguous arrays of each component which can be processed uniformly. Since similar operations are being performed on repeated contiguous data structures, performance can be optimized.

Further Reading