在Unity中实现区域连线
服务器 | MasterServer.RegisterHost("游戏类型","游戏名称","游戏注解"); |
客戶端 | MasterServer.RequestHostList("游戏类型"); |
清除列表 | MasterServer.ClearHostList(); |
请求主机列表 | function Awake() {MasterServer.RequestHostList("LarusTest");} |
取得列表 | var d : HostData[] = MasterServer.PollHostList(); |
1 | //-------------------------------------------------------------------------------服务器脚本 |
2 | |
3 | function Start(){ |
4 | Network.InitializeServer(32,1024,! Network.HavePublicAddress()); |
5 | MasterServer.RegisterHost("AAA","BBB","CCC"); |
6 | print("OK"); |
7 | } |
01 | //-------------------------------------------------------------------------------客户端脚本 |
02 | |
03 | private var s : String = "No"; |
04 | //private var ncErr : NetworkConnectionErro; |
05 | function Awake(){ |
06 | MasterServer.ClearHostList(); |
07 | MasterServer.RequestHostList("AAA"); |
08 | } |
09 | |
10 | function Update () { |
11 | if (MasterServer.PollHostList().Length != 0) { |
12 | var data : HostData[] = MasterServer.PollHostList(); |
13 | for(var e in data){ |
14 | s = "游戏类型:" + e.gameType + "<!--DVFMTSC--> 游戏名称:" + e.gameName |
15 | + " , 內部IP : " + e.ip[0] + " : " + e.port + " , 外部IP:" + e.ip[2] + " : " + e.port; |
16 | for(var h in e.ip){ |
17 | print("所有IP:" + h + ":" + e.port); |
18 | } |
19 | if(e.connectedPlayers < e.playerLimit){ |
20 | if(e.useNat){ |
21 | print("使用NAT穿透"); |
22 | }else{ |
23 | print("直接连接到主机"); |
24 | } |
25 | print(Network.Connect(e.ip,e.port)); |
26 | } |
27 | } |
28 | MasterServer.ClearHostList(); |
29 | } |
30 | } |
31 | |
32 | function OnFailedToConnect(error : NetworkConnectionError ) { |
33 | Debug.Log ("客戶端:无法连接到服务器: "+ error); |
34 | } |
35 | |
36 | function OnConnectedToServer() { |
37 | Debug.Log("客戶端:已<code lang="csharp">连接到服务器"); |
38 | } |
39 |
01 | //--------------------------------------------------------------------------客戶端脚本(简洁的写法) |
02 | |
03 | function Update () { |
04 | if (MasterServer.PollHostList().Length != 0) { |
05 | for(var e in MasterServer.PollHostList()){ |
06 | Network.Connect(e.ip,e.port); |
07 | } |
08 | MasterServer.ClearHostList(); |
09 | } |
10 | } |
11 |
服务器发布一个执行档,客户端脚本也发布一个执行档,分别在不同电脑执行
但必须是区域连线,或者是本地机器 才可看到客户端 Label 正确显示
另外 RequestHostList() 参数,必须要与 RegisterHost() 的 gameTypeName 名称一样,否则无法在不同电脑连线