unity 微信开发小游戏,网络资源获取数据

1.创建数据结构

cs 复制代码
public class JsCode
{
    public string js_code;
}

public class OpenID
{
    public string openid;
}

2.网络请求

cs 复制代码
using System;
using System.Collections;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;

public class HttpManager : MonoBehaviour
{
    public static HttpManager instance;

    private void Awake()
    {
        if (instance == null)
        {
            instance = this;
        }
        else
        {
            Destroy(this);
        }
    }

    /// <summary>
    /// 请求数据
    /// </summary>
    /// <typeparam name="Treq">请求数据类型</typeparam>
    /// <typeparam name="Tres">接收数据类型<</typeparam>
    /// <param name="url">请求地址</param>
    /// <param name="req">请求数据</param>
    /// <param name="callback">回显</param>
    public void GetData<Treq, Tres>(string url, Treq req, Action<Tres> callback) where Treq : class where Tres : class
    {
        StartCoroutine(LoadData<Treq, Tres>(url, req, callback));
    }
    /// <summary>
    /// 请求数据
    /// </summary>
    /// <typeparam name="Treq">请求数据类型</typeparam>
    /// <typeparam name="Tres">接收数据类型</typeparam>
    /// <param name="url">请求地址</param>
    /// <param name="req">请求数据</param>
    /// <param name="callback">回显</param>
    /// <returns></returns>
    IEnumerator LoadData<Treq, Tres>(string url, Treq req, Action<Tres> callback) where Treq : class where Tres : class
    {
        string json = JsonUtility.ToJson(req);
        //创建一个UnityWebRequest对象,这里以POST方法为例
        using (UnityWebRequest request = new UnityWebRequest(url, "POST"))
        {
            //创建一个UploadHandlerRaw对象,并设置内容类型

            Debug.Log("请求地址:" + url);
            Debug.Log("请求json:" + json);
            request.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(json));
            //为请求分配 DownloadHandlerBuffer,用于存储下载数据
            request.downloadHandler = new DownloadHandlerBuffer();
            //设置请求头
            request.SetRequestHeader("content-type", "application/json;charset=utf-8");
            //签名验证采用Bearer Token认证方式
            //request.SetRequestHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN");
            //发送网络请求并等待完成
            yield return request.SendWebRequest();
            //网络有响应并且成功了
            if (request.isDone && request.result == UnityWebRequest.Result.Success)
            {
                Debug.Log("请求数据:" + request.downloadHandler.text);
                Tres res = JsonUtility.FromJson<Tres>(request.downloadHandler.text);
                callback?.Invoke(res);
            }
            else
            {
                Debug.Log("网络请求失败: " + request.error);
                callback?.Invoke(null);
            }

        }

    }


}

3.运用

cs 复制代码
//成功获取到用户Code
JsCode msg = new JsCode();
msg.js_code = e.code;

HttpManager.instance.GetData<JsCode, OpenID>(WXCodeUrl, msg, (res) => {
    Debug.Log("整体接收:" + res);
    Debug.Log("openid:" + res.openid);
    WXOpenID = res.openid;

});
相关推荐
17岁的勇气14 小时前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
寂寞的船2 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
Martina_03212 天前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图
寂寞的船4 天前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
寂寞的船4 天前
【Unity知识速递】第5期 Unity 6.2 深度解析:AI Assistant 登场,World Space UI 与 Sentis 全面升级
人工智能·ui·unity
寂寞的船4 天前
【Unity知识速递】第4期 MCP for Unity:用 AI 自然语言控制编辑器
人工智能·unity·编辑器
淡海水5 天前
09-04-内存-Unity原生对象生命周期
unity·c#·游戏引擎·gc
寂寞的船5 天前
【Unity知识速递】第6期 URP性能优化完全指南:从内存到GPU的三维调优
unity·性能优化·编辑器
寂寞的船5 天前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
tealcwu7 天前
【Unity基础】为什么游戏需要物理按键映射?从 Unity Input Manager 到跨引擎输入设计
java·游戏·unity