服务器端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
using UnityEngine; using System.Collections; public class UnityServer : MonoBehaviour { int port = 2222; bool isInitialized = false; // 服务器是否初始化完成 bool isPlayerConnected = false; // 是否有玩家连接 NetworkPlayer tempPlayer; // 当前进入游戏的玩家 string msg = ""; // 服务器端接收客户端的消息 void OnGUI (){ // 根据不同的状态生成不同的按钮 switch (Network.peerType){ case NetworkPeerType.Server: // 服务器创建成功后,开始监听客户请求 WaitClient(); break; case NetworkPeerType.Connecting: break; case NetworkPeerType.Disconnected: // 没有连接时点击创建服务器 StartServer(); break; } } void StartServer (){ if (GUI.Button (new Rect (0,0,100,30), "创建服务器")){ NetworkConnectionError error = Network.InitializeServer (10, port, false); Debug.Log (error); // 连接阿里的服务器 MasterServer.ipAddress = "115.28.227.1"; MasterServer.port = 23466; MasterServer.RegisterHost ("DouDiZhu", "505"); } } // 系统方法 服务器初始化完成时调用 确认是否初始化结束方法 void OnServerInitialized (){ isInitialized = true; } void WaitClient (){ // if (isInitialized){ GUILayout.Label ("服务器已经初始化完成,等待客户请求..."); } // 如果isPlayerConnected为True 则输出玩家信息 if (isPlayerConnected){ GUILayout.Label ("新玩家进入游戏: " + tempPlayer + " : " + tempPlayer.port); } // 显示所有连接信息 连接的人数 int length = Network.connections.Length; for (int i = 0; i < length; i++) { GUILayout.Label ("ID: " + (i + 1) + " IP: " + Network.connections[i].ipAddress + " ExternalIP: " + Network.connections[i].externalIP); } // 显示客户端传过来的字符串 GUILayout.Label (msg + "~~"); // 当点击断开连接按钮, 调用断开连接方法 if (GUI.Button (new Rect(300,0,100,30), "断开服务器")){ Network.Disconnect (); // 断开连接方法 } } // 系统方法 当有玩家连接时自动调用该方法 void OnPlayerConnected (NetworkPlayer player){ isPlayerConnected = true; tempPlayer = player; } void BeConnecting (){ GUILayout.Label ("Connecting"); } void ControlPlayer (){ if (isPlayerConnected) { } } [RPC] // 用于客户端调用此方法 传值 void ReceiveMsg (string str){ // 将客户端的参数赋值给服务器端 msg = str; } } |
客户端:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
using UnityEngine; using System.Collections; public class UnityClient : MonoBehaviour { string IP = "127.0.0.1"; int port = 2222; // 端口 bool isConnectedToServer = false; // 判断连接是否成功 // 根据不同的网络状态生成不同界面 void OnGUI (){ // 共有4种状态 switch (Network.peerType) { // 客户端一般有三种状态 客户端状态、连接中、未连接 case NetworkPeerType.Client: BeClient(); break; case NetworkPeerType.Connecting: BeConnecting(); break; case NetworkPeerType.Disconnected: ConnectServer(); break; case NetworkPeerType.Server: // 客户端程序用不到服务器 break; } } void ConnectServer (){ // 创建连接服务器按钮 if (GUI.Button (new Rect (0,0,100,30), "连接服务器")){ // 调用NetWork类的Connect方法建立连接 NetworkConnectionError error = Network.Connect (IP, port); Debug.Log ("连接状态: " + error); // 请求名为斗地主 MasterServer.RequestHostList ("DouDiZhu"); } // 获取主机列表之后 hosts 获取的服务器保存的主机 HostData[] hosts = MasterServer.PollHostList (); for (int i = 0; i < hosts.Length; i++){ GUILayout.Label (hosts[i].gameType + ": " + hosts[i].gameName); } if (hosts.Length > 0){ // 当主机列表不为空时 // 用主机参数进行连接 NetworkConnectionError error = Network.Connect (hosts[0]); } } NetworkMessageInfo nmi; void BeClient (){ GUILayout.Label ("Client"); if (GUI.Button (new Rect (200,0,100,30), "断开连接")){ Network.Disconnect (); } // networkView 为 NetWorkView组件对象 // ReceiveMsg 为 服务器端 ReceiveMsg方法 // 你好 字符串传到 ReceiveMsg方法参数里 networkView.RPC ("ReceiveMsg", RPCMode.Server, "你好,我是客户端!"); } void BeConnecting (){ GUILayout.Label ("Connecting"); } [RPC] // 客户端要有同服务器相同的RPC方法声明 否则无法传送到服务器 void ReceiveMsg (string str){ } } |
- 本文固定链接: http://www.u3d8.com/?p=158
- 转载请注明: 网虫虫 在 u3d8.com 发表过