untiy3d 5x,network的服务器端和客户端通信
2016-04-29 15:04
176 查看
unity3d 5x以前,可以用NetworkView.RPC的方式进行通信。5x,之后,虽然还可以用networkview建立服务器和客户端,但是NetworkView.RPC的通信方式被取消了。
取代的是用networking下的networkserver和nerworkclient(大概吧,我猜的)
以前类似于下面这样的,应该是不能再用了。
接下来用新的方法试试:
建立新场景,加上按钮,输入框,文本显示。(不爱用OnGUI)
首先,要引用UnityEngine.Networking
建立服务器用NetworkServer.Listen
客户端连接的方法是NetworkClient.Connect
服务器端和客户端的事件都是通过RegisterHandler方法注册的,
下面的例子就是在服务器端注册了一个OnConnected事件,事件是当有客户端连接到服务器端的时候在服务器端触发。
客户端注册事件的方法相同。
接下来,说发送信息。
服务器端发送信息是用NetworkServer.SendToAll或NetworkServer.SendToClient,客户端发送信息用NetworkClient.Send
其中参数Networking.MessageBase msg是一个自己定义的类,但是这个类必须继承自MessageBase
ok,说明完毕,上代码
这是发生信息的类
这是主类
运行结果如下
代码下载地址:http://download.csdn.net/detail/wuyt2008/9506591
取代的是用networking下的networkserver和nerworkclient(大概吧,我猜的)
以前类似于下面这样的,应该是不能再用了。
[RPC] void SpawnBox(NetworkViewID viewID, Vector3 location) { Transform clone; clone = Instantiate(cubePrefab, location, Quaternion.identity) as Transform as Transform; NetworkView nView; nView = clone.GetComponent<NetworkView>(); nView.viewID = viewID; }
接下来用新的方法试试:
建立新场景,加上按钮,输入框,文本显示。(不爱用OnGUI)
首先,要引用UnityEngine.Networking
using UnityEngine.Networking;
建立服务器用NetworkServer.Listen
NetworkServer.Listen(4444);
客户端连接的方法是NetworkClient.Connect
NetworkClient myClient; myClient = new NetworkClient (); myClient.Connect("127.0.0.1", 8888);
服务器端和客户端的事件都是通过RegisterHandler方法注册的,
下面的例子就是在服务器端注册了一个OnConnected事件,事件是当有客户端连接到服务器端的时候在服务器端触发。
void Start() { NetworkServer.Listen(7070); NetworkServer.RegisterHandler(MsgType.Connect, OnConnected); } void OnConnected(NetworkMessage netMsg) { Debug.Log ("Client connected"); }
客户端注册事件的方法相同。
接下来,说发送信息。
服务器端发送信息是用NetworkServer.SendToAll或NetworkServer.SendToClient,客户端发送信息用NetworkClient.Send
其中参数Networking.MessageBase msg是一个自己定义的类,但是这个类必须继承自MessageBase
class RegisterHostMessage : MessageBase { public string gameName; public string comment; public bool passwordProtected; }
ok,说明完毕,上代码
这是发生信息的类
using UnityEngine.Networking; public class UserMsg : MessageBase { public string message; }
这是主类
using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; using System; public class MyNetworkManager : MonoBehaviour { /// <summary> /// 服务器ip地址 /// </summary> public InputField ip; /// <summary> /// 服务器端口 /// </summary> public InputField port; /// <summary> /// 要发送的信息 /// </summary> public InputField send; /// <summary> /// 显示信息 /// </summary> public Text info; /// <summary> /// 网络客户端 /// </summary> private NetworkClient myClient; /// <summary> /// 用户信息分类 /// </summary> private const short userMsg = 64; void Start () { info.text = "Start..."; myClient = new NetworkClient (); } /// <summary> /// 建立服务器 /// </summary> public void SetupServer () { if (!NetworkServer.active) { ShowMsg ("setup server"); ServerRegisterHandler (); NetworkServer.Listen (int.Parse (port.text)); if (NetworkServer.active) { ShowMsg ("Server setup ok."); } } } /// <summary> /// 建立客户端 /// </summary> public void SetupClient () { if (!myClient.isConnected) { ShowMsg ("setup client"); ClientRegisterHandler (); myClient.Connect (ip.text, int.Parse (port.text)); } } /// <summary> /// 停止客户端 /// </summary> public void ShutdownClient () { if (myClient.isConnected) { ClientUnregisterHandler (); myClient.Disconnect (); //NetworkClient.Shutdown()使用后,无法再次连接。 //This should be done when a client is no longer going to be used. //myClient.Shutdown (); } } /// <summary> /// 停止服务器端 /// </summary> public void ShutdownServer () { if (NetworkServer.active) { ServerUnregisterHandler (); NetworkServer.DisconnectAll (); NetworkServer.Shutdown (); if (!NetworkServer.active) { ShowMsg ("shut down server"); } } } /// <summary> /// 客户端连接到服务器事件 /// </summary> /// <param name="netMsg">Net message.</param> private void OnClientConnected (NetworkMessage netMsg) { ShowMsg ("Client connected to server"); } /// <summary> ///客户端从服务器断开事件 /// </summary> /// <param name="netMsg">Net message.</param> private void OnClientDisconnected (NetworkMessage netMsg) { ShowMsg ("Client disconnected from server"); } /// <summary> /// 客户端错误事件 /// </summary> /// <param name="netMsg">Net message.</param> private void OnClientError (NetworkMessage netMsg) { ClientUnregisterHandler (); ShowMsg ("Client error"); } /// <summary> /// 服务器端有客户端连入事件 /// </summary> /// <param name="netMsg">Net message.</param> private void OnServerConnected (NetworkMessage netMsg) { ShowMsg ("One client connected to server"); } /// <summary> /// 服务器端有客户端断开事件 /// </summary> /// <param name="netMsg">Net message.</param> private void OnServerDisconnected (NetworkMessage netMsg) { ShowMsg ("One client connected from server"); } /// <summary> /// 服务器端错误事件 /// </summary> /// <param name="netMsg">Net message.</param> private void OnServerError (NetworkMessage netMsg) { ServerUnregisterHandler (); ShowMsg ("Server error"); } /// <summary> /// 显示信息 /// </summary> /// <param name="Msg">Message.</param> private void ShowMsg (string Msg) { info.text = Msg + "\n\r" + info.text; //Debug.Log (Msg); } /// <summary> /// 客户端向服务器端发送信息 /// </summary> public void ClientSend () { if (myClient.isConnected) { UserMsg um = new UserMsg (); um.message = send.text; if (myClient.Send (userMsg, um)) { ShowMsg ("Client send:" + send.text); } } } /// <summary> /// 客户端接收到服务器端信息事件 /// </summary> /// <param name="netMsg">Net message.</param> private void ClientGet (NetworkMessage netMsg) { UserMsg Msg = netMsg.ReadMessage<UserMsg> (); ShowMsg ("Client get:"+Msg.message); } /// <summary> /// 服务器端向所有客户端发送信息 /// </summary> public void ServerSend () { if (NetworkServer.active) { UserMsg um = new UserMsg (); um.message = send.text; if (NetworkServer.SendToAll (userMsg, um)) { ShowMsg ("Server send:" + send.text); } } } /// <summary> /// 服务器端收到信息事件 /// </summary> /// <param name="netMsg">Net message.</param> private void ServerGet (NetworkMessage netMsg) { UserMsg Msg = netMsg.ReadMessage<UserMsg> (); ShowMsg ("Server get:"+Msg.message); } /// <summary> /// 服务器端注册事件 /// </summary> private void ServerRegisterHandler(){ NetworkServer.RegisterHandler (MsgType.Connect, OnServerConnected); NetworkServer.RegisterHandler (MsgType.Disconnect, OnServerDisconnected); NetworkServer.RegisterHandler (MsgType.Error, OnServerError); NetworkServer.RegisterHandler (userMsg, ServerGet); } /// <summary> /// 客户端注册事件 /// </summary> private void ClientRegisterHandler(){ myClient.RegisterHandler (MsgType.Connect, OnClientConnected); myClient.RegisterHandler (MsgType.Disconnect, OnClientDisconnected); myClient.RegisterHandler (MsgType.Error, OnClientError); myClient.RegisterHandler (userMsg, ClientGet); } /// <summary> /// 客户端注销事件 /// </summary> private void ClientUnregisterHandler(){ myClient.UnregisterHandler (MsgType.Connect); myClient.UnregisterHandler (MsgType.Disconnect); myClient.UnregisterHandler (MsgType.Error); myClient.UnregisterHandler (userMsg); } /// <summary> /// 服务器端注销事件 /// </summary> private void ServerUnregisterHandler(){ NetworkServer.UnregisterHandler (MsgType.Connect); NetworkServer.UnregisterHandler (MsgType.Disconnect); NetworkServer.UnregisterHandler (MsgType.Error); NetworkServer.UnregisterHandler (userMsg); } }
运行结果如下
代码下载地址:http://download.csdn.net/detail/wuyt2008/9506591
相关文章推荐
- Neutron/L3 High Availability VRRP
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )屏幕适配
- OAuth认证
- zabbix 3.0.2网卡流量监控
- ScorllVie与ListView的嵌套问题
- 图像轮廓个直方图-(Python)
- Android剪贴板
- iOS语音书写功能(语音转文本)
- 文章标题
- UML及其StarUML介绍
- 装饰器模式和代理模式的区别
- MSSQL创建维护计划自动备份数据库
- Python+Opencv识别两张相似图片
- 冒泡排序
- Lucene多线程创建索引及多目录下查询索引
- getInstalledPackages、ResolveInfo 获取apk的信息
- 三点一刻CEO蔡浩宇亮相2016GMIC并发表演讲 引领智能公关新时代
- 引用不同文件的类,加载类
- SQL JOIN
- Kafka 0.9 新消费者API