Skip to main content

GameStateWithPlayer

Extension of GameBaseState that integrates player-specific logic and Fusion networking callbacks. This is the base class for any state that requires networked player presence, spawning, or multiplayer lifecycle handling.

public abstract class GameStateWithPlayer : GameBaseState, INetworkRunnerCallbacks

Purpose

  • Used for states that manage player avatars or sessions (e.g., open world, minigames)
  • Connects GameStateManager logic with Fusion's INetworkRunnerCallbacks interface
  • Encapsulates spawning logic and per-player connection management

Constructor

public GameStateWithPlayer(ServerScene _scn, GameStateManager manager)
  • ServerScene _sceneRef is passed in to provide spawn point metadata and configuration context.

Key Properties

ServerScene _sceneRef

Holds metadata about the scene this state is responsible for, including spawn position/rotation.


Player Spawn Methods

Vector3 GetPlayerSpawnPosition(PlayerConnectionHost player)

Returns a spawn location for the player. Defaults to ServerScene.SpawnPosition.

Vector3 GetPlayerSpawnRotation(PlayerConnectionHost player)

Returns an Euler rotation vector. Defaults to ServerScene.SpawnRotation.eulerAngles.


Fusion Network Callbacks

Implements full INetworkRunnerCallbacks, but provides no-op virtual methods. Intended to be overridden in specific gameplay states.

Key hooks include:

  • OnPlayerJoined, OnPlayerLeft
  • OnInput, OnInputMissing
  • OnSceneLoadStart, OnSceneLoadDone
  • OnCustomAuthenticationResponse
  • OnShutdown, OnDisconnectedFromServer, OnConnectFailed
  • OnReliableDataReceived, OnReliableDataProgress
  • OnSessionListUpdated, OnConnectRequest, OnConnectedToServer
  • OnObjectEnterAOI, OnObjectExitAOI
  • OnUserSimulationMessage, OnHostMigration

Example Override

public override void OnPlayerJoined(NetworkRunner runner, PlayerRef player)
{
SpawnAvatarFor(player);
}
public override Vector3 GetPlayerSpawnPosition(PlayerConnectionHost player)
{
return player.IsReturningUser ? customSpawn : _sceneRef.SpawnPosition;
}

This class enables any scene-bound game state to seamlessly inherit multiplayer behavior without repeatedly implementing the Fusion callback interface boilerplate.