Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

小編給大家分享一下Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

網(wǎng)站建設(shè)公司,為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計及定制網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站制作,高端網(wǎng)頁制作,對成都葡萄架等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)經(jīng)驗的網(wǎng)站建設(shè)公司。專業(yè)網(wǎng)站設(shè)計,網(wǎng)站優(yōu)化推廣哪家好,專業(yè)營銷推廣優(yōu)化,H5建站,響應(yīng)式網(wǎng)站。

整理代碼腳本

Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

我們在Scripts下建了一個Model的文件夾(存放對象類)和一個Utils的文件夾(存放工具類),然后把WeatherForecase類移動到Model下,在Utils文件夾下再創(chuàng)建一個Network的文件夾,用于處理網(wǎng)絡(luò)通訊,然后在這文件夾下創(chuàng)建一個HttpRestful的C#腳本。  

02

HttpRestful封裝


Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

定義一個靜態(tài)實例,然后寫對應(yīng)的實例方法獲取方法。  

Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

寫Get的協(xié)程方法調(diào)用,其中最后一個參數(shù)就是Action<bool, string>的方法,其中Action的第一個參數(shù)bool,用于返回通訊的成功或失敗,第二個參數(shù)string是返回的通訊信息。  

Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

外部調(diào)用的Get方法傳入的參數(shù)一樣,內(nèi)部是直接開戶協(xié)程操作,下面的Post的實現(xiàn)也是按這個思路來寫,只不過傳入的參數(shù)里要加入一個我們傳入的數(shù)據(jù)即可。  

HttpRestful完整代碼

using System;using System.Collections;using System.Collections.Generic;using System.Text;using UnityEngine;using UnityEngine.Networking;
public class HttpRestful : MonoBehaviour{    private static HttpRestful _instance;
   public static HttpRestful Instance    {        get        {            if(_instance == null)            {                GameObject goRestful = new GameObject("HttpRestful");                _instance = goRestful.AddComponent<HttpRestful>();            }            return _instance;        }    }
   #region Get請求    /// <summary>    /// Get請求    /// </summary>    /// <param name="url"></param>    /// <param name="actionResult"></param>    public void Get(string url, Action<bool, string> actionResult = null)    {        StartCoroutine(_Get(url, actionResult));    }
   private IEnumerator _Get(string url, Action<bool, string> action)    {        using (UnityWebRequest request = UnityWebRequest.Get(url))        {            yield return request.SendWebRequest();
           string resstr = "";            if (request.isNetworkError || request.isHttpError)            {                resstr = request.error;            }            else            {                resstr = request.downloadHandler.text;            }
           if (action != null)            {                action(request.isHttpError, resstr);            }        }    }    #endregion

   #region POST請求    public void Post(string url, string data, Action<bool, string> actionResult = null)    {        StartCoroutine(_Post(url, data, actionResult));    }
   private IEnumerator _Post(string url, string data, Action<bool, string> action)    {        using (UnityWebRequest request = new UnityWebRequest(url, "POST"))        {            request.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(data));            request.SetRequestHeader("content-type", "application/json;charset=utf-8");            request.downloadHandler = new DownloadHandlerBuffer();
           yield return request.SendWebRequest();
           string resstr = "";            if (request.isNetworkError || request.isHttpError)            {                resstr = request.error;            }            else            {                resstr = request.downloadHandler.text;            }
           if (action != null)            {                action(request.isHttpError, resstr);            }        }    }    #endregion}


03

調(diào)用HttpRestful


Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

我們重新復(fù)制了一個UIScripts,然后其中一個名字后面加上了Old,這樣就是不用再重新設(shè)置了,我們直接在UIScripts腳本中改造即可。  

Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

首先定義一個Action<bool, string>,其中參數(shù)和HttpRestful里傳入的Action方法是一樣的。  

Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

然后增加一個InitAction的方法,里面對定義的actionRes寫其的實現(xiàn)方法。方法中就是判斷通訊如果失敗直接顯示文本,成功后進行處理,再顯示處理后的數(shù)據(jù),因為Get和Post調(diào)用后返回的數(shù)據(jù)類型是一樣的,這樣我們這里寫了一個Action都可以調(diào)用這個方法進行后面的數(shù)據(jù)處理。  

Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

然后我們在Start里面首先把初始化Action進行調(diào)用,然后使用  
HttpRestful.Instance.Get(url, actionRes);HttpRestful.Instance.Post(url, json, actionRes);
就可以直接進行數(shù)據(jù)處理了,剩下的我們昨天調(diào)用的方法就可以都刪除了。  

UIScipts完整代碼

using System;using System.Collections;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using UnityEngine;using UnityEngine.Networking;using UnityEngine.UI;
public class UIScripts : MonoBehaviour{    [Header("按鈕")]    public Button btnget;    public Button btngetparm;    public Button btnjson;    public Button btnpost;
   [Space]    [Header("顯示")]    public Text txtshow;
   [Space]    [Header("輸入框")]    public InputField edturl;    public InputField edtparm;
   //定義一個返回數(shù)據(jù)的Action    private Action<bool, string> actionRes;    // Start is called before the first frame update    void Start()    {        InitAction();
       //Get按鈕操作        btnget.onClick.AddListener(() =>        {            Debug.Log(edturl.text);            string url = edturl.text;            HttpRestful.Instance.Get(url, actionRes);        });        btngetparm.onClick.AddListener(() =>        {            string url = edturl.text;            string param = edtparm.text;
           string allurl = url + "/Info?Summary=" + param;            HttpRestful.Instance.Get(allurl, actionRes);        });
       btnjson.onClick.AddListener(() => StartCoroutine(JsonConvert()));
       btnpost.onClick.AddListener(() =>        {            WeatherForecast item = new WeatherForecast();            item.Summary = "Alvin";            item.Date = DateTime.Now;            item.TemperatureC = 10;            item.TemperatureF = 20;            string json = JsonUtility.ToJson(item);
           string url = edturl.text + "/Reg";            Debug.Log(url);            HttpRestful.Instance.Post(url, json, actionRes);        });    }
   /// <summary>    /// 寫返回Action的處理方法    /// </summary>    private void InitAction()    {        actionRes = new Action<bool, string>((bl, str) =>        {            if (bl)            {                txtshow.text = str;            }            else            {                string resjson = "{\"array\":" + str + "}";                txtshow.text = resjson;                WeatherData lists = JsonUtility.FromJson<WeatherData>(resjson);                StringBuilder sb = new StringBuilder();                foreach (WeatherForecast item in lists.array)                {                    sb.Append("Date:" + item.Date + " Summary:" + item.Summary + " TemperatureF:"                        + item.TemperatureF + "TemperatureC:" + item.TemperatureC + "\r\n");                }                txtshow.text = sb.ToString();            }        });    }
   IEnumerator JsonConvert()    {        WeatherForecast item = new WeatherForecast();        item.Summary = "Alvin";        item.Date = DateTime.Now;        item.TemperatureC = 10;        item.TemperatureF = 20;
       string json = JsonUtility.ToJson(item);        txtshow.text = json;        yield return new WaitForSeconds(3f);
       WeatherForecast newitem = JsonUtility.FromJson<WeatherForecast>(json);        string showtext = "Summary:" + newitem.Summary + "  Date:" + newitem.Date +            "  C:" + newitem.TemperatureC + "  F:" + newitem.TemperatureF;        txtshow.text = showtext;    }}

實現(xiàn)效果

Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝

上圖就是封裝后調(diào)用WebApi的實現(xiàn)效果,后面我又在Android平臺下進行了編譯,調(diào)用也完全沒有問題,這種方式可以跨平臺使用的。    

看完了這篇文章,相信你對“Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

網(wǎng)頁題目:Unity3D網(wǎng)絡(luò)通訊中HttpRestful請求如何封裝
當(dāng)前鏈接:http://muchs.cn/article46/jcpseg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、面包屑導(dǎo)航全網(wǎng)營銷推廣、搜索引擎優(yōu)化做網(wǎng)站、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)