翻了半天unity的API,也没有发现可以处理Socket的方法。Unity自己封了个网络处理的类Network,主要用于状态同步。
似乎是要实现MMO级别的网络应用,只能用C#自己去写了。(Unity不像AS,有直接处理数据包、字节级别的底层函数。至少现在没有。)
我们还是先了解一下Unity,看看用Unity如何编写通信,从最简单的开始。
1,新建项目。新建一个项目里面会有一个摄像机。
2,编写服务器端代码cs:
-
using UnityEngine;
-
using System.Collections;
-
-
public class server : MonoBehaviour {
-
-
int Port = 10000;
-
-
//OnGUI方法,所有GUI的绘制都需要在这个方法中实现
-
void OnGUI(){
-
//Network.peerType是端类型的状态:
-
//即disconnected, connecting, server 或 client四种
-
switch(Network.peerType){
-
//禁止客户端连接运行, 服务器未初始化
-
case NetworkPeerType.Disconnected:
-
StartServer();
-
break;
-
//运行于服务器端
-
case NetworkPeerType.Server:
-
OnServer();
-
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);
-
}
-
}
-
-
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();
-
}
-
}
-
-
-
/* 系统提供的方法,该方法只执行一次 */
-
// Use this for initialization
-
void Start () {
-
-
}
-
-
// Update is called once per frame
-
void Update () {
-
-
}
-
}
复制代码
3,把这个代码拖拽到摄像机上。
4,运行程序 File---->Build settings---->Build And Run,选择Web Player
5,服务器端建立完毕,保持服务器端的运行状态。
6,这里可以再新建立个项目写客户端。嫌麻烦也可以像我这样,先把摄像机上的服务器脚本删掉,再把下面的客户端脚本拖拽上去。
客户端代码如下:
-
using UnityEngine;
-
using System.Collections;
-
-
public class client : MonoBehaviour {
-
//要连接的服务器地址
-
string IP = "127.0.0.1";
-
//要连接的端口
-
int Port = 10000;
-
-
void OnGUI(){
-
//端类型的状态
-
switch(Network.peerType){
-
//禁止客户端连接运行, 服务器未初始化
-
case NetworkPeerType.Disconnected:
-
StartConnect();
-
break;
-
//运行于服务器端
-
case NetworkPeerType.Server:
-
break;
-
//运行于客户端
-
case NetworkPeerType.Client:
-
break;
-
//正在尝试连接到服务器
-
case NetworkPeerType.Connecting:
-
break;
-
}
-
}
-
-
-
void StartConnect(){
-
if (GUILayout.Button("连接服务器")){
-
NetworkConnectionError error = Network.Connect(IP,Port);
-
Debug.Log("连接状态"+error);
-
}
-
}
-
-
// Use this for initialization
-
void Start () {
-
-
}
-
-
// Update is called once per frame
-
void Update () {
-
-
}
-
}
复制代码
7,运行程序 File---->Build
settings---->Build And Run,选择Web Player8,结果如下,可以通信。
声明:此篇文档时来自于【狗刨学习网】社区-unity极致学院,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。