Unity與后臺(tái)服務(wù)器的數(shù)據(jù)交互

最近需要做網(wǎng)絡(luò)模塊相關(guān),主要是與后臺(tái)的數(shù)據(jù)交互驗(yàn)證貌矿,那么就需要找到unity網(wǎng)絡(luò)相關(guān)的api,通過查閱unity文檔發(fā)現(xiàn)主要通過UnityWebRequest與后臺(tái)交互
在android開發(fā)中請(qǐng)求方式使用的是POST/GET請(qǐng)求方式滔岳,在unity中也是一樣的:

  1. GET方式
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
 
public class MyBehaviour : MonoBehaviour {
    void Start() {
        StartCoroutine(GetText());
    }
 
    IEnumerator GetText() {
        UnityWebRequest www = UnityWebRequest.Get("http://www.my-server.com");
        yield return www.SendWebRequest();
 
        if(www.isNetworkError || www.isHttpError) {
            Debug.Log(www.error);
        }
        else {
            // Show results as text
            Debug.Log(www.downloadHandler.text);
 
            // Or retrieve results as binary data
            byte[] results = www.downloadHandler.data;
        }
    }
}
  1. POST方式
         List<IMultipartFormSection> iparams = new List<IMultipartFormSection> ();
        iparams.Add (new MultipartFormDataSection("account", userTxt.text));
        iparams.Add (new MultipartFormDataSection("password", psdTxt.text));
        iparams.Add (new MultipartFormDataSection("yzmcode", yzmTxt.text));
        Debug.Log ("account:" + userTxt.text + "  password:" + psdTxt.text + "   yzmcode:" + yzmTxt.text);
        iparams.Add (new MultipartFormDataSection("platform", "android"));
        UnityWebRequest loginRequest = UnityWebRequest.Post (UrlUtils.baseUrl + UrlUtils.loginUrl, iparams);
        yield return loginRequest.SendWebRequest ();
        if (loginRequest.isHttpError || loginRequest.isNetworkError) {
            
        } else {
            string loginResult = loginRequest.downloadHandler.text;
            result.text = loginResult;
            yield return new WaitForSeconds(2f);
            result.text = "";
        }

列表的IMultipartFormSection用來提交表單數(shù)據(jù)声邦,注意區(qū)分IMultipartFormSection和MultipartFormDataSection

  1. 請(qǐng)求的url是圖片的情況,請(qǐng)求的地址類似于http://test.xxxx.com/zh/upload/mobyzm/20180305/0.9308257626405821.JPEG時(shí)使用
            UnityWebRequest wr = new UnityWebRequest(detail.yzmPath);
            DownloadHandlerTexture texDl = new DownloadHandlerTexture(true);
            wr.downloadHandler = texDl;
            yield return wr.SendWebRequest ();
            if (wr.isNetworkError || wr.isHttpError) {
            } else {
                Texture2D t = texDl.texture;
                Sprite s = Sprite.Create(t, new Rect(0, 0, t.width, t.height),
                    Vector2.zero, 1f);
                yzmImage.sprite = s;
            }
  1. unity中的json解析
  • 通過使用,官方的JsonUtility.FromJson<數(shù)據(jù)結(jié)構(gòu)>() 方法用于解析簡(jiǎn)單結(jié)構(gòu)的jsonString無錯(cuò)誤谅畅,對(duì)于json中嵌套對(duì)象的解析會(huì)出錯(cuò)登渣,不知道是不是我數(shù)據(jù)結(jié)構(gòu)定義的問題...(相同的結(jié)構(gòu)使用插件LitJson解析結(jié)果正常),所以就放棄使用JsonUtility了
  • LitJson比較好用,插件下載后放入asset中毡泻,在使用的腳本中聲明using LitJson;后用dataModel model = JsonMapper.ToObject<dataModel> (jsonString);解析json胜茧,數(shù)據(jù)結(jié)構(gòu)的定義需要根據(jù)json結(jié)果中的鍵值對(duì)命名
  1. 自己做的demo工程,實(shí)現(xiàn)了簡(jiǎn)單的登錄與驗(yàn)證碼圖片的請(qǐng)求

鏈接:https://pan.baidu.com/s/1Axt8fEhRsDLjwhLmCywpew 密碼:nx4w

帶有cookie管理的HttpRequest請(qǐng)求

在一些后臺(tái)需要驗(yàn)證session信息的情況下(例如在登陸時(shí)候需要check驗(yàn)證碼操作仇味,所以正常流程是在登陸之前請(qǐng)求一次驗(yàn)證碼呻顽,同時(shí)后臺(tái)將寫有驗(yàn)證碼的相關(guān)session信息在response中返回,之后登錄請(qǐng)求中如果沒有攜帶session信息后臺(tái)無法驗(yàn)證驗(yàn)證碼)丹墨,使用UnityWebRequest請(qǐng)求沒有設(shè)置session后臺(tái)獲取不到這些信息芬位,并且也沒有找到資料參考怎么設(shè)置,(一個(gè)遇到相同問題的網(wǎng)友提問)
之后經(jīng)過查找带到,發(fā)現(xiàn)了BestHttp插件昧碉,(能取這個(gè)名字想來開發(fā)者挺自信的)英染,集成驗(yàn)證后發(fā)現(xiàn)已經(jīng)實(shí)現(xiàn)了對(duì)Cookie的本地緩存管理

簡(jiǎn)單&&常用用法:

第一步導(dǎo)入插件,在使用的腳本中加入 using BestHTTP;
第二步請(qǐng)求:
????1. get請(qǐng)求:

// onRequestFinished是回調(diào)方法
HTTPRequest www = new HTTPRequest(new System.Uri(UrlUtils.baseUrl + UrlUtils.getYzmPic), onRequestFinished);
        www.Send (); 

void onRequestFinished(HTTPRequest request, HTTPResponse response) {
            // 處理回調(diào)
           
            if (response != null && response.IsSuccess) {
                Debug.Log(response.DataAsText + response.Message);
            }
            else{
            }
}

????2. Post請(qǐng)求

HTTPRequest www = new HTTPRequest (new System.Uri(uri), HTTPMethods.Post, listenerMothed);
www.AddField ("key1", value1);
www.AddField ("key2", value2);
... ...
www.Send ();

????鏈?zhǔn)綄懛ǎ?/p>

HTTPRequest www = new HTTPRequest (new System.Uri (uri), HTTPMethods.Post, (request, response) => {
            

                });
www.Send ();

設(shè)置超時(shí)(發(fā)送請(qǐng)求到接受應(yīng)答的過程)時(shí)間被饿,(默認(rèn)60s):
www.Timeout = System.TimeSpan.FromSeconds(3f);
第三步 處理請(qǐng)求結(jié)果


NOTICE:在網(wǎng)絡(luò)連接不可用時(shí)四康,回調(diào)中的response == null,在請(qǐng)求時(shí)判斷當(dāng)前網(wǎng)絡(luò)是否可用 或者判斷reponse是否為空

if (Application.internetReachability != NetworkReachability.NotReachable)  {
      httpRequest ww = new ...
}

// 或者
onResponse(HTTPRequest request, HTTPResponse response) {
// 判斷response == null 的情況
if (response != null && response.IsSuccess)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狭握,一起剝皮案震驚了整個(gè)濱河市闪金,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌论颅,老刑警劉巖哎垦,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恃疯,居然都是意外死亡漏设,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門今妄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來郑口,“玉大人,你說我怎么就攤上這事盾鳞∪裕” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵腾仅,是天一觀的道長(zhǎng)乒裆。 經(jīng)常有香客問我,道長(zhǎng)推励,這世上最難降的妖魔是什么缸兔? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮吹艇,結(jié)果婚禮上惰蜜,老公的妹妹穿的比我還像新娘。我一直安慰自己受神,他們只是感情好抛猖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鼻听,像睡著了一般财著。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撑碴,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天撑教,我揣著相機(jī)與錄音,去河邊找鬼醉拓。 笑死伟姐,一個(gè)胖子當(dāng)著我的面吹牛收苏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愤兵,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鹿霸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了秆乳?” 一聲冷哼從身側(cè)響起懦鼠,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屹堰,沒想到半個(gè)月后肛冶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扯键,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年睦袖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忧陪。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖近范,靈堂內(nèi)的尸體忽然破棺而出嘶摊,到底是詐尸還是另有隱情,我是刑警寧澤评矩,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布叶堆,位于F島的核電站,受9級(jí)特大地震影響斥杜,放射性物質(zhì)發(fā)生泄漏虱颗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一蔗喂、第九天 我趴在偏房一處隱蔽的房頂上張望忘渔。 院中可真熱鬧,春花似錦缰儿、人聲如沸畦粮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宣赔。三九已至,卻和暖如春瞪浸,著一層夾襖步出監(jiān)牢的瞬間儒将,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工对蒲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钩蚊,地道東北人贡翘。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像两疚,于是被迫代替她去往敵國(guó)和親床估。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理诱渤,服務(wù)發(fā)現(xiàn)丐巫,斷路器,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 大家好勺美!我是熊二 今天是行動(dòng)營(yíng)打卡的第一天递胧,之所以選擇《送給加西亞的信》這本書,是因?yàn)橹魅斯瓿闪艘粋€(gè)大家認(rèn)為不可...
    撿到蜜罐的熊閱讀 629評(píng)論 0 1
  • 姓名:邵逸軒 公司:寧波禾隆新材料股份有限公司 六項(xiàng)精進(jìn)第340期努力一組學(xué)員 【日精進(jìn)打卡第14天】 【知~學(xué)習(xí)...
    邵逸軒閱讀 171評(píng)論 0 0
  • 由于老師愛崗敬業(yè)赡茸,熱愛學(xué)生缎脾,與學(xué)生打成一片。學(xué)生不畏嚴(yán)寒占卧,刻苦好學(xué)遗菠,不恥下問。老師的教與學(xué)生的學(xué)密切配合华蜒,取得了優(yōu)...
    平安是福_8157閱讀 304評(píng)論 0 0