• 用Unity同时开发【微信小游戏】【安卓】【IOS】游戏#6.1 Http通信


    【系列文章目录】



    前言

    本篇来实现Http通信

    Http比较简单直接使用UnityWebRequest进行封装即可


    一、创建HttpReq类

    虽然Unity有UnityWebRequest且非常的完整

    但是在使用上比较麻烦

    所以我们会对它进行封装,这里我创建了一个HttpReq类,继承了Mono单例

    public class HttpReq : MonoSingleton<HttpReq>
    {
    }
    
    • 1
    • 2
    • 3

    Http请求有很多类型:

    • get
    • post
    • put
    • options
    • head
    • delete
    • trace
    • connect

    而我们最常用的就是getpost,现在我们就来实现它

    //Get请求
    IEnumerator GetReq(string url, Action<string> callback)
    {
        UnityWebRequest webRequest = UnityWebRequest.Get(url);
    
        yield return webRequest.SendWebRequest();
    
        if (webRequest.result == UnityWebRequest.Result.ProtocolError ||
                webRequest.result == UnityWebRequest.Result.ConnectionError)
            Debug.Log(webRequest.error);
        else
        {
            callback?.Invoke(webRequest.downloadHandler.text);
        }
    }
    
    //Post请求
    IEnumerator PostReq(string url, string data, Action<string> callback)
    {
        UnityWebRequest webRequest = UnityWebRequest.Post(url, data);
    
        yield return webRequest.SendWebRequest();
        if (webRequest.result == UnityWebRequest.Result.ProtocolError ||
                  webRequest.result == UnityWebRequest.Result.ConnectionError)
            Debug.Log(webRequest.error);
        else
        {
            callback?.Invoke(webRequest.downloadHandler.text);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    这里我们定义了两个携程来发送Http请求,但是并没有开启,接下来是开启请求

    public void Get(string url, Action<string> callback)
    {
        StartCoroutine(GetReq(url, callback));
    }
    
    public void Post(string url, string data, Action<string> callback)
    {
        StartCoroutine(PostReq(url, data, callback));
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    这样我们就可以通过

    HttpReq.Instance.Get(url, callback);
    HttpReq.Instance.Post(url, data, callback);
    
    • 1
    • 2

    来请求Http了,将他们添加到API类中

    public static void HttpReqGet(string url, Action<string> callback)
    {
        HttpReq.Instance.Get(url, callback);
    }
    
    public static void HttpReqPost(string url, string data, Action<string> callback)
    {
        HttpReq.Instance.Post(url, data, callback);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    并生成胶水代码后,我们就可以在TS直接调用他们了

    API.HttpReqGet(url, callback);
    //callback使用this.GetResp.bind(this)防止丢失this对象
    
    API.HttpReqPost(url, data, this.PostResp.bind(this));
    //callback使用this.PostResp.bind(this)防止丢失this对象
    
    • 1
    • 2
    • 3
    • 4
    • 5

  • 相关阅读:
    rknn-toolkit 国内源链接
    猿创征文|数据导入与预处理-第2章-numpy
    C#复杂XML反序列化为实体对象两种方式
    AndroidStudio案例——跑马灯
    简单介绍一下RAM、ROM 通用安全机制
    自然语言处理(NLP)学习之与HanLP的初相识
    环境变量
    中低压MOSFET 2N7002T 60V 300mA 双N通道 SOT-523封装
    有名管道-
    网络安全(黑客)自学
  • 原文地址:https://blog.csdn.net/ruanlinxi1994/article/details/125508060