Unity 3D协程
2018-01-08 23:36
190 查看
Unity3D 是单线程的
WaitForFixedUpdate 暂停协程直到下一次FixedUpdate时才会继续
WaitForEndOfFrame 等到所有摄像机和GUI被渲染完成后再恢复协程执行
IEnumerator
迭代器块中的局部变量会被分配到堆上
使用WWW实现GET请求和POST请求
StartCoroutine 开启协程
Coroutine StartCoroutine(IEnumerator routine); Coroutine StartCoroutine(string methodName, object value = null);
yield 暂停协程执行
yield return null //暂停一帧,然后再执行
StopCoroutine 停止一个协程
StopCoroutine只能停止同一个游戏脚本中的方法名和传入string型参数相同的协程,而无法影响别的脚本中开启的协程,StopCoroutine方法只能用来停止那些使用了StartCoroutine的string型参数的重载版本开启的协程协程延时效果
WaitForSeconds 暂停几秒WaitForFixedUpdate 暂停协程直到下一次FixedUpdate时才会继续
WaitForEndOfFrame 等到所有摄像机和GUI被渲染完成后再恢复协程执行
迭代器
IEnumerable//非泛型 public interface IEnumerable { IEnumerator GetEnumerator(); } //泛型 public interface IEumerable<out T> :IEumberable { IEnumerator<T> GetEnumerator(); IEnumerator GetEnumerator(); }
IEnumerator
//非泛型 public interface IEumerator { Object Current {get;} //当前所指向的值 bool MoveNext(); //指向下一个结点 void Reset(); } //泛型 public interface IEnumerator<out T>: IDisposable, IEnumerator { void Dispose(); Object Current {get;} T Current {get;} bool MoveNext(); void Reset(); }
迭代器块中的局部变量会被分配到堆上
WWW和协程
WWW类是提供一个用来从提供的URL获取内容的工具类,并且返回该实例来下载URL的内容。WWW类的构造函数除了创建一个新的实例之外,还会创建和发送一个GET请求,并且会自动开启一个流来下载从URL获取内容使用WWW实现GET请求和POST请求
public class HttpWrapper : MonoBehaviour { public void GET(string url, Action<WWW> onSuccess, Action<WWW> onFail = null) { WWW www = new WWW(url); StartCoroutine(WaitForResponse(www, onSuccess, onFail)); } public void POST(string url, Dictionary<string, string> post, Action<WWW> onSuccess, Action<WWW> onFail) { WWWForm form = new WWWForm(); foreach(KeyValuePair<string, string> post_arg in post) { form.AddField(post_arg.Key, post_arg.Value); } WWW www = new WWW(url, form); StartCoroutine(WaitForResponse(www, onSuccess, onFail)); } private IEumerator WaitForResponse(WWW www, Action<WWW> onSuccess, Action<WWW> onFail = null) { yield return null; if(www.error == null) { onSuccess(www); } else { Debug.LogError("WWW Error"); if(onFail != null) onFail(www); } } }
参考
Unity 3D脚本编程—-使用c#语言开发跨平台相关文章推荐
- Unity 3D中yield协程与消息传递
- Unity 3D中不得不说的yield协程与消息传递
- unity 3D c# 协程的典型用法-Unity官方案例精讲笔记
- UNITY 3D 协程执行顺序
- Unity 3D学习日记(6)
- Unity 3d脚本加密方案
- 关于Unity中的3D数学基础知识<一>_坐标系相关
- 【Unity】用Shader编程实现3D红心
- Unity 3D笔记——如何运用skybox
- 帮同学做的把T1图像转成TXT格式用于unity 3d输入的小工具
- [unity-17] Unity如何在UI层显示3D模型
- Unity制作简单3D图表
- 有点坑的unity协程
- Unity 3D Android对dll加密和重编译mono源码进行解密
- Unity 3d性能优化技巧
- [unity3d3.54下载] unity 3d 安装方法 教程
- Unity鼠标自由查看3D物体之控制摄相机Camera
- unity 3D 里的刚体属性
- unity导入的自定义3D模型从地板掉下去
- [Unity通信]一个基于socket的3DARPG网络游戏(二):消息分类处理和json的使用