1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.Networking;
  6.  
  7. public class C_UnityWebRequest : MonoBehaviour
  8. {
  9. static C_UnityWebRequest instance;
  10. public static C_UnityWebRequest Instance
  11. {
  12. get
  13. {
  14. if (instance == null)
  15. {
  16. GameObject mounter = new GameObject("C_UnityWebRequest");
  17. instance = mounter.AddComponent<C_UnityWebRequest>();
  18. }
  19. return instance;
  20. }
  21. }
  22.  
  23. /// <summary>
  24. /// get请求
  25. /// </summary>
  26. /// <param name="url"></param>
  27. /// <param name="actionResult"></param>
  28. public void Get(string url, Action<UnityWebRequest> actionResult)
  29. {
  30. StartCoroutine(_Get(url, actionResult));
  31. }
  32.  
  33. /// <summary>
  34. /// 下载文件
  35. /// </summary>
  36. /// <param name="url"></param>
  37. /// <param name="downloadFilePathAndName"></param>
  38. /// <param name="actionResult"></param>
  39. public void DownloadFile(string url, string downloadFilePathAndName, Action<UnityWebRequest> actionResult)
  40. {
  41. StartCoroutine(_DownloadFile(url, downloadFilePathAndName, actionResult));
  42. }
  43.  
  44. /// <summary>
  45. /// 请求图片
  46. /// </summary>
  47. /// <param name="url"></param>
  48. /// <param name="actionResult"></param>
  49. public void GetTexture(string url, Action<Texture2D> actionResult)
  50. {
  51. StartCoroutine(_GetTexture(url, actionResult));
  52. }
  53.  
  54. /// <summary>
  55. /// 请求assetBuddle
  56. /// </summary>
  57. /// <param name="url"></param>
  58. /// <param name="actionResult"></param>
  59. public void GetAssetBundle(string url, Action<AssetBundle> actionResult)
  60. {
  61. StartCoroutine(_GetAssetBundle(url, actionResult));
  62. }
  63.  
  64. /// <summary>
  65. /// 下载音效
  66. /// </summary>
  67. /// <param name="url"></param>
  68. /// <param name="actionResult"></param>
  69. /// <param name="audioType"></param>
  70. public void GetAudioClip(string url, Action<AudioClip> actionResult, AudioType audioType = AudioType.WAV)
  71. {
  72. StartCoroutine(_GetAudioClip(url, actionResult, audioType));
  73. }
  74.  
  75. /// <summary>
  76. /// post form
  77. /// </summary>
  78. /// <param name="serverURL"></param>
  79. /// <param name="lstformData"></param>
  80. /// <param name="actionResult"></param>
  81. public void Post(string serverURL, List<IMultipartFormSection> lstformData, Action<UnityWebRequest> actionResult)
  82. {
  83. //List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
  84. //formData.Add(new MultipartFormDataSection("field1=foo&field2=bar"));
  85. //formData.Add(new MultipartFormFileSection("my file data", "myfile.txt"));
  86. StartCoroutine(_Post(serverURL, lstformData, actionResult));
  87. }
  88.  
  89. /// <summary>
  90. /// put方法
  91. /// </summary>
  92. /// <param name="url"></param>
  93. /// <param name="contentBytes"></param>
  94. /// <param name="actionResult"></param>
  95. public void UploadByPut(string url, byte[] contentBytes, Action<bool> actionResult)
  96. {
  97. StartCoroutine(_UploadByPut(url, contentBytes, actionResult, ""));
  98. }
  99.  
  100. /// <summary>
  101. /// get
  102. /// </summary>
  103. /// <param name="url"></param>
  104. /// <param name="actionResult"></param>
  105. /// <returns></returns>
  106. IEnumerator _Get(string url, Action<UnityWebRequest> actionResult)
  107. {
  108. using (UnityWebRequest uwr = UnityWebRequest.Get(url))
  109. {
  110. yield return uwr.SendWebRequest();
  111. if (actionResult != null)
  112. {
  113. actionResult(uwr);
  114. }
  115. }
  116. }
  117.  
  118. /// <summary>
  119. /// 下载文件
  120. /// </summary>
  121. /// <param name="url"></param>
  122. /// <param name="downloadFilePathAndName"></param>
  123. /// <param name="actionResult"></param>
  124. /// <returns></returns>
  125. IEnumerator _DownloadFile(string url, string downloadFilePathAndName, Action<UnityWebRequest> actionResult)
  126. {
  127. var uwr = new UnityWebRequest(url, UnityWebRequest.kHttpVerbGET);
  128. uwr.downloadHandler = new DownloadHandlerFile(downloadFilePathAndName);
  129. yield return uwr.SendWebRequest();
  130. if (actionResult != null)
  131. {
  132. actionResult(uwr);
  133. }
  134. }
  135.  
  136. /// <summary>
  137. /// 下载图片
  138. /// </summary>
  139. /// <param name="url"></param>
  140. /// <param name="actionResult"></param>
  141. /// <returns></returns>
  142. IEnumerator _GetTexture(string url, Action<Texture2D> actionResult)
  143. {
  144. UnityWebRequest uwr = new UnityWebRequest(url);
  145. DownloadHandlerTexture downloadTexture = new DownloadHandlerTexture(true);
  146. uwr.downloadHandler = downloadTexture;
  147. yield return uwr.SendWebRequest();
  148. Texture2D t = null;
  149. if (!(uwr.isNetworkError || uwr.isHttpError))
  150. {
  151. t = downloadTexture.texture;
  152. }
  153. if (actionResult != null)
  154. {
  155. actionResult(t);
  156. }
  157. }
  158.  
  159. /// <summary>
  160. /// 下载AssetBuddle
  161. /// </summary>
  162. /// <param name="url"></param>
  163. /// <param name="actionResult"></param>
  164. /// <returns></returns>
  165. IEnumerator _GetAssetBundle(string url, Action<AssetBundle> actionResult)
  166. {
  167. UnityWebRequest www = new UnityWebRequest(url);
  168. DownloadHandlerAssetBundle handler = new DownloadHandlerAssetBundle(www.url, uint.MaxValue);
  169. www.downloadHandler = handler;
  170.  
  171. yield return www.SendWebRequest();
  172.  
  173. AssetBundle bundle = null;
  174.  
  175. if (!(www.isNetworkError || www.isHttpError))
  176. {
  177. bundle = handler.assetBundle;
  178. }
  179.  
  180. if (actionResult != null)
  181. {
  182. actionResult(bundle);
  183. }
  184. }
  185.  
  186. /// <summary>
  187. /// 下载音效
  188. /// </summary>
  189. /// <param name="url"></param>
  190. /// <param name="actionResult"></param>
  191. /// <param name="audioType"></param>
  192. /// <returns></returns>
  193. IEnumerator _GetAudioClip(string url, Action<AudioClip> actionResult, AudioType audioType = AudioType.WAV)
  194. {
  195. using (var uwr = UnityWebRequestMultimedia.GetAudioClip(url, audioType))
  196. {
  197. yield return uwr.SendWebRequest();
  198.  
  199. if (!(uwr.isNetworkError || uwr.isHttpError))
  200. {
  201. if (actionResult != null)
  202. {
  203. actionResult(DownloadHandlerAudioClip.GetContent(uwr));
  204. }
  205. }
  206. }
  207. }
  208.  
  209. /// <summary>
  210. /// 表单下载
  211. /// </summary>
  212. /// <param name="serverURL"></param>
  213. /// <param name="lstformData"></param>
  214. /// <param name="actionResult"></param>
  215. /// <returns></returns>
  216. IEnumerator _Post(string serverURL, List<IMultipartFormSection> lstformData, Action<UnityWebRequest> actionResult)
  217. {
  218. //List<IMultipartFormSection> formData = new List<IMultipartFormSection>();
  219. //formData.Add(new MultipartFormDataSection("field1=foo&field2=bar"));
  220. //formData.Add(new MultipartFormFileSection("my file data", "myfile.txt"));
  221. UnityWebRequest uwr = UnityWebRequest.Post(serverURL, lstformData);
  222.  
  223. yield return uwr.SendWebRequest();
  224.  
  225. if (actionResult != null)
  226. {
  227. actionResult(uwr);
  228. }
  229. }
  230.  
  231. /// <summary>
  232. /// put
  233. /// </summary>
  234. /// <param name="url"></param>
  235. /// <param name="contentBytes"></param>
  236. /// <param name="actionResult"></param>
  237. /// <param name="contentType"></param>
  238. /// <returns></returns>
  239. IEnumerator _UploadByPut(string url, byte[] contentBytes, Action<bool> actionResult, string contentType = "application/octet-stream")
  240. {
  241. UnityWebRequest uwr = new UnityWebRequest();
  242. UploadHandler uploader = new UploadHandlerRaw(contentBytes);
  243. // Sends header: "Content-Type: custom/content-type";
  244. uploader.contentType = contentType;
  245. uwr.uploadHandler = uploader;
  246.  
  247. yield return uwr.SendWebRequest();
  248.  
  249. bool res = true;
  250. if (uwr.isNetworkError || uwr.isHttpError)
  251. {
  252. res = false;
  253. }
  254.  
  255. if (actionResult != null)
  256. {
  257. actionResult(res);
  258. }
  259. }
  260. }

ZT:https://www.jianshu.com/p/3da9191f82a0

UnityWebRequest_ZT的更多相关文章

随机推荐

  1. The type java.lang.AutoCloseable cannot be resolved. It is indirectly referenced from required .class files

    出现问题: The type java.lang.AutoCloseable cannot be resolved. It is indirectly referenced from required ...

  2. shell脚本一键部署lvs+keepalived

    环境 两个调度器dr1.dr2,两台真实机rs1.rs2.两台真实机安装httpd,并编辑主页内容用于验证 vip="192.168.132.250"dr1="192.1 ...

  3. 如何快速转载CSDN中的博客

    看到一篇<如何快速转载CSDN中的博客>,介绍通过检查元素→复制html来实现快速转载博客的方法.不过,不知道是我没有领会其精神还是其他原因,测试结果为失败.

  4. 数据结构与算法(C/C++版)【数组】

    第五章<数组> 一.概念 根据数组中存储的数据元素之间的逻辑关系,可以将数组分为 : 一维数组.二维数组.….n维数组.n维数组中,维数 n 的判断依据是:根据数组中为确定元素所在位置使用 ...

  5. Maven报错: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp

    郁闷了两天,创建maven项目时,eclipse报错:Could not resolve artifact org.apache.maven.archetypes:maven-archetype-we ...

  6. java实现图片验证码

    一.验证码生成类 package hbi.tech.utils; import javax.imageio.ImageIO; import java.awt.*; import java.awt.im ...

  7. ELK系列(一):安装(elasticsearch + logstash + kibana)

    因为公司使用ELK的缘故,这两天尝试在阿里云上安装了下ELK,这里做个笔记,有兴趣的同学可以看下. 先大致介绍下ELK,ELK是三个组件的缩写,分别是elasticsearch.logstash.ki ...

  8. TreeMap剖析

    TreeMap实现有序要么就是外界传递进来Comparator对象,要么就使用默认key的Comparable接口(实现自然排序) 最后我就来总结一下TreeMap要点吧: 由于底层是红黑树,那么时间 ...

  9. 由std::once_call 引发的单例模式的再次总结,基于C++11

    一个偶然的机会,知道了std::once_call这个东西. 了解了下,std::once_call支持多线程情况下的某函数只执行一次.咦,这个不是恰好符合单例模式的多线程安全的困境吗? 单例模式,经 ...

  10. 【主动学习】Variational Adversarial Active Learning

    本文记录了博主阅读ICCV2019一篇关于主动学习论文的笔记,第一篇博客,以后持续更新哈哈 论文题目:<Variational AdVersarial Active Learning> 原 ...