Class LobbyPlayerStore<TPayload>
Manages a NetworkList of LobbyPlayerState for lobby-phase synchronization. This is a NetworkBehaviour — attach it to the same NetworkObject as your NetworkManager or a dedicated lobby prefab spawned at session start.
Subclass this with your specific TPayload to use it:
public class MyLobbyPlayerStore : LobbyPlayerStore<MyPayload> { }
public abstract class LobbyPlayerStore<TPayload> : NetworkBehaviour where TPayload : unmanaged, INetworkSerializable, IEquatable<TPayload>
Type Parameters
TPayloadGame-specific player data type.
- Inheritance
-
ObjectComponentBehaviourMonoBehaviourNetworkBehaviourLobbyPlayerStore<TPayload>
- Inherited Members
-
NetworkBehaviour.__rpc_func_tableNetworkBehaviour.__rpc_name_tableNetworkBehaviour.__rpc_exec_stageNetworkBehaviour.NetworkVariableFieldsNetworkBehaviour.__getTypeName()NetworkBehaviour.__createNativeList<T>()NetworkBehaviour.OnNetworkPreSpawn(ref NetworkManager)NetworkBehaviour.OnNetworkPostSpawn()NetworkBehaviour.InternalOnNetworkPostSpawn()NetworkBehaviour.OnNetworkSessionSynchronized()NetworkBehaviour.InternalOnNetworkSessionSynchronized()NetworkBehaviour.OnInSceneObjectsSpawned()NetworkBehaviour.OnNetworkPreDespawn()NetworkBehaviour.OnGainedOwnership()NetworkBehaviour.OnLostOwnership()NetworkBehaviour.OnNetworkObjectParentChanged(NetworkObject)NetworkBehaviour.__initializeVariables()NetworkBehaviour.__initializeRpcs()NetworkBehaviour.OnSynchronize<T>(ref BufferSerializer<T>)NetworkBehaviour.OnDestroy()NetworkBehaviour.NetworkManagerNetworkBehaviour.RpcTargetNetworkBehaviour.IsLocalPlayerNetworkBehaviour.IsOwnerNetworkBehaviour.IsServerNetworkBehaviour.HasAuthorityNetworkBehaviour.IsSessionOwnerNetworkBehaviour.ServerIsHostNetworkBehaviour.IsClientNetworkBehaviour.IsHostNetworkBehaviour.IsOwnedByServerNetworkBehaviour.IsSpawnedNetworkBehaviour.NetworkObjectNetworkBehaviour.HasNetworkObjectNetworkBehaviour.NetworkObjectIdNetworkBehaviour.NetworkBehaviourIdNetworkBehaviour.OwnerClientIdNetworkBehaviour.m_TargetIdBeingSynchronizedMonoBehaviour.IsInvoking()MonoBehaviour.CancelInvoke()MonoBehaviour.StopCoroutine(Coroutine)MonoBehaviour.StopAllCoroutines()MonoBehaviour.destroyCancellationTokenMonoBehaviour.useGUILayoutMonoBehaviour.didStartMonoBehaviour.didAwakeMonoBehaviour.runInEditModeBehaviour.enabledBehaviour.isActiveAndEnabledComponent.GetComponent<T>()Component.TryGetComponent<T>(out T)Component.GetComponentInChildren<T>()Component.GetComponentsInChildren<T>()Component.GetComponentInParent<T>()Component.GetComponentsInParent<T>()Component.GetComponents<T>()Component.GetComponentIndex()Component.CompareTag(TagHandle)Component.transformComponent.transformHandleComponent.gameObjectComponent.tagObject.GetEntityId()Object.GetInstanceID()Object.GetHashCode()Object.InstantiateAsync<T>(T)Object.InstantiateAsync<T>(T, Transform)Object.InstantiateAsync<T>(T, Vector3, Quaternion)Object.InstantiateAsync<T>(T, Transform, Vector3, Quaternion)Object.Instantiate(Object, Vector3, Quaternion)Object.Instantiate(Object, Vector3, Quaternion, Transform)Object.Instantiate(Object)Object.Instantiate(Object, Scene)Object.Instantiate<T>(T, InstantiateParameters)Object.Instantiate<T>(T, Vector3, Quaternion, InstantiateParameters)Object.Instantiate(Object, Transform)Object.Instantiate<T>(T)Object.Instantiate<T>(T, Vector3, Quaternion)Object.Instantiate<T>(T, Vector3, Quaternion, Transform)Object.Instantiate<T>(T, Transform)Object.Destroy(Object)Object.DestroyImmediate(Object)Object.DontDestroyOnLoad(Object)Object.DestroyObject(Object)Object.FindObjectsOfType<T>()Object.FindObjectsByType<T>(FindObjectsSortMode)Object.FindObjectsByType<T>(FindObjectsInactive, FindObjectsSortMode)Object.FindObjectOfType<T>()Object.FindFirstObjectByType<T>()Object.FindAnyObjectByType<T>()Object.FindFirstObjectByType<T>(FindObjectsInactive)Object.FindAnyObjectByType<T>(FindObjectsInactive)Object.ToString()Object.nameObject.hideFlags
Properties
PlayerCount
Number of players currently in the lobby.
public int PlayerCount { get; }
Property Value
Players
protected abstract NetworkList<LobbyPlayerState<TPayload>> Players { get; }
Property Value
- NetworkList<LobbyPlayerState<TPayload>>
ReadyCount
Number of players who are ready.
public int ReadyCount { get; }
Property Value
Methods
CanStartGame(out string)
Check if all players are ready and the game can start. Uses the IPlayerRule if available.
public bool CanStartGame(out string reason)
Parameters
reasonstring
Returns
GetAllPlayers()
Get a copy of all player states as an array.
public LobbyPlayerState<TPayload>[] GetAllPlayers()
Returns
- LobbyPlayerState<TPayload>[]
GetPlayerRule()
Override this to provide a custom rule for payload validation and start conditions. Return null to use default behavior (all players must be ready).
protected virtual IPlayerRule<TPayload> GetPlayerRule()
Returns
- IPlayerRule<TPayload>
OnNetworkDespawn()
public override void OnNetworkDespawn()
OnNetworkSpawn()
public override void OnNetworkSpawn()
SetReadyRpc(bool, RpcParams)
[ServerRpc] Set the ready state for the calling player.
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
public void SetReadyRpc(bool isReady, RpcParams rpcParams = default)
Parameters
isReadyboolrpcParamsRpcParams
UpdatePayloadRpc(TPayload, RpcParams)
[ServerRpc] Update the payload for the calling player. Override GetPlayerRule() to provide validation logic.
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
public void UpdatePayloadRpc(TPayload payload, RpcParams rpcParams = default)
Parameters
payloadTPayloadrpcParamsRpcParams
Events
OnPlayersUpdated
Fired when the players list changes. Provides a snapshot array.
public event Action<LobbyPlayerState<TPayload>[]> OnPlayersUpdated
Event Type
- Action<LobbyPlayerState<TPayload>[]>