|
- using UnityEngine;
- using System.Collections;
- using System;
- public class NPBase : MonoBehaviour {
- public string connectToIp = "127.0.0.1";
- public int connectPort = 80;
- public bool useNAT = false;
- public string ipaddress = "";
- public string port = "";
- string playerName = "<NAME ME>";
- void OnGUI()
- {
- //Network.peerType:端类型的状态,即disconnected, connecting, server 或 client四种。
- if(Network.peerType==NetworkPeerType.Disconnected)//Network类是网络实现的核心并提供核心函数。
- {
- if (GUILayout.Button("Connect"))
- {
- if (playerName != "<NAME ME>")
- {
- PlayerPrefs.SetString("playerName", playerName);//PlayerPrefs在游戏会话中储存和访问玩家偏好设置。http://3d.ceeger.com/Script/PlayerPrefs/PlayerPrefs.html
- Network.useNat = useNAT;
- Network.Connect(connectToIp, connectPort);//连接到特定的主机(IP或域名)和服务器端口。
-
- }
- }
- if (GUILayout.Button("Start Server"))
- {
- if (playerName != "<NAME ME>")
- {
- PlayerPrefs.SetString("playerName", playerName);
- Network.useNat = useNAT;//useNat设置NAT穿透功能。如果你想要这个服务器能够接受连接使用NAT穿透,使用facilitator,设置这个为true。
-
- Network.InitializeServer(2, connectPort);//初始化服务器。http://3d.ceeger.com/Script/Network/Network.InitializeServer.html
- foreach (GameObject go in FindObjectsOfType(typeof(GameObject)))//static function FindObjectsOfType (type : Type) : Object[] :查找Type物体,返回Type类型的所有激活的加载的物体列表,它将返回任何资源(网格,纹理,预设,...)或激活的物体。请注意这个函数是非常慢的。不推荐在每帧使用这个函数,大多数情况下你可以使用单例模式代替。
- {
- go.SendMessage("OnNetworkLoadedLevel", SendMessageOptions.DontRequireReceiver);//向同级发送消息。在这个游戏物体上的所有MonoBehaviour上调用名称为methodName的方法。接收消息的方法可以通过不要参数的方法来选择忽略参数。当选项被设置为SendMessageOptions.RequireReceiver时,如果消息没有被任何一个组件处理,则会打印一个错误。http://3d.ceeger.com/Script/GameObject/GameObject.SendMessage.html
- }
-
- }
- }
- playerName = GUILayout.TextField(playerName);
- connectToIp = GUILayout.TextField(connectToIp);
- connectPort = Convert.ToInt32(GUILayout.TextField(connectPort.ToString()));
-
- }
-
- else
- {
- if(Network.peerType==NetworkPeerType.Connecting)//NetworkPeerType:描述作为由Network.peerType返回的网络接口端类型的状态。http://3d.ceeger.com/Script/Enumerations/NetworkPeerType/NetworkPeerType.html
- {
- GUILayout.Label("Connect Status:Connecting");
- }
- else if(Network.peerType==NetworkPeerType.Client)
- {
- GUILayout.Label("Connection Status:Client!");
- GUILayout.Label("Ping to Server: "+Network.GetAveragePing(Network.connections[0]));//Network.GetAveragePing:到给定player的最后平均ping时间,以毫秒计。如果没有发现玩家,返回-1。Ping会每隔几秒自动发出。
- }
- else if(Network.peerType==NetworkPeerType.Server)
- {
- GUILayout.Label("Connection Status:Server!");
- GUILayout.Label("Connections: "+Network.connections.Length);
- if(Network.connections.Length>=1)//Network.connections:所有连接的玩家,在客户端中,该变量只包含服务器。
- {
- GUILayout.Label("Ping to Server: "+Network.GetAveragePing(Network.connections[0]));
- }
- }
- if(GUILayout.Button("Disconnect"))
- {
- Network.Disconnect(200);//关闭所有开放的连接并关闭网络接口,timeout参数表示网络接口在未收到信号的情况下,多长时间会断开。网络状态,如安全和密码,也会被重置。
- }
- ipaddress = Network.player.ipAddress;//这个玩家使用的IP地址。http://3d.ceeger.com/Script/NetworkPlayer/NetworkPlayer.html
- port = Network.player.port.ToString();//这个玩家使用的端口。Network.player:获取本地NetworkPlayer实例
- GUILayout.Label("IP Address: "+ipaddress+":" +port);
- }
- }
- void OnConnectedToServer()//当你成功连接到服务器时,在客户端调用。
- {
- foreach(GameObject go in FindObjectsOfType(typeof(GameObject)))
- {
- go.SendMessage("OnNetworkLoadedLever",SendMessageOptions.DontRequireReceiver);
- }
- }
- }
复制代码 将以上代码附加到Main camera上即可实现。
[cz]有图有真相![/cz]{:soso__11824716995429377336_2:}
各种平台的测试,图片如下:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|