一般我们与后端对接的时候会用到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实现与后端的交互的更多相关文章

  1. Unity NGUI 网络斗地主 -发牌 脚本交互

    Unity NGUI 网络斗地主 -发牌 脚本交互 @By 灰太龙 Unity4.2.1f4 NGUI 3.0.4 本篇说的问题是脚本与控件的交互! 现在对界面进行了改进,先看副图! 1.制作发牌效果 ...

  2. Vue在MVC中的进行前后端的交互

    Vue在MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下个人使用Vue的 ...

  3. 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)

    一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...

  4. Vue在ASP.NET MVC中的进行前后端的交互

    Vue在ASP.NET MVC中的进行前后端的交互 Preface: 由于最近在研究前端相关的技术,作为前端非常优秀的框架Vue,个人在学习的过程中遇到一些问题,网上相关资料有限,所以在这这里总结一下 ...

  5. vue-resource的使用,前后端数据交互

    vue-resource的使用,前后端数据交互 1:导入vue与vue-resource的js js下载:   https://pan.baidu.com/s/1fs5QaNwcl2AMEyp_kUg ...

  6. [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 [ ...

  7. 前后端数据交互处理基于原生JS模板引擎开发

    json数据错误处理,把json文件数据复制到----> https://www.bejson.com/ 在线解析json 这样能直观的了解到是否是json数据写错,在控制台打断点,那里错误打那 ...

  8. 前后端API交互数据加密——AES与RSA混合加密完整实例

    前言 前段时间看到一篇文章讲如何保证API调用时数据的安全性(传送门:https://blog.csdn.net/ityouknow/article/details/80603617),文中讲到利用R ...

  9. 对GraphQL-BFF:微服务背景下的前后端数据交互方案的研究-------引用

    随着多终端.多平台.多业务形态.多技术选型等各方面的发展,前后端的数据交互,日益复杂. 同一份数据,可能以多种不同的形态和结构,在多种场景下被消费. 在理想情况下,这些复杂性可以全部由后端承担.前端只 ...

随机推荐

  1. HDU-5215 Cycle(边双/判奇偶环)

    题目 HDU-5215 Cycle 网上那个啥dfs的垃圾做法随便弄组数据已经hack掉了 做法 纯奇环偶环通过dfs树上,染色判断(由于偶环可能有两个奇环,通过一点相交,dfs树上并不能判完) 两环 ...

  2. Freemarker的简单demo

    第一步.导入依赖 <dependency> <groupId>org.freemarker</groupId> <artifactId>freemark ...

  3. element ui 合计/table show-summary

    在el-table 上面加上show-summary就可以对table的数据进行合计 但是上次出现了合计栏有的为空,有的合计不对的情况,如果出现的是空,那么说明你渲染的数据有undefine(即后台返 ...

  4. Centos分区/超过2T的磁盘

    centos分区大于2TB 用parted分区工具分区 fdisk -l  查看要分的区(我这里是/dev/vdb) parted /dev/vdb    #进入/dev/vdb进行分区 mktabl ...

  5. QHUOJ - 1533: 计算组合数(大数计算)

    题目描述 给定两个正整数n,m,计算组合数C(n,m).组合数计算公式为:C(n,m)=n!/((n-m)!*m!) 已知n,m <= 50. 结果很大需要使用long long存储. 输入 输 ...

  6. javascript如何动态修改iframe的src

    为什么需要动态修改iframe的src?一般情况我们使用iframe,其中的src通常是写死的,但是有些时候我们不希望它是死的src,而是一个活的src. 示例代码如下: <!DOCTYPE h ...

  7. curl抓取页面时遇到重定向的解决方法

    用php的curl抓取网页遇到了问题,为阐述方便,将代码简化如下: <?php function curlGet($url) { $ch = curl_init(); curl_setopt($ ...

  8. javascript submit() is not a function

    <script> window.onload = function(){ document.getElementById('form').submit(); } </script&g ...

  9. Mac 上ssh远程连接Linux服务器提示Host key verification failed.

    当我们对重装远程服务器的时候会出现Host key verification failed问题 解决办法: rm -rf ~/.ssh/known_hosts 重新ssh连接,OK!

  10. Angularjs Select获取数组下标

    一.定义资源 //资源类型 $scope.status=['项目测试','开发工具','安装包','工作计划','测试项目','我的游戏','我的音乐','博客首页图片']; 二.没错直接用  {{$ ...