What's New in 2.1
Fusion 2.1 contains many new features and improvements. The most important changes are explained in detail in this page. For a list of changes between Fusion 2 and 1 see what's new 2.0.
Forecast Physics
Forecast physics provides an alternative to fully simulating physics prediction allow for physics games with real time physical interaction at a much lower CPU cost.

Forecast Physics is available in Host, Server and Shared Mode.
It uses extrapolation to place physics objects in the local time of all players. That way they are smoothly interactable from all clients.
For more information check out the documentation page.
Object Priority
Object Priority gives control over the update rate of objects. In Fusion 2.0 and earlier every object synchronized Networked properties each send tick if possible. In Fusion 2.1 it is possible to reduce the send rate using object priority.

- An object priority of
1
means the object is updated each tick. 2
means the object is updated every other tick resulting in a send rate of /23
means the object is updated every third tick resulting a send rate of /3 etc..
There are two ways to specify priority:
Global Priority
An object's priority is set on the Priority
field of the NetworkObject. This is the default priority value used for the object on all peers.
Per Player Priority
It is possible to adjust the send rate of an object to a specific player.
This can be used for instance to adjust the priority of an object based on the distance to the player allow for an additional way to reduce bandwidth for far away objects besides hiding the object using Area of Interest.
Per player priority is available in Host, Server and Shared Mode.
To set the priority for a specific player call:
C#
NetworkObject.SetPriority(PlayerRef player, int priority)
- In Host / Server Mode the host / server is in control of priority and has to set it for every player-object pair.
- In Shared Mode each client is in control of the send rate of objects it receives. So it is only valid to call
SetPriority
with the localPlayerRef (NetworkRunner.LocalPlayer)
To clear the priority (the global priority will be used again) use:
C#
NetworkObject.ClearPriority(PlayerRef player)
For Host and Server Mode, there is a callback on the NetworkObject which is invoked the first time an object is considered for sending data to a player. This can be implemented to ensure per player priority is always set for an object:
C#
public void Awake()
{
Object.PriorityCallback += PriorityCallback;
}
public void OnDestroy()
{
Object.PriorityCallback -= PriorityCallback;
}
public int PriorityCallback(NetworkObject obj, PlayerRef player)
{
int priority = 1; // Add your implementation here
return priority;
}
Shared Mode Configurable AOI
In Shared Mode the size of the Area of Interest cells and the size of the grid can be adjusted in the NetworkProjectConfig
. In Fusion 2.0 and earlier it was fixed to 32 units.

Large Data RPCs
Fusion 2.1 no longer has a limit of 512 bytes for RPC size.
To send RPCs that exceed 512 bytes the RpcChannel.ReliableLargeData
can be specified in the RPC attribute.
C#
[Rpc(Channel = RpcChannel.ReliableLargeData)]
public void RpcExample(byte[] data)
{
Debug.Log("Large RPC received");
}
- Large RPCs are not tick accurate.
- Order of Large RPCs is not preserved.
Improved Master Client Switching
Clients can manually request a master client reassignment in case the master client becomes unresponsive but does not fully disconnect. This allows for much faster switching of the master client.
To enable this feature enable AllowMasterClientReassignRequest
in the NetworkProjectConfig
. By default, there is a 2-second reassignment threshold. This is the time in seconds in which the current master client has not been responsive (No messages received by the Photon Cloud). This threshold is adjustable in the NetworkProjectConfig
via the MasterClientReassignRequestThreshold
value.
Setting MasterClientReassignRequestThreshold
to 0
allows any client at any time to take over as the master client even if the current master is still responsive. This can be abused by malicious clients (hackers) to take over an existing session.
Master clients switching does not happen automatically when the master client becomes unresponsive (only on a full disconnect). A manual request from another client is needed. A request can be sent by any client using:
C#
NetworkRunner.RequestMasterClientReassign();
To detect the master being inactive clients can check whether networked properties are being updated by the master client. If there are no existing properties that are being updated each tick a custom tracker can be added. A minimal setup can be:
- A
int
property that is increment on the master client in FixedUpdateNetwork - A second property with the index of the "vice master client" who is responsible for checking whether updates from the master are received and calls
RequestMasterClientReassign
if the master has not recommended the first property for X seconds.
Predicted Authority Transfer
Predicted Authority transfer for objects in Shared Mode is still in development and will be released at a later point in the 2.1 development cycle.
Shared Mode Custom Plugins
Custom Plugins allow for code execution on the Photon Server in Shared Mode. This allows to add an additional layer of security to shared mode applications.
Custom Plugins are available for Enterprise Cloud Only.
Example code for moving the code from a loot chest from client authority to a custom plugin:
C#
// Client Code
public class Chest : NetworkBehaviour
{
[Networked]
private TickTimer _openCooldown { get; set;}
[Rpc(RpcSources.All, RpcTargets.StateAuthority, InvokeLocalMode = RpcInvokeLocalMode.ForwardToServer)]
private void RPC_Open(RpcInfo info = default)
{
///......
}
}
// Plugin Extension
partial class Chest
{
public bool IsOpen => _openCooldown.IsRunning;
partial void RPC_Open(ref RpcInfo info)
{
// The RPC is intercepted and cancelled by the plugin instead of fowarded to the StateAuthority
info.Cancel();
if (IsOpen)
return;
// Networked properties are available and can be manipulated on the custom plugin
_openCooldown = TickTimer.CreateFromSeconds(Runner, _closeAfterTime);
for (int i = 0; i < _rollTables.Length; i++)
{
NetworkObject rollItem = _rollTables[i].Roll();
Vector2 randomOffset = Random.RandomInsideUnitCircle() * 0.25f;
randomOffset.x += i % 2 == 0 ? i * 0.5f : -i * 0.5f;
Vector3 position = BakedPluginData.Position + BakedPluginData.Rotation * Vector3.forward * 1.5f + new Vector3(randomOffset.x, 0.0f, randomOffset.y);
// The Plugin can perform actions such as Spawning NetworkObjects. (In this case spawning loot)
NetworkObject rollInstance = Runner.Spawn(rollItem, position, BakedPluginData.Rotation);
}
}
}
For questions about Enterprise Cloud and to get early access for custom plugins, contact us.
Shared Mode Tick Rate
In Fusion 2 Shared Mode Tick Rate is locked to 32hz and Send Rate to 16hz.
At the moment this is still the case for Fusion 2.1. In future releases, Fusion 2.1 will allow for a broader selection of tick and send rates for shared mode with a hard cap of send rates set to 32hz.
Shared Mode Docs
We have created a new and simplified version of our docs specifically for Fusion Shared Mode.
You can check out the new documentation by switching the documentation version to Fusion 2-Shared
instead of Fusion 2
in the version drop down. (Or here.)
We're looking for feedback of this new version of the docs and hope it helps new Fusion users which are only interested in Shared Mode to have a much smoother onboarding experience.
New Fusion Hub
2.1 comes with a newly designed Fusion Hub. There is a separate hub for Shared Mode only projects displaying only relevant content and there is a new onboarding workflow simplifying the process of getting started.


More Fusion Hub features are coming later with 2.1
Photon Realtime
For advanced users, it is possible to use the full Photon Realtime API for room creation and bootstrap a Fusion session later on. This gives access to Realtime features such as SQL Lobbies, Matchmaking Slot Reservation, Friends and more.
If you are interested in accessing this feature please contact us.
Player Unique Id
Starting with Fusion 2.1, you can pass an ID via the StartGameArgs.PlayerUniqueId
(long) when connecting to a session (supports both Shared and Client-Server Modes). This allows players to connect to the session using a consistent PlayerRef.
The PlayerUniqueId
is not used as the PlayerRef
. If it is the first time the player connects to the session, a new PlayerRef
will be created. If the player has already connected to the session before using the same PlayerUniqueId
, the same PlayerRef
will be used.
Debug Breakpoint Support
In Host / Server Mode debugging using breakpoints is possible without triggering a timeout. Fusion's Multi-Peer mode and Unity's Multiplayer Play Mode (MPPM) are both supported.
For more information check out the documentation page.
Back to top