当前位置:   article > 正文

Unity学习Day14--协程和WWW_yield return uwr.sendwebrequest()在什么时候结束

yield return uwr.sendwebrequest()在什么时候结束

 

协程 IEnomerator


1.yield return 暂停协程,等当前帧结束,在下一帧继续执行
   yield break 结束协程
2.StartCoroutine()  启动协程
3.yield return new WaitForEndOfFrame()  在下一帧的OnGUI执行完了恢复继续执行
4.yield return new WaitForSeconds(n)  暂停协程,等n秒后继续执行
5.yield return new WaitForFixedUpdate() 在FixedUpdate之后执行
6.yield return StartCoroutine(另一个协程)  协程嵌套,在另一个协程结束后再执行当前协程

启动协程的方式:3个重载
StartCoroutine(协程名称(协程参数))
StartCoroutine("方法名称")
StartCoroutine("方法名称",方法参数) 用这种方法启动协程,参数只能是一个

停止协程的方式:
StopCoroutine(Coroutine)   Coroutine是协程返回的值对象
StopCoroutine(IEnumerator)  IEnumerator是协程接口对象
StopCoroutine("协程方法名称")  这种方式只能停止以字符串开始的协程,就是第二种启动协程
StopAllCoroutines          停止所有协程-慎用

跳出协程:
yield break

特殊协程
IEnumerator Start() 将Start改造成一个协程 在游戏开始时自动启动

  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class IEDemo : MonoBehaviour
  6. {
  7. int NormalFunction()
  8. {
  9. //return的含义是【返回结果,并结束函数的执行】
  10. return 1;
  11. }
  12. //协同程序 --> 【特殊返回值类型(Ienumerator的方法】
  13. IEnumerator IEnumeratorDemo()
  14. {
  15. Debug.Log("1");
  16. //协程的返回值与普通方法的返回【区别】
  17. //最大区别,协程返回使用的关键字时[yield return]
  18. //返回任何东西都可以
  19. //协程中[至少要有一次]的yield return
  20. //yield return [已知值或变量] 的含义是
  21. //【暂停方法执行,等待当前帧结束,等待下一帧继续执行】
  22. yield return 1;
  23. Debug.Log(2);
  24. //停止协程的运行
  25. yield break;
  26. //暂停
  27. yield return null;
  28. Debug.Log(3);
  29. //暂停
  30. yield return "abc";
  31. Debug.Log(4);
  32. }
  33. IEnumerator WaitForSecondsDemo()
  34. {
  35. Debug.Log("Dog");
  36. //含义:暂停协程,等3秒之后,继续进行
  37. yield return new WaitForSeconds(3);
  38. Debug.Log("Cat");
  39. }
  40. IEnumerator WaitForEndOfFrameDemo()
  41. {
  42. Debug.Log("abc");
  43. //在下一帧的Update执行完了恢复继续执行
  44. //yield return null;
  45. //含义:暂停协程,等下一帧再继续执行
  46. //在下一帧的OnGUI执行完了恢复继续执行
  47. yield return new WaitForEndOfFrame();
  48. Debug.Log("def");
  49. }
  50. IEnumerator WaitForSecondCircle()
  51. {
  52. int count = 0;
  53. while (true)
  54. {
  55. yield return new WaitForSeconds(1);
  56. Debug.Log(++count);
  57. }
  58. }
  59. IEnumerator InvokeMethodPerSeconds(Action method,float seconds)
  60. {
  61. while (true)
  62. {
  63. //执行函数
  64. method();
  65. //等待时间
  66. yield return new WaitForSeconds(seconds);
  67. }
  68. }
  69. IEnumerator InvokeMethodPerFrame(Action method)
  70. {
  71. while (true)
  72. {
  73. method();
  74. yield return 0;
  75. }
  76. }
  77. private void Start()
  78. {
  79. //调用普通函数
  80. NormalFunction();
  81. //启动协同程序
  82. //第一种写法
  83. //StartCoroutine(IEnumeratorDemo());
  84. //第二种写法,分开写
  85. /*IEnumerator ie = IEnumeratorDemo();
  86. StartCoroutine(ie);*/
  87. //StartCoroutine(WaitForEndOfFrameDemo());
  88. //StartCoroutine(WaitForSecondsDemo());
  89. //StartCoroutine(WaitForSecondCircle());
  90. /*StartCoroutine(InvokeMethodPerSeconds(() =>
  91. {
  92. Debug.Log("Hello World!");
  93. }, 2f));*/
  94. StartCoroutine(InvokeMethodPerFrame((() =>
  95. {
  96. Debug.Log("Hello Unity!");
  97. })));
  98. }
  99. }

Get方式:信息参数显示在URL中

Post方式:参数信息不显示在URL中

WWW

  1. using System;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Net;
  5. using UnityEditor;
  6. using UnityEngine;
  7. using UnityEngine.Networking;
  8. using UnityEngine.UI;
  9. using UnityEngine.Video;
  10. public class WWWDemo : MonoBehaviour
  11. {
  12. [Header("原图组件")]
  13. public RawImage _rawImage;
  14. [Header("Image组件")]
  15. public Image _image;
  16. [Header("视频播放器")]
  17. public VideoPlayer _VideoPlayer;
  18. //声明一个视频片段
  19. private VideoClip _videoClip;
  20. private IEnumerator Start()
  21. {
  22. //yield return StartCoroutine(DownLoadText());
  23. //yield return StartCoroutine(DownloadNewsText());
  24. //yield return StartCoroutine(DownloadTexture());
  25. // yield return StartCoroutine(NewVisonDownload());
  26. yield return StartCoroutine(NewVersionDownloadVideo());
  27. }
  28. /// <summary>
  29. /// 下载文本
  30. /// </summary>
  31. /// <returns></returns>
  32. IEnumerator DownloadNewsText()
  33. {
  34. WWW www = new WWW("http://v.juhe.cn/toutiao/index?type=top&key=bd6d102ed7d4cdbe209c05d413eedcd3");
  35. //等待下载,第一种
  36. yield return www;
  37. //打印结果
  38. Debug.Log(www.text);
  39. }
  40. /// <summary>
  41. /// 新版本下载视频
  42. /// </summary>
  43. /// <returns></returns>
  44. IEnumerator NewVersionDownloadVideo()
  45. {
  46. //尝试加载视频片段
  47. _videoClip = Resources.Load<VideoClip>("welcome");
  48. //如果没有加载到,则去下载
  49. if (_videoClip==null)
  50. {
  51. //创建网络请求对象
  52. UnityWebRequest webRequest = UnityWebRequest.Get("http://f.video.weibocdn.com/00341gCFgx07LoEZcDa7010412017MOB0E010.mp4?label=mp4_hd&template=852x480.25.0&trans_finger=62b30a3f061b162e421008955c73f536&media_id=4619091051479108&tp=8x8A3El:YTkl0eM8&us=0&ori=1&bf=3&ot=h&lp=00002KCE4n&ps=4pdsh0&uid=3ZoTIp&ab=3915-g1,966-g1,1493-g0,1192-g0,1191-g0,1046-g2,3601-g5,1258-g0&Expires=1619087600&ssig=V%2FxM%2B1IoMo&KID=unistore,video");
  53. //WebRequest webRequest = WebRequest.Create(
  54. //"http://f.video.weibocdn.com/00341gCFgx07LoEZcDa7010412017MOB0E010.mp4?label=mp4_hd&template=852x480.25.0&trans_finger=62b30a3f061b162e421008955c73f536&media_id=4619091051479108&tp=8x8A3El:YTkl0eM8&us=0&ori=1&bf=3&ot=h&lp=00002KCE4n&ps=4pdsh0&uid=3ZoTIp&ab=3915-g1,966-g1,1493-g0,1192-g0,1191-g0,1046-g2,3601-g5,1258-g0&Expires=1619087600&ssig=V%2FxM%2B1IoMo&KID=unistore,video");
  55. //发送网络请求,并等待下载
  56. webRequest.SendWebRequest();
  57. while (!webRequest.isDone)
  58. {
  59. Debug.Log(webRequest.downloadProgress);
  60. yield return 0;
  61. }
  62. //获取视频文件的字节流
  63. byte[] bytes = webRequest.downloadHandler.data;
  64. //写入到本地
  65. File.WriteAllBytes(Application.dataPath + "/Resources/welcome.mp4",bytes);
  66. while (_videoClip == null)
  67. {
  68. //刷新资源
  69. AssetDatabase.Refresh();
  70. //尝试加载视频片段
  71. _videoClip = Resources.Load<VideoClip>("welcome");
  72. yield return 0;
  73. }
  74. }
  75. //将下好的视频,设置到ViedeoPlayer组件中
  76. _VideoPlayer.clip = _videoClip;
  77. //播放视频
  78. _VideoPlayer.Play();
  79. }
  80. /// <summary>
  81. /// 新版本下载
  82. /// </summary>
  83. /// <returns></returns>
  84. /// 第一步、创建对象:UnityWebRequest
  85. /// Get:UnityWebRequest.Get(url)
  86. /// Post:UnityWebRequest.Post(url,参数列表)
  87. /// 第二步、发送web情况,并等待下载
  88. /// yield return data.SendWebRequest();
  89. /// 第三步、获取下载好的内容
  90. /// 内容分类:文本Text 直接用; 字节流Bytes 需要写入本地文件
  91. /// 第四步、如何写入到本地
  92. /// File.WriteAllBytes(文件的完整路径,比特数组)
  93. /// 【示例】
  94. /// File.WriteAllBytes(Application.dataPath + "/a.text",bytes);
  95. /// 第五步、如何从本地获取文件
  96. /// 1.文件
  97. IEnumerator NewVisonDownload()
  98. {
  99. UnityWebRequest data = UnityWebRequest.Get("http://v.juhe.cn/toutiao/index?type=top&key=bd6d102ed7d4cdbe209c05d413eedcd3");
  100. //发送web请求,并等待下载
  101. yield return data.SendWebRequest();
  102. //数据【字节流】
  103. byte[] bytes = data.downloadHandler.data;
  104. //将字节流写入到本地Resources文件夹中
  105. File.WriteAllBytes(Application.dataPath + "/Resources/a.text",bytes);
  106. //等一帧
  107. yield return 0;
  108. //刷新资源
  109. AssetDatabase.Refresh();
  110. //从Resources文件夹中读取文件
  111. Resources.Load<Text>("a");
  112. }
  113. /// <summary>
  114. /// 下载图片
  115. /// </summary>
  116. /// <returns></returns>
  117. IEnumerator DownloadTexture()
  118. {
  119. WWW www = new WWW("https://th.bing.com/th/id/R65398d6ad86129f9628c0ad80da4040c?rik=C3qNS9mZOQk%2b5A&riu=http%3a%2f%2fwww.shijuepi.com%2fuploads%2fallimg%2f200918%2f1-20091Q10420.jpg&ehk=QBNuJIbVP1qo%2bwUD3YzXcvL4H5iHivOHXUnzzRw%2bWfU%3d&risl=&pid=ImgRaw");
  120. //第二种,等待下载
  121. while (!www.isDone)
  122. {
  123. Debug.Log("progress:" + www.progress);
  124. yield return 0;
  125. }
  126. /*//等待下载
  127. yield return www;*/
  128. #region 直接将纹理用RawImage进行渲染
  129. //设置图片的原始宽高
  130. _rawImage.GetComponent<RectTransform>().sizeDelta =
  131. new Vector2(www.texture.width,www.texture.height);
  132. //设置图片到RawImage中
  133. _rawImage.texture = www.texture;
  134. #endregion
  135. #region 使用Image去渲染,在此之前要将纹理转换为精灵
  136. Sprite sprite = Sprite.Create(www.texture, new Rect(
  137. Vector2.zero,
  138. new Vector2(www.texture.width,
  139. www.texture.height)),
  140. Vector2.zero
  141. );
  142. sprite.name = "sprite";
  143. //渲染
  144. _image.sprite = sprite;
  145. #endregion
  146. //如何把纹理转换成精灵
  147. }
  148. /// <summary>
  149. /// 下载视频
  150. /// </summary>
  151. /// <returns></returns>
  152. IEnumerator DownloadVideos()
  153. {
  154. WWW www = new WWW("");
  155. yield return www;
  156. //www.get
  157. }
  158. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/95689
推荐阅读
相关标签
  

闽ICP备14008679号