Exemple #1
0
    void OnInitClientGame(InitServerGameInfo info)
    {
        if (!initRecieved)
        {
            PlayerInfo localInfo = info.clientLocalPlayer;
            if (localInfo != null)
            {
                Player localPlayer = lm.AddPlayer(ControllerType.Local, localInfo.id, localInfo.name);
                localPlayer.transform.position = new Vector3(localInfo.positionX, localInfo.positionY, localInfo.positionZ);

                foreach (PlayerInfo remoteInfo in info.elsePlayers)
                {
                    if (remoteInfo.id != localInfo.id)
                    {
                        Player remotePlayer = lm.AddPlayer(ControllerType.Remote, remoteInfo.id, remoteInfo.name);
                        // 状态设置
                        RemotePlayerController rpc = remotePlayer.GetComponent <RemotePlayerController>();
                        rpc.ApplyRemoteInfo(remoteInfo);
                    }
                }

                initRecieved = true;
            }
        }
    }
Exemple #2
0
    void OnClientReady(ClientReady ready, Connection conn)
    {
        if (conn.state == ConnState.WaitForReady)
        {
            conn.state = ConnState.InGame;
            Player p = lm.AddPlayer(ControllerType.Remote, NewPlayerId(), conn.playerName);
            conn.playerId = p.id;
            //发送游戏状态
            InitServerGameInfo info = new InitServerGameInfo();
            //此客户端的玩家信息
            info.clientLocalPlayer = p.AchievePlayerInfo();
            //其他玩家的信息
            info.elsePlayers = new PlayerInfo[lm.playerCount - 1];
            lm.AchievePlayerInfo(info.elsePlayers, p.id);
            Server.SendMessage(new GameMsg(GameMsg.MsgType.InitServerGameInfo, info), conn.connId, UnityEngine.Networking.QosType.ReliableSequenced);


            //通知其他玩家
            PlayerJoin join = new PlayerJoin();
            join.info = info.clientLocalPlayer;
            GameMsg msg = new GameMsg(GameMsg.MsgType.PlayerJoin, join);

            SendToAllClientsInGame(msg, conn.connId, UnityEngine.Networking.QosType.ReliableSequenced);
        }
    }
Exemple #3
0
 void OnDateEvent(Protocol.GameMsg msg, int connection)
 {
     if (msg.type == GameMsg.MsgType.PlayerJoin)
     {   //新增玩家
         PlayerJoin join = msg.content as PlayerJoin;
         if (join != null)
         {
             OnRemotePlayerJoin(join);
         }
     }
     else if (msg.type == GameMsg.MsgType.PlayerQuit)
     {//移出
         PlayerQuit quit = msg.content as PlayerQuit;
         if (quit != null)
         {
             OnRemotePlayerQuit(quit);
         }
     }
     else if (msg.type == GameMsg.MsgType.ServerGameState)
     {
         //更新
         ServerGameState state = msg.content as ServerGameState;
         if (state != null)
         {
             OnUpdateGameInfo(state);
         }
     }
     else if (msg.type == GameMsg.MsgType.InitServerGameInfo)
     { //开始游戏
         InitServerGameInfo state = msg.content as InitServerGameInfo;
         if (state != null)
         {
             OnInitClientGame(state);
         }
     }
     else if (msg.type == GameMsg.MsgType.Damage)
     {
         HitPlayer hit = msg.content as HitPlayer;
         if (hit != null)
         {
             OnDamage(hit);
         }
     }
     else if (msg.type == GameMsg.MsgType.Shoot)
     {
         PlayerShoot shoot = msg.content as PlayerShoot;
         if (shoot != null)
         {
             OnShoot(shoot);
         }
     }
 }
Exemple #4
0
 void OnDateEvent(GameMsg msg, int connection)
 {
     switch (msg.type)
     {
     case GameMsg.MsgType.InitServerGameInfo:
     {
         InitServerGameInfo info = msg.content as InitServerGameInfo;
         if (info != null)
         {
             GlobalVariables.clientInitInfo      = info;
             asyncOperation.allowSceneActivation = true;
         }
     }
     break;
     }
 }