private void Awake() { movement = GetComponent <Movement>(); matching = GetComponent <Matching>(); playerPool = new PlayerPool(prefab); transforms = new TransformAccessArray(4, 2); for (var i = 0; i < 4; i++) { var rent = playerPool.Rent(); var trs = rent.transform; rent.index = i; transforms.Add(trs); } matching .JoinClientAsObservable .Subscribe(index => { Debug.Log(index.ToString()); for (var i = 0; i < transforms.capacity; i++) { var trs = transforms[i]; if (trs.GetComponent <IdentifierComponent>().index != index) { continue; } player = trs; trs.gameObject.AddComponent <PlayerController>(); transforms.RemoveAtSwapBack(i); break; } }); matching .LeaveClientAsObservable .Subscribe(x => { var go = player.gameObject; Destroy(go.GetComponent <PlayerController>()); transforms.Add(player); }); }