public override IEnumerator OnReceive(Server.Main.Session session, Gamnet.Packet packet) { MsgCliSvr_CreateRoom_Req req = packet.Deserialize <MsgCliSvr_CreateRoom_Req>(); GameObject room = Object.Instantiate <GameObject>(Server.Main.Instance.roomPrefab); room.name = $"Room_{session.session_key}"; room.layer = LayerMask.NameToLayer("Server"); room.transform.SetParent(Server.Main.Instance.transform, false); session.room = room; List <Vector3> initPositions = new List <Vector3>(); for (int x = -4; x <= 4; x++) { for (int y = -4; y <= 4; y++) { for (int z = -4; z <= 4; z++) { initPositions.Add(new Vector3(x, y, z)); } } } Transform spheresTransform = room.transform.Find("Spheres"); for (uint i = 0; i < Server.Main.Instance.objectCount; i++) { GameObject go = Object.Instantiate <GameObject>(Server.Main.Instance.spherePrefab); go.name = $"Sphere_{i+1}"; go.layer = LayerMask.NameToLayer("Server"); go.transform.SetParent(spheresTransform, false); Sphere sphere = go.AddComponent <Sphere>(); sphere.id = i + 1; sphere.rigidBody = sphere.GetComponent <Rigidbody>(); int index = Random.Range(0, initPositions.Count); sphere.transform.localPosition = initPositions[index]; initPositions.RemoveAt(index); session.spheres.Add(sphere.id, sphere); MsgSvrCli_CreateSphere_Ntf ntf = new MsgSvrCli_CreateSphere_Ntf(); ntf.id = sphere.id; ntf.localPosition = sphere.transform.localPosition; ntf.rotation = sphere.transform.rotation; ntf.velocity = sphere.rigidBody.velocity; session.Send <MsgSvrCli_CreateSphere_Ntf>(ntf); } MsgSvrCli_CreateRoom_Ans ans = new MsgSvrCli_CreateRoom_Ans(); session.Send <MsgSvrCli_CreateRoom_Ans>(ans); yield break; }
private void Start() { btnConnect.onClick.AddListener(() => { if (null != session) { session.Close(); } session = new Gamnet.Client.Session(); session.OnConnectEvent += () => { session.RegisterHandler <MsgSvrCli_CreateRoom_Ans>(MsgSvrCli_CreateRoom_Ans.MSG_ID, CreateRoom.OnReceive); session.RegisterHandler <MsgSvrCli_CreateSphere_Ntf>(MsgSvrCli_CreateSphere_Ntf.MSG_ID, CreateSphere.OnReceive); session.RegisterHandler <MsgSvrCli_SyncPosition_Ntf>(MsgSvrCli_SyncPosition_Ntf.MSG_ID, SuncPosition.OnReceive); MsgCliSvr_CreateRoom_Req req = new MsgCliSvr_CreateRoom_Req(); Send(req); }; session.OnErrorEvent += (System.Exception e) => { Debug.Log(e.Message + "\n" + e.StackTrace.ToString()); }; session.OnCloseEvent += () => { foreach (var itr in spheres) { Common.Sphere sphere = itr.Value; sphere.transform.SetParent(null); GameObject.Destroy(sphere.gameObject); } spheres.Clear(); session.UnregisterHandler(MsgSvrCli_CreateRoom_Ans.MSG_ID); session.UnregisterHandler(MsgSvrCli_CreateSphere_Ntf.MSG_ID); session.UnregisterHandler(MsgSvrCli_SyncPosition_Ntf.MSG_ID); session.OnConnectEvent = null; session.OnErrorEvent = null; session.OnCloseEvent = null; }; session.AsyncConnect("127.0.0.1", 4000); }); btnClose.onClick.AddListener(() => { session.Close(); }); }