连接:
注意:给接收请求的脚本所绑定的对象,添加网络视图组件(听起来有点绕口)。在菜单上选择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 initialization
void Start () {
}
// Update is called once per frame
void 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 initialization
void Start () {
}
// Update is called once per frame
void 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 initialization
void Start () {
}
// Update is called once per frame
void 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(){
//当用户点击按钮的时候为true
if (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);
// }
//当用户点击按钮的时候为true
if (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 initialization
void Start () {
}
// Update is called once per frame
void 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。