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; } } }
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); } }
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); } } }
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; } }