Unity 网络通信(一)Unity Network 初步
2013-09-25 17:28
459 查看
翻了半天unity的API,也没有发现可以处理Socket的方法。Unity自己封了个网络处理的类Network,主要用于状态同步。 似乎是要实现MMO级别的网络应用,只能用C#自己去写了。(Unity不像AS,有直接处理数据包、字节级别的底层函数。至少现在没有。如果您要应用于实际,比如做了个网游,那么您需要用unity自带的C#去写一套自定义通信协议来实现。这个我在后面的文章中会写一个示例。)
我们还是先了解一下Unity,看看用Unity自带的组件,如何编写通信,从最简单的开始。
1,新建项目。新建一个项目里面会有一个摄像机。
2,编写服务器端代码cs:
[csharp] view
plaincopy
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,这里可以再新建立个项目写客户端。嫌麻烦也可以像我这样,先把摄像机上的服务器脚本删掉,再把下面的客户端脚本拖拽上去。
客户端代码如下:
[csharp] view
plaincopy
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 Player
8,结果如下,可以通信。
附注: 本文大部分代码出自《Unity 3D 游戏开发》,作者宣雨松。
/article/7766438.html
相关文章推荐
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- Unity 网络通信(一)Unity Network 初步
- NetWork网络_TCP_在unity中初步实现局域网互联效果
- Unity网络通信(二)Unity Network 聊天
- Unity网络通信(二)Unity Network 聊天
- Unity网络通信(二)Unity Network 聊天
- Unity(C#.net)网络通信问题解决(服务器开启失败,Socket下的“由于目标机器积极拒绝,无法连接”异常)
- Asp.net与Air Socket网络通信编程(初步)---阿超
- qt4中的网络通信network, QTCPServer --- QTCPSocket
- unity的网络通信
- ROS 教程之 network:多台计算机之间网络通信(2)
- Android-Volley网络通信框架(ImageRequest,ImageLoader,NetWorkImageView)
- Unity5.1 新的网络引擎UNET(三) UNET NetworkManager
- unity网络通信3--同步物体
- BROADBAND POWERLINE COMMUNICATIONS NETWORK DESIGN:宽带电力线通信网络设计
- [Unity热更新]tolua# & LuaFramework(六):网络通信
- 安卓网络通信框架Volley学习(一) Volley简介和初步使用
- C#、Unity网络通信中基于字节码的自定义协议解码,C#版ByteBuffer