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數據庫訪問