示例#1
0
        public override IEnumerator OnReceive(Session session, Gamnet.Packet packet)
        {
            {
                Packet.MsgCliSvr_Start_Ntf ntf = packet.Deserialize <Packet.MsgCliSvr_Start_Ntf>();
                session.ball.transform.SetParent(session.room.transform);
                session.ball.rigidBody.useGravity = false;
                session.ball.SetDirection(Vector3.up + new Vector3(Random.Range(-0.5f, 0.5f), 0, 0));
                session.room.state = Room.State.Play;
            }

            {
                Packet.MsgSvrCli_Start_Ntf ntf = new Packet.MsgSvrCli_Start_Ntf();
                ntf.objectId = session.ball.id;

                Room room = session.room;
                foreach (Session s in room.sessions)
                {
                    if (s == session)
                    {
                        continue;
                    }
                    s.Send(ntf);
                }
            }

            session.room.SyncBall(session.ball);
            yield break;
        }
示例#2
0
        private void Update()
        {
            Gamnet.Session.EventLoop.Update();

            deltaTime += Time.deltaTime;
            while (deltaTime >= Time.fixedDeltaTime)
            {
                deltaTime -= Time.fixedDeltaTime;
                physicsScene.Simulate(Time.fixedDeltaTime);
            }

            if (Room.State.Ready == room.state)
            {
                if (true == Input.GetMouseButtonUp(MOUSE_BUTTON_LEFT))
                {
                    room.state = Room.State.Play;
                    ball.transform.SetParent(room.transform);
                    ball.rigidBody.useGravity = false;
                    Packet.MsgCliSvr_Start_Ntf ntf = new Packet.MsgCliSvr_Start_Ntf();
                    Network.Send(ntf);
                }
            }

            // https://gamedevbeginner.com/how-to-convert-the-mouse-position-to-world-space-in-unity-2d-3d/#screen_to_world_3d
            if (Room.State.Init != room.state)
            {
                if (true == Input.GetMouseButton(MOUSE_BUTTON_LEFT))
                {
                    /*
                     * Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                     * RaycastHit hit;
                     * if (true == Physics.Raycast(ray, out hit, Mathf.Infinity))
                     * {
                     *  Bar bar = hit.transform.GetComponent<Bar>();
                     *  if (null != bar)
                     *  {
                     *      isTouched = true;
                     *  }
                     * }
                     */
                    float distance;
                    Ray   ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                    if (true == backPlane.Raycast(ray, out distance))
                    {
                        Vector3 worldPosition = ray.GetPoint(distance);
                        // 월드 좌표를 로컬 좌표로 이동
                        bar.destination = room.transform.InverseTransformPoint(worldPosition);

                        Packet.MsgCliSvr_SyncBar_Ntf ntf = new Packet.MsgCliSvr_SyncBar_Ntf();
                        ntf.destination = bar.destination;
                        Network.Send(ntf);
                    }
                }
                //bar.rigidBody.velocity = Vector3.zero;
            }
        }