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
GameStateManagerlogic with Fusion'sINetworkRunnerCallbacksinterface - Encapsulates spawning logic and per-player connection management
Constructor
public GameStateWithPlayer(ServerScene _scn, GameStateManager manager)
ServerScene _sceneRefis 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,OnPlayerLeftOnInput,OnInputMissingOnSceneLoadStart,OnSceneLoadDoneOnCustomAuthenticationResponseOnShutdown,OnDisconnectedFromServer,OnConnectFailedOnReliableDataReceived,OnReliableDataProgressOnSessionListUpdated,OnConnectRequest,OnConnectedToServerOnObjectEnterAOI,OnObjectExitAOIOnUserSimulationMessage,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.