Unity UnityWebRequest实现与后端的交互
一般我们与后端对接的时候会用到UnityWebRequest
这里简单使用这个与后端进行交互
这个是总类
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
using UnityEngine.Networking;
public enum EOPERATION
{
LOGIN = 0,//登录
REGISTER,//注册
COLLEGELIST, //学院
MAJORLIST, //专业
CLASSLIST,//班级
EXISTMAIL,//邮箱重复验证
EXISTNUMBER, //学号重复验证
GETPASSWORD,//忘记密码
ADDSCORE,//添加成绩
DownLoad,
}
public class CallBackUser
{
public bool success;
public string msg;
public User obj;
}
public class WebWork : MonoBehaviour
{
Dictionary> _handers = new Dictionary>();
private string filepath;
bool isStartDownload;
UnityWebRequest request;
//根据协议号获取地址后缀
Dictionary mURLs = new Dictionary{
{ EOPERATION.LOGIN,"webapi/login" },
{ EOPERATION.REGISTER,"webapi/register"},
{ EOPERATION.COLLEGELIST,"user/college/list_combo"},
{ EOPERATION.MAJORLIST,"user/major/list_combo"},
{ EOPERATION.CLASSLIST,"user/class/list_combo"},
{ EOPERATION.EXISTMAIL,"webapi/existemail"},
{ EOPERATION.EXISTNUMBER,"webapi/existnumber"},
{EOPERATION.GETPASSWORD, "webapi/forget_pass"},
{EOPERATION.ADDSCORE,"webapi/add_score"},
{EOPERATION.DownLoad,"" }
};
private string ipAddress = "http://192.168.40.153:8000/";
AccountHander accountHander = new AccountHander();
public object JsonConvert { get; private set; }
//在这里注册消息返回后分发处理
public void Init()
{
accountHander.RegisterMsg(_handers);
DontDestroyOnLoad(this);
}
///
/// 传输数据
///
///
///
public void SendPost(EOPERATION op, Dictionary dic)
{
//根据协议号获取完整路径
string url = ipAddress + mURLs[op];
StartCoroutine(Post(url, dic, op));
}
///
/// 获取数据
///
///
public void SendGet(EOPERATION op, string name = "")
{
string url = ipAddress + mURLs[op] + "/" + name;
StartCoroutine(Get(url, op, name));
}
///
/// 获取下载进度
///
///
public float GetProgress()
{
if (request == null || !isStartDownload)
return 0;
return request.downloadProgress;
}
private IEnumerator Get(string url, EOPERATION op, string name)
{
if (!string.IsNullOrEmpty(url))
{
using (request = UnityWebRequest.Get(url))
{
isStartDownload = true;
//设置超时 链接超时返回 且isNetworkError为true
request.timeout = 30;
yield return request.SendWebRequest();
isStartDownload = false;
//结果回传给具体实现
if (request.isHttpError || request.isNetworkError)
{
Debug.Log(request.error);
}
else
{
_handersop;
}
};
}
}
//private WWW http;
private IEnumerator Post(string url, Dictionary dic, EOPERATION op)
{
if (!string.IsNullOrEmpty(url))
{
WWWForm form = new WWWForm();
foreach (var item in dic)
{
form.AddField(item.Key, item.Value);
}
using (request = UnityWebRequest.Post(url, form))
{
yield return request.SendWebRequest();
//结果回传给具体实现
if (request.isHttpError || request.isNetworkError)
{
Debug.Log(request.error);
}
else
{
_handersop;
}
}
}
}
}
工具类
using System.IO;
public class FileTool
{
///
/// 创建文件
///
public static void CreateFile(string filePath,byte[]bytes)
{
using (FileStream fs = new FileStream(filePath,FileMode.Create,FileAccess.Write))
{
fs.Write(bytes, 0, bytes.Length);
}
}
}
消息返回处理类 这只是一个分类
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class AccountHander
{
public void RegisterMsg(Dictionary> handers)
{
handers.Add(EOPERATION.LOGIN, OnRspLogin);
handers.Add(EOPERATION.REGISTER, OnRspRegister);
handers.Add(EOPERATION.DownLoad, OnRspDownLoad);
}
private void OnRspLogin(string name,DownloadHandler data)
{
//用Json转化为类内部数据
JsonConvert.DeserializeObject(data.text);
}
private void OnRspRegister(string name,DownloadHandler data)
{
}
private void OnRspDownLoad(string name,DownloadHandler data)
{
//data.data二进制的文件 视频 图片的信息
FileTool.CreateFile(name, data.data);
}
}
public void RegisterMsg(Dictionary> handers)
{
}
如果想添加一个新的就在主类Init里注册 然后新类写一个注册方法就行了 这样会自动根据枚举转到相应的处理函数
然后name的话只是为了区分下载文件起码要改名吧 不然不知道名字 如果只是传数据可以无视name不调用
来用一个demo使用下
更多unity2018的功能介绍请到paws3d爪爪学院查找。
Unity UnityWebRequest实现与后端的交互的更多相关文章
- Unity NGUI 网络斗地主 -发牌 脚本交互
Unity NGUI 网络斗地主 -发牌 脚本交互 @By 灰太龙 Unity4.2.1f4 NGUI 3.0.4 本篇说的问题是脚本与控件的交互! 现在对界面进行了改进,先看副图! 1.制作发牌效果 ...
- Vue在MVC中的进行前后端的交互
Vue在MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下个人使用Vue的 ...
- 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)
一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...
- Vue在ASP.NET MVC中的进行前后端的交互
Vue在ASP.NET MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下 ...
- vue-resource的使用,前后端数据交互
vue-resource的使用,前后端数据交互 1:导入vue与vue-resource的js js下载: https://pan.baidu.com/s/1fs5QaNwcl2AMEyp_kUg ...
- [Unity][安卓]Unity和Android Studio 3.0 交互通讯(1)Android Studio 3.0 设置
[安卓]Android Studio 3.0 JDK安卓环境配置(2017.10) http://blog.csdn.net/bulademian/article/details/78387052 [ ...
- 前后端数据交互处理基于原生JS模板引擎开发
json数据错误处理,把json文件数据复制到----> https://www.bejson.com/ 在线解析json 这样能直观的了解到是否是json数据写错,在控制台打断点,那里错误打那 ...
- 前后端API交互数据加密——AES与RSA混合加密完整实例
前言 前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门:https://blog.csdn.net/ityouknow/article/details/80603617),文中讲到利用R ...
- 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用
随着多终端.多平台.多业务形态.多技术选型等各方面的发展,前后端的数据交互,日益复杂. 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费. 在理想情况下,这些复杂性可以全部由后端承担.前端只 ...
随机推荐
- CFD-Post批处理(在一系列算例同一位置截取速度云图)
批量在一系列算例的同一位置截取面,并显示截面的速度分布云图 现在我们有一系列的算例 我们打开CFD-Post 我们编写如下的Python代码来实现在一系列算例的同一位置截面,并显示界面的速度分布云图 ...
- 龙贝格积分(c++)
用龙贝格算法计算积分 #include <iostream> #include<cmath> #include <iomanip> using namespace ...
- MySQL 自动插入、更新时间戳
在 MySql 中,要做到自动出入当前时间戳,只要在定义表格时将字段的默认值设置为 CURRENT_TIMESTAMP 即可. 如: create table if not exists my_tab ...
- 【转】Android系统中Fastboot和Recovery所扮演的角色。
Android 刷机过程中 Fastboot 和 Recovery 的作用是什么? 自己在知乎的一篇回答,,现在翻出来放到博客,希望可以解答更多人的疑惑,抑或有什么理解上的错误,也望网友指出~ 今天恰 ...
- spring源码的设计模式
转:https://blog.csdn.net/huyang0304/article/details/82928900 接下来我们只介绍在Spring中常用的设计模式. 1.1.简单工厂模式(Fact ...
- 详解CI、CD相关概念
CI:持续集成(CONTINUOUS INTEGRATION)基本概念CI的全称是Continuous Integration,表示持续集成. 在CI环境中,开发人员将会频繁地向主干提交代码.这些新提 ...
- linux设置sudo不要密码
linux下,普通用户,sudo时需要密码 改成没密码, vi /etc/sudoers 在 root ALL=(ALL) ALL后加一行 sysusr ALL=(ALL) NOPASSWD: ALL ...
- Node.js 实现第一个应用以及HTTP模块和URL模块应用
/* 实现一个应用,同时还实现了整个 HTTP 服务器. * */ //1.引入http模块 var http=require('http'); //2.用http模块创建服务 /* req获取url ...
- jenkins报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 的处理
问题背景:jenkins服务器发布代码后需要执行删除缓存的操作ssh -p222 eus_pe_devadmin@1.1.1.1 "sudo rm -rf /dev/shm/nginx/hi ...
- -bash: iostat: command not found解决办法
[root@testhost ~]# iostat-bash: iostat: command not found IOSTAT 命令不可用,首先确认sysstat包是否安装,sysstat包中包括i ...