Unity组件开发--短连接HTTP

这篇具有很好参考价值的文章主要介绍了Unity组件开发--短连接HTTP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.网络请求管理器

using LitJson;
using Cysharp.Threading.Tasks;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Events;

using System.Web;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using UnityEngine.Purchasing.MiniJSON;

public class HttpHelper : MonoBehaviour {
    public static HttpHelper Instance;

    [DllImport("__Internal")] public static extern string GetUrlParam(string str);
    private void Awake() {
        Instance = this;

    }


    enum HttpEnum {
        POST,
        GET,
        DEL
    }

UnityWebRequest requestHttp(string url, HttpEnum httpEnum, WWWForm form = null) {

    if (httpEnum == HttpEnum.GET) {
        Debug.Log($"url Get:{url}");
        return UnityWebRequest.Get(url);
    }
    else if (httpEnum == HttpEnum.POST) {
        Debug.Log($"url POST:{url}");
        return UnityWebRequest.Post(url, form);
    }
    else if (httpEnum == HttpEnum.DEL) {
        Debug.Log($"url Delete:{url}");
        return UnityWebRequest.Delete(url);
    }
    return null;
}

}

2.需要引入json数据解析的插件:LitJson

Unity组件开发--短连接HTTP,unity组件开发,unity,游戏引擎,游戏程序

3.POST请求:HttpHelper中添加

public void GetUserInfo(string userId, UnityAction<string, bool> webHttpBack) {
    StartCoroutine(ccGetUserInfo(userId, webHttpBack));
}


IEnumerator ccGetUserInfo(string userId, UnityAction<string, bool> getInfoBack) {
    var url = Host.ApiHost + "/user/getUsrInfo";
    WWWForm form = new WWWForm();


    form.AddField("id", userId);
    using (UnityWebRequest www = requestHttp(url, HttpEnum.POST, form)) {
        DownloadHandler downloadHandler = new DownloadHandlerBuffer();
        www.downloadHandler = downloadHandler;



        yield return www.SendWebRequest();

        if (www.result != UnityWebRequest.Result.Success) {
            Debug.LogError(www.error);
        }
        else {
            Debug.Log($"Form upload complete GetCurSpaceInfo! {www.downloadHandler.text}");
            JsonData data = JsonMapper.ToObject(www.downloadHandler.text);
            if (data["data"] != null) {
                string json = data["data"].ToJson();
                if (getInfoBack != null) getInfoBack(json, false);
            }
            else {
                if (getInfoBack != null) getInfoBack(null, true);
            }

        }
    }
}

引用路径:

if (HttpHelper.Instance != null) {
    HttpHelper.Instance.GetUserInfo(PlayerData.Instance.PlayerId.ToString(), getUserInfo);
}


public void getUserInfo(string json, bool isNoData)
{
    json = UtilsFunc.UnicodeToString(json);
    JsonData data = JsonMapper.ToObject(json);
    string headUrl = "";

    

    if (data.ContainsKey("headImgUrl") && data["headImgUrl"] != null)
    {
        headUrl = (string)data["headImgUrl"];
        Debug.Log("头像信息2222222222" + headUrl);
        StartCoroutine(loadHeadImgUrl(headUrl));
    }
}

4.GET请求:HttpHelper中添加

public IEnumerator coGetMessBoardList(Action callback, long startDate, long endDate, int page = 1, int limit = 20) {



    //var url = NetManager.Instance.host + ":":"+port+"/game/space/getSpace";
    string url = Host.ApiHost + "/message/board/list" + $"?page={page}&limit={limit}&startDate={startDate}&endDate={endDate}&spaceId={PlayerData.Instance.SpaceId}";
    using (UnityWebRequest www = requestHttp(url, HttpEnum.GET)) {
        www.SetRequestHeader("Authorization", PlayerData.Instance.ltk);
        yield return www.SendWebRequest();

        if (www.result == UnityWebRequest.Result.Success) {
            string text = www.downloadHandler.text;
            JsonData data = JsonMapper.ToObject(www.downloadHandler.text);
            string json = data["data"].ToJson();
            var listObj = JsonMapper.ToObject<BoardVo>(json);
            MessageBoardModel.Instance.m_BoardModel.Remove(1); //临时删除1
            MessageBoardModel.Instance.m_BoardModel.Add(1, listObj);
            Debug.Log("获取留言列表信息" + text);
        }
        else {
            Debug.LogError(www.error);
        }
    }
    callback.Invoke();
}


    public void GetMessBoardList(Action callback, long startDate, long endDate, int page = 1, int limit = 20) {
        StartCoroutine(coGetMessBoardList(callback, startDate, endDate, page, limit));
    }

引用路径:

HttpHelper.Instance.GetMessBoardList(() =>
{
    MessageBoardModel.Instance.m_BoardModel.TryGetValue(1, out currentBoard); //这里1是临时的,因为现在留言板就一块
    if (currentBoard == null)
    {
        Debug.LogError("OnEnter currentBoard == null");
        return;
    }
    OnRefresh();
}, current, oneMonthLater);

4.DEL请求:HttpHelper中添加

IEnumerator coGetShopUrl(string genUrl, Action<string> callback) {

    //获取商店链接
    Debug.Log($"{genUrl}");
    string url = $"https://api.qrserver.com/v1/create-qr-code/?size=150x150{genUrl}";
    using (UnityWebRequest www = requestHttp(url, HttpEnum.DEL)) {
        www.downloadHandler = new DownloadHandlerBuffer();
        www.SetRequestHeader("Authorization", PlayerData.Instance.ltk);


        yield return www.SendWebRequest();


        if (www.result == UnityWebRequest.Result.Success) {


            Debug.Log("商店链接:" + www.downloadHandler.text);

            string s = www.downloadHandler.text.Substring(www.downloadHandler.text.IndexOf("<img src=") + 12, www.downloadHandler.text.Length - (www.downloadHandler.text.IndexOf("<img src=") + 12));
            //截取src="" 内部的链接地址,不包括'//'
            string result = s.Substring(0, s.IndexOf("\""));

            callback.Invoke("https://" + result);
        }
        else {
            Debug.LogError(www.error);
            callback.Invoke(www.error);
        }
    }


}

    public void GetShopUrl(string url, Action<string> callback) {
        StartCoroutine(coGetShopUrl(url, callback));
    }

        public void DeleteMessage(Action callback, int id) {
        StartCoroutine(coDeleteMessage(callback, id));
    }


public IEnumerator coDeleteMessage(Action callback, int id) {



    string url = Host.ApiHost + "/message/board?id=" + id.ToString();
    using (UnityWebRequest www = requestHttp(url, HttpEnum.DEL)) {
        www.downloadHandler = new DownloadHandlerBuffer();
        www.SetRequestHeader("Authorization", PlayerData.Instance.ltk);


        yield return www.SendWebRequest();


        if (www.result == UnityWebRequest.Result.Success) {


            Debug.Log("删除留言信息" + www.downloadHandler.text);
        }
        else {
            Debug.LogError(www.error);
        }
    }

    callback.Invoke();

}

引用路径:文章来源地址https://www.toymoban.com/news/detail-782017.html

        HttpHelper.Instance.DeleteMessage(() =>
        {
            ToastPanel.Show("留言删除成功");
            currentBoard.records.Remove(delData);
            OnRefresh();
        }, delData.id);

到了这里,关于Unity组件开发--短连接HTTP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity组件开发--长连接webSocket

    1.下载安装UnityWebSocket 插件 https://gitee.com/cambright/UnityWebSocket/ 引入unity项目: 2.定义消息体结构:ExternalMessage和包结构Package: 3.定义包协议结构:PackageProtocol 4.引入UniTask插件:UniTask中文使用指南(一) - 知乎 UniTask保姆级教程_unitask安装-CSDN博客 项目地址:GitHub - Cysharp/UniTask:

    2024年02月02日
    浏览(36)
  • 吐槽laya:H5小游戏开发应该用什么引擎好?laya、cocos还是unity?

    我看有人推荐laya,放在H5小游戏的前三排名,这压根不靠谱。 laya只能算个半成品,整体非常垃圾,如果是首次选择游戏引擎,至少转去cocos,实在选laya,那也没办法了。 下面说说laya有什么问题,如果只是一些简单的bug什么的,我是不会花这个时间吐槽的,但是如下的问题实

    2024年02月13日
    浏览(48)
  • 游戏开发常用引擎工具介绍对比区别(UE4,Unity,Cocos,LayaAir,[egret-白鹭])

    是一套为开发实时技术而存在的引擎工具。目前广泛应用于3D建模渲染、游戏开发中。它完善的工具套件以及简易的工作流程能够使开发者快速修改或查看成果,对于代码的依赖性很低。而完整公开的源代码则能让使用者自由修改和扩展引擎功能。 是面向开发人员的 3D/2D 游戏

    2024年02月13日
    浏览(46)
  • 【Unity游戏开发基础】如何做可以调整音量的UI滚动条组件

    游戏的设置列表中,调整游戏声音大小的选项是必备的,如何实现拖动滚动条后音量相应改变大小呢?这里介绍一下相关的脚本和步骤 首先,新建一个调整音量的脚本,名叫SetVolume,把预置的Update方法和Start方法删除。 然后,这个脚本需要挂载在滚动元素的Slider组件下。这个

    2024年02月03日
    浏览(41)
  • C语言与游戏引擎插件开发:Unity、Unreal Engine中C插件的编写与集成(一)

    目录 一、引言 C语言在游戏开发中的重要地位与优势 游戏引擎插件机制与C语言的价值 二、C语言基础与游戏开发特性 C语言核心特性及其在游戏开发中的应用 游戏引擎API对接关键概念与技巧 C语言在游戏开发领域占据着无可替代的重要地位,尤其在应对高性能计算需求与底层

    2024年04月29日
    浏览(54)
  • C语言与游戏引擎插件开发:Unity、Unreal Engine中C插件的编写与集成(四)

    目录 一、C插件开发最佳实践与常见问题解析 性能优化: 跨平台兼容性: 版本管理与升级: 二、结论 C语言在游戏引擎插件开发中的关键作用与优势: 对开发者提出建议: 性能优化: 内存管理: 智能指针 :利用UE的 TSharedPtr 、 TWeakPtr 等智能指针管理动态内存,确保资源释

    2024年04月27日
    浏览(38)
  • 十八、Unity游戏引擎入门

    1、下载     首先需要下载Unity Hub,下载网址:https://unity.com/cn。     然后在其中下载Unity编辑器并安装,可选择最新版本。     接着需要选择适合的开发环境,例如Android Studio或Xcode,以便进行手机游戏开发。在安装完Unity后,需要根据项目需求下载对应的模块和插件,例

    2024年02月16日
    浏览(51)
  • Unity vs Godot :哪个游戏引擎更适合你?

    游戏引擎的选择对开发过程和最终产品质量有着重大影响。近年来,Godot和Unity这两款引擎受到广泛关注。本文将从多个维度对两者进行比较,以期为开发者提供正确的选择建议。 Godot和Unity都有各自的优势,没有绝对的好坏之分。Godot开源免费,上手简单,更适合2D和小型游戏

    2024年01月23日
    浏览(74)
  • Unity Physics2D 2d物理引擎游戏 笔记

    2d 材质 里面可以设置 摩擦力 和 弹力 Simulated:是否在当前的物理环境中模拟,取消勾选该框类似于Disable Rigidbody,但使用这个参数更加高效,因为Disable会销毁内部产生的GameObject,而取消勾选Simulated只是禁用。 Kinematic 动力学刚体 动力学刚体不受重力和力的影响,而受用户的

    2023年04月24日
    浏览(102)
  • Unity和UE4两大游戏引擎,你该如何选择?

    目录 游戏引擎 2 —— 难易区别 编程语言 3 —— 游戏产品 UE4制作的游戏产品  Unity制作的游戏产品  产品类型 5 —— 资源商店 6 —— 人才需求 平均薪资 总结      Unity和UE4都是游戏引擎,所谓游戏引擎就是集成了复杂功能的游戏开发软件,他们帮我们实现了复杂的底层逻

    2023年04月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包