unity局域网
在Unity开发中,寻找处理Socket的方法并非易事。Unity自带的Network类主要用于局域网状态同步,若要实现MMO级别的网络应用,可能需要使用C#自行编写相关代码。因为与Android Studio(AS)不同,Unity目前没有直接处理数据包、字节级别的底层函数。
服务器端代码实现
以下是服务器端的代码示例:
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() {
// 当用户点击“创建服务器”按钮时
if (GUILayout.Button("创建服务器")) {
// 初始化本机服务器端口,第一个参数表示本机接收的最大连接数
NetworkConnectionError error = Network.InitializeServer(12, Port, false);
Debug.Log("错误日志: " + error);
}
}
// 服务器运行时的处理方法
void OnServer() {
GUILayout.Label("服务端已经运行,等待客户端连接");
// 获取所有连接的玩家数组
int length = Network.connections.Length;
// 遍历数组,输出每个客户端的IP和端口
for (int i = 0; i < length; i++) {
GUILayout.Label("客户端 " + i);
GUILayout.Label("客户端IP: " + Network.connections[i].ipAddress);
GUILayout.Label("客户端端口: " + Network.connections[i].port);
}
// 当用户点击“断开服务器”按钮时
if (GUILayout.Button("断开服务器")) {
Network.Disconnect();
}
}
// 系统提供的方法,只执行一次,用于初始化
void Start() {
}
// 每帧调用的方法
void Update() {
}
}
服务器端代码使用步骤
- 将上述代码拖拽到摄像机上。
- 运行程序,依次选择
File->Build settings->Build And Run,并选择Web Player。 - 服务器端建立完毕,保持服务器端的运行状态。
客户端代码实现
以下是客户端的代码示例:
using UnityEngine;
using System.Collections;
public class client : MonoBehaviour {
// 要连接的服务器地址
string IP = "127.0.0.1";
// 要连接的端口
int Port = 10000;
// OnGUI方法,用于绘制GUI元素
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);
}
}
// 系统提供的方法,只执行一次,用于初始化
void Start() {
}
// 每帧调用的方法
void Update() {
}
}
客户端代码使用步骤
可以新建立一个项目编写客户端代码,若嫌麻烦,也可以先把摄像机上的服务器脚本删掉,再将上述客户端脚本拖拽上去。
通过以上代码和步骤,我们可以在Unity中实现简单的局域网服务器和客户端的连接。需要注意的是,Unity的Network类在较新的版本中已经逐渐被弃用,在实际开发中建议使用更现代的网络解决方案,如Unity的UNet或第三方网络库。