Unity-协程
协程的简单实现
一般的程序执行都是线性的,也就是必须一行一行的执行代码。
使用Unity提供的协程,就可以类似于开辟另一条线程,调整根据你所写的代码,调整下一行代码执行的时间。
项目示例
下面的例子是一个 U3D Demo 中的代码,实现最简单的 Enemy 追击 Player 的功能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| IEnumerator MoveToAttackTarget() { agent.isStopped = false;
transform.LookAt(attackTarget.transform);
while(Vector3.Distance(attackTarget.transform.position,transform.position)>2) { agent.destination = attackTarget.transform.position; yield return null; }
agent.isStopped = true;
if(LastAttackTime<0) { anim.SetTrigger("Attack"); LastAttackTime = 0.5f; } }
|
更多可能 - Update优化
使用协程模拟Update函数
1 2 3 4 5 6 7 8 9 10 11 12 13
| protected virtual void Start() { StartCoroutine(IEUpdate()); }
protected virtual IEnumerator IEUpdate() { while(true) { yield return null; } }
|
相对于Update的优点(仅个人见解):
- 可以随时停止调用
- 在只调用一次的方法中启动一段每帧执行的代码片段
深入Unity Coroutine
深入Unity Coroutine - 知乎 (zhihu.com)