Warensoft Unity3D 通信库项目简介
项目下载地址:http://wucl.codeplex.com
该类库是专门为Unity3D编写的一个高性能通信库,其中包括了若干十分易于使用的Http通信类以及Socket通信类.另外最特别之处在于,它引入了一个全新的,基于Http协议的数据库访问组件,可以轻松访问MS SQL SERVER2005+.
Warensoft Unity3D通信库特点:
1.符合微软命名规范
作为一个C#开发人员,您会发现Unity3d中的命名规范与其他的C#例程中的命名规范大不相同,如字段公有化等.但是在该类库中,所有能够看到的内容(包括字段,属性,方法,事件)全部符合微软命名规范.
2.基于HTTP协议的通信
在Unity3D中,开发人员只能使用WWW类来处理Http的请求和响应,原有的在DotNet Framework中的WebRequest类和WebClient类,在Unity3D中是无法使用的.对于初学者来讲,WWW类的使用方法有点奇怪(当然,在3D引擎中,你必须这样做), 事实上,WWW类的使用方式与微软的编程风格完全不同. 当然,最令人头疼的是当你释放WWW类所占用的内存资源时,会出现较为明显的内存泄漏, 另外,过多使用WWW类会产生多线程并发问题,当开发人员同时建立多个WWW类的实例来并发访问多个Web资源时,经常会出现Too Many Threads(线程太多)的异常,然后整个系统就崩溃了.
Warensoft Unity3D通信库为您引入了一个全新代替方案:UnityHttpClient类.使用UnityHttpClient类发送Http请求以及获取响应将变的极为简单,另外,该类在自动在后台控制并发的线程数量.请对比以下两段代码,第一段是使用WWW类实现的,第二段代码是使用HttpClient类来实现的.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///With WWW Class
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public class WWWTest:MonoBehaviour
{
WWW www;
void Start()
{}
private int initStep=0;
void Update()
{
switch (this.initStep) {
case 0:
this.www=new WWW ("http://www.abc.com/default.aspx");
this.initStep=1;
break;
case 1:
if (this.WWW.isDone)//waite until the http response is finished
{
print(this.www.text);
}
break;
default:
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//With HttpClient class
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
public class HttpClientTest:MonoBehaviour
{
HttpClient client;
void Start(){}
private int initStep=0;
void Update()
{
if(this.initStep==0)
{
//create an instance
this.client=UnityCommunicationManager.CreateInstance().GetHttpClient();
this.client.BeginGetHttpContent("http://www.abc.com/default.aspx",new Action<string>((result)=>
{
print(result);
}));
this.initStep=1;
}
}
}
正像你看到的一个,使用HttpClient类是如此的简单!
3.基于TCP协议的通信
使用Http方式进行远程通信,固然可以解决绝大多数问题,但是有些时候你可能需要更快的通信,并且需要服务器可以将实时数据直接推送到客户端(不需要客户端定时查询).例如,在同一个场景中可能有很多人物在走动,这些人物不是NPC,而且它们都是由计算机前面的人来控制的.因此,你需要一个更快速的方法去同步这些人模的坐标信息.
最有效的解决方法就是基于TCP协议之上制定一系列的自定义协议.但不幸的是,关于Unity3D内置的network view 组件,官方并没有提供太多的,易于阅读和理解的文档.或者,你可以使用.NET Framework中的Socket类取而代之.Socket类可以说是一个万能的通信类,没有它搞不定的,但同时Socket类也是最低层的一个类,并且十分难以控制.
Warensoft Unity 通信库引入了一个用于替代的SocketClient类,一个使用简单,控制极为容易的类.
4.通过Warensoft数据访问服务访问MS SQL SERVER2005+数据库
出于安全角度考虑,在Unity3D的WebPlayer中,是不可以访问MS SQL SERVER的(ADO.NET不可用).像Silverlight和Flash一样,通常情况下富客户端应用一般都是不能访问数据库的(这是一点是默认的安全策略).在WebPlayer的环境下,最佳的实践方式就是使用代理模式(Proxy Pattern),或者干脆就在Web服务器上提供一个简单的Web服务接口(可以基于HTTP方式的服务,也可以是一个SOAP的Web服务等).
为此,我们为您提供了一个名为Warensoft数据服务的代理数据访问技术,并且在Warensoft Unity 通信库中提供了一组客户端代理类,仅仅需要几步,您就可以轻松的实现SQL SERVER数据库访问