void Awake() { Initialize(_NetworkPlayerPrefab, this.transform); NetworkObjects.ObserveAdd().Subscribe(addEvent => { ulong objectId = addEvent.Key; Debug.Log("Added ObjectID: " + objectId + ", Players.Count: " + NetworkObjects.Count); NetworkPlayer player = addEvent.Value; player.transform.SetParent(this.transform); if (player.IsOwner) { _LocalPlayerObjectId = objectId; _OnSpawnedLocalPlayerSubject.OnNext(player); } }) .AddTo(this); NetworkObjects.ObserveRemove().Subscribe(removeEvent => { ulong objectId = removeEvent.Key; Debug.Log("Removed ObjectID: " + objectId + ", Players.Count: " + NetworkObjects.Count); if (_LocalPlayerObjectId.Equals(objectId)) { _OnDespawnedLocalPlayerSubject.OnNext(Unit.Default); } }) .AddTo(this); INetworkManager networkManager = _NetworkManagerObject.GetComponent <INetworkManager>(); if (networkManager != null) { networkManager.OnClientConnectedAsObservable() .Where(_ => networkManager.IsServer) .Subscribe(clientId => { SpawnWithClientOwnership(clientId); }) .AddTo(this); networkManager.OnClientDisconnectedAsObservable() .Where(_ => networkManager.IsServer) .Subscribe(clientId => { DespawnObjects(clientId); }) .AddTo(this); } else { Debug.LogError("[SimpleMultiplayer] NetworkManager is null."); } }