Unity-协程

Unity-协程

协程的简单实现

​ 一般的程序执行都是线性的,也就是必须一行一行的执行代码。

​ 使用Unity提供的协程,就可以类似于开辟另一条线程,调整根据你所写的代码,调整下一行代码执行的时间。

项目示例

​ 下面的例子是一个 U3D Demo 中的代码,实现最简单的 Enemy 追击 Player 的功能。

IEnumerator MoveToAttackTarget()
{
    agent.isStopped = false;	// agent is NavMeshComponent

    transform.LookAt(attackTarget.transform);

    while(Vector3.Distance(attackTarget.transform.position,transform.position)>2)
    {
        agent.destination = attackTarget.transform.position;	//Move to attack target
        yield return null;
    }

    agent.isStopped = true;

    if(LastAttackTime<0)	 //Attack
    {
        anim.SetTrigger("Attack");
        LastAttackTime = 0.5f;
    }
}

更多可能 - Update优化

使用协程模拟Update函数

protected virtual void Start()
{
    StartCoroutine(IEUpdate());
}

protected virtual IEnumerator IEUpdate()
{
    while(true)
    {
        yield return null;
        //需要每帧执行的语句
    }
}

相对于Update的优点(仅个人见解):

  1. 可以随时停止调用
  2. 在只调用一次的方法中启动一段每帧执行的代码片段

深入Unity Coroutine

深入Unity Coroutine - 知乎 (zhihu.com)

posted @ 2023-11-14 19:06  Daliuteliu  阅读(29)  评论(0编辑  收藏  举报