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 @   Daliuteliu  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示