Unity 网络通信(聊天)
来源:互联网 发布:美国经济评论数据公开 编辑:程序博客网 时间:2024/05/29 13:46
连接:
注意:给接收请求的脚本所绑定的对象,添加网络视图组件(听起来有点绕口)。在菜单上选择component-->miscellaneous-->Net work View。
http://blog.csdn.net/chenggong2dm/article/details/7896440
客服端和服务器端整合.
Sence1:判断是作为服务器还是客户端。
using UnityEngine;using System.Collections;public class SorC : MonoBehaviour {void OnGUI(){ _sorc ();}void _sorc(){if (GUILayout.Button("作为服务器")) {Application.LoadLevel(1);}if (GUILayout.Button("")) {}if (GUILayout.Button("作为客服端")) {Application.LoadLevel(3);}} //中文支持// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}}
Scence2:根据上一步选择进行服务器或客户端配置。
服务器配置:
using UnityEngine;using System.Collections;public class ServerConfig : MonoBehaviour {//聊天信息 string Message = ""; string InputMessage ="";//public static string IPMessage ="Ip:";//public static string PortMessage ="Port:";public static string NameMessage ="Name:";//声明一个二维向量 Vector2 Sc; void OnGUI(){ showConfig ();}void showConfig(){//创建开始滚动视图 Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(400),GUILayout.Height(600)); if (GUILayout.Button("服务器初始配置(请删除输入框信息重新输入)")) {}//IPMessage= GUILayout.TextArea(IPMessage); //PortMessage = GUILayout.TextArea(PortMessage); NameMessage = GUILayout.TextArea(NameMessage); if (GUILayout.Button("确定")){ Application.LoadLevel(2);}//结束滚动视图, 注意, 与开始滚动视图成对出现 GUILayout.EndScrollView(); } //中文支持// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}}
客户端配置:
using UnityEngine;using System.Collections;public class ClientConfig : MonoBehaviour {//聊天信息 string Message = ""; string InputMessage ="";public static string IPMessage ="Ip:";//public static string PortMessage ="Port:";public static string NameMessage ="Name:";//声明一个二维向量 Vector2 Sc; void OnGUI(){ showConfig ();}void showConfig(){//创建开始滚动视图 Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(400),GUILayout.Height(600)); if (GUILayout.Button("客服端初始配置(请删除输入框信息重新输入)")) {}IPMessage= GUILayout.TextArea(IPMessage); //PortMessage = GUILayout.TextArea(PortMessage); NameMessage = GUILayout.TextArea(NameMessage); if (GUILayout.Button("确定")){ Application.LoadLevel(4);}//结束滚动视图, 注意, 与开始滚动视图成对出现 GUILayout.EndScrollView(); } //中文支持// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}}
Scence3:运行服务器或客服端
服务器:
using UnityEngine;using System.Collections;public class server : MonoBehaviour {public UITextList textlist;int Port = 10000;string Message = ""; string InputMessage = "";//声明一个二维向量 Vector2 Sc; //OnGUI方法,所有GUI的绘制都需要在这个方法中实现void OnGUI(){//Network.peerType是端类型的状态://即disconnected, connecting, server 或 client四种switch(Network.peerType){//禁止客户端连接运行, 服务器未初始化case NetworkPeerType.Disconnected:StartServer();break;//运行于服务器端case NetworkPeerType.Server:OnServer();OnClient();break;//运行于客户端case NetworkPeerType.Client:break;//正在尝试连接到服务器case NetworkPeerType.Connecting:break;}}void StartServer(){//当用户点击按钮的时候为trueif (GUILayout.Button("创建服务器")) {//初始化本机服务器端口,第一个参数就是本机接收多少连接NetworkConnectionError error = Network.InitializeServer(12,Port,false);//Debug.Log("错误日志"+error);switch(error){case NetworkConnectionError.NoError:break;default:Debug.Log("服务端错误"+error);break;}}}void OnServer(){GUILayout.Label("服务端已经运行,等待客户端连接");//Network.connections是所有连接的玩家, 数组[]//取客户端连接数. int length = Network.connections.Length;//按数组下标输出每个客户端的IP,Port//for (int i=0; i<length; i++)//{//GUILayout.Label("客户端"+i);//GUILayout.Label("客户端ip"+Network.connections[i].ipAddress);//GUILayout.Label("客户端端口"+Network.connections[i].port);//}//当用户点击按钮的时候为trueif (GUILayout.Button("断开服务器")){Network.Disconnect();}//if(haveNewMessage){//haveNewMessage=false;//textlist.Add (Message);//}//创建开始滚动视图 //Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(280),GUILayout.Height(400)); //绘制纹理, 显示内容 //GUILayout.Box(Message); //结束滚动视图, 注意, 与开始滚动视图成对出现 //GUILayout.EndScrollView();}bool haveNewMessage=false;//接收请求的方法. 注意要在上面添加[RPC] [RPC] void ReciveMessage(string msg, NetworkMessageInfo info){ //刚从网络接收的数据的相关信息,会被保存到NetworkMessageInfo这个结构中 //Message = "发送端"+info.sender +"消息"+msg; Message = msg;//+"时间"+info.timestamp +"网络视图"+info.networkView //Debug.Log ("aaaaaaaaaaaa");haveNewMessage = true;//MessageText [0] = Message;if(MessageText [3]!=null){MessageText [4]=MessageText [3];}if(MessageText [2]!=null){MessageText [3]=MessageText [2];}if(MessageText [1]!=null){MessageText [2]=MessageText [1];}if(MessageText [0]!=null){MessageText [1]=MessageText [0];}MessageText [0]=Message;} /* 系统提供的方法,该方法只执行一次 */// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {}void OnClient(){ //创建开始滚动视图 //Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(280),GUILayout.Height(400)); Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(600),GUILayout.Height(600)); //if(GUILayout.Box(MessageText [4]!=null)){//GUILayout.Box(MessageText [4]);//}//if(GUILayout.Box(MessageText [3]!=null)){//GUILayout.Box(MessageText [3]);//}//if(GUILayout.Box(MessageText [2]!=null)){//GUILayout.Box(MessageText [2]);//}//if(GUILayout.Box(MessageText [1]!=null)){//GUILayout.Box(MessageText [1]);//}//if(GUILayout.Box(MessageText [0]!=null)){//GUILayout.Box(MessageText [0]);//}for(int i=MessageText.Length-1;i>=0;i--){if(MessageText[i]!=null){GUILayout.Box(MessageText[i]);}}//if(MessageText [2]!=null){//GUILayout.Box(MessageText [2]);//GUILayout.Box(MessageText [1]); //GUILayout.Box(MessageText [0]); //}else if(MessageText [1]!=null){//GUILayout.Box(MessageText [1]); //GUILayout.Box(MessageText [0]); //}else if(MessageText [0]!=null){////绘制纹理, 显示内容 //GUILayout.Box(MessageText [0]); //}//文本框 InputMessage = GUILayout.TextArea(InputMessage); if (GUILayout.Button("发送")){ //string OutMessage="马学淮:"+InputMessage;string OutMessage=ServerConfig.NameMessage+":"+InputMessage;//Debug.Log("aaaa:"+Config.NameMessage);//发送给接收的函数, 模式为全部, 参数为信息 networkView.RPC("ReciveMessage", RPCMode.All, OutMessage); InputMessage = "";} //结束滚动视图, 注意, 与开始滚动视图成对出现 GUILayout.EndScrollView(); } string[] MessageText=new string[5];}
客户端:
using UnityEngine; using System.Collections; public class client : MonoBehaviour { //要连接的服务器地址 //string IP = "127.0.0.1";//string IP = "10.80.3.33";string IP = "10.80.3.102";//self//string IP = "10.80.55.102";//error//要连接的端口 int Port = 10000; //聊天信息 string Message = ""; string InputMessage ="";//声明一个二维向量 Vector2 Sc; bool IsLogin=false;void OnGUI(){ //端类型的状态 switch(Network.peerType){ //禁止客户端连接运行, 服务器未初始化 case NetworkPeerType.Disconnected: StartConnect(); break; //运行于服务器端 case NetworkPeerType.Server: break; //运行于客户端 case NetworkPeerType.Client:if(!IsLogin){IsLogin=true;string LoginMessage="用户"+ClientConfig.NameMessage+"已登录";networkView.RPC("ReciveMessage", RPCMode.All, LoginMessage); }OnClient();break; //正在尝试连接到服务器 case NetworkPeerType.Connecting: break; } } void StartConnect(){ if (GUILayout.Button("连接服务器")){ //NetworkConnectionError error = Network.Connect(IP,Port); NetworkConnectionError error = Network.Connect(ClientConfig.IPMessage,Port); //Debug.Log("连接状态"+error); switch(error){case NetworkConnectionError.NoError://string LoginMessage="用户"+ClientConfig.NameMessage+"已登录";//networkView.RPC("ReciveMessage", RPCMode.All, LoginMessage); break;default:Debug.Log("客服端错误"+error);break;}} } string[] MessageText=new string[5];void OnClient(){ //创建开始滚动视图 Sc = GUILayout.BeginScrollView(Sc,GUILayout.Width(600),GUILayout.Height(600)); //绘制纹理, 显示内容 //GUILayout.Box(Message); for(int i=MessageText.Length-1;i>=0;i--){if(MessageText[i]!=null){GUILayout.Box(MessageText[i]);}}//if(MessageText [2]!=null){//GUILayout.Box(MessageText [2]);//GUILayout.Box(MessageText [1]); //GUILayout.Box(MessageText [0]); //}else if(MessageText [1]!=null){//GUILayout.Box(MessageText [1]); //GUILayout.Box(MessageText [0]); //}else if(MessageText [0]!=null){////绘制纹理, 显示内容 //GUILayout.Box(MessageText [0]); //}//文本框 //Message = GUILayout.TextArea(Message); InputMessage = GUILayout.TextArea(InputMessage); if (GUILayout.Button("发送")){ //string myMessage="胡明月:"+InputMessage;string OutMessage=ClientConfig.NameMessage+":"+InputMessage;//发送给接收的函数, 模式为全部, 参数为信息 networkView.RPC("ReciveMessage", RPCMode.All, OutMessage); InputMessage = "";} //结束滚动视图, 注意, 与开始滚动视图成对出现 GUILayout.EndScrollView(); } //接收请求的方法. 注意要在上面添加[RPC] [RPC] void ReciveMessage(string msg, NetworkMessageInfo info){ //刚从网络接收的数据的相关信息,会被保存到NetworkMessageInfo这个结构中 //Message = "发送端"+info.sender +"消息"+msg; Message = msg;if(MessageText [3]!=null){MessageText [4]=MessageText [3];}if(MessageText [2]!=null){MessageText [3]=MessageText [2];}if(MessageText [1]!=null){MessageText [2]=MessageText [1];}if(MessageText [0]!=null){MessageText [1]=MessageText [0];}MessageText[0]= Message;} // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
注意:给接收请求的脚本所绑定的对象,添加网络视图组件(听起来有点绕口)。在菜单上选择component-->miscellaneous-->Net work View。
0 0
- Unity 网络通信(聊天)
- Unity网络通信(二)Unity Network 聊天
- Unity网络通信(二)Unity Network 聊天
- Unity网络通信(二)Unity Network 聊天
- unity网格通信2--聊天
- 网络通信聊天程序(群聊)
- Unity网络通信(三)同步物体
- Unity网络通信(三)同步物体
- Unity网络通信(三)同步物体
- Unity 网络通信
- unity网络通信1
- unity的网络通信
- Unity 网络通信
- unity 网络通信 学习
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- java解压带密码的zip文件
- bzoj 2818 Gcd 【欧拉函数】
- hdu 1358 Period ( kmp )
- JAVA基础知识:抽象类、接口
- Learning Time Series with R
- Unity 网络通信(聊天)
- 性能计数器
- Oracle SQL性能优化
- UART整理
- EasyScholar bug
- 性能测试:SequoiaDB vs. MongoDB vs. Cassandra vs. HBase
- List和ArrayList的区别
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
- Objective-C属性修饰符strong和copy的区别