Unity学习90天 - 第 6天 - 学习协程 Coroutine并实现每隔 2 秒生成一波敌人

欢迎回来! 今天我们掌握协程的基本语法,学会用协程实现延时执行和周期性任务!

一、什么是协程?

协程(Coroutine) 是一种"可以暂停、可以恢复"的特殊函数。

普通函数一旦开始执行,必须一口气跑完才能返回。协程不一样------它可以在任意位置暂停(yield) ,把控制权交还给 Unity,下一帧或指定时间后再恢复继续执行。

类比:普通函数像看电影------一旦开始必须看完;协程像看电视剧------看完一集可以暂停,明天接着看。

协程的核心价值:

场景 不用协程 用协程
3秒后执行某操作 timer += Time.deltaTime 计数 yield return new WaitForSeconds(3)
每隔2秒生成敌人 timer 变量判断 yield return new WaitForSeconds(2) 循环
动画序列(先A后B再C) 状态机 + 大量标志位 一行一行顺序写
网络请求等待响应 卡住主线程 异步等待,不卡游戏

二、协程的基本语法

2.1 定义协程

cs 复制代码
// 协程返回类型必须是 IEnumerator
IEnumerator MyCoroutine()
{
    Debug.Log("开始");
    
    yield return new WaitForSeconds(2f);  // 暂停2秒
    
    Debug.Log("2秒后继续");
}

2.2 启动协程

cs 复制代码
void Start()
{
    // 方式1:StartCoroutine 字符串形式
    StartCoroutine("MyCoroutine");
    
    // 方式2:StartCoroutine 方法形式(推荐)
    StartCoroutine(MyCoroutine());
}

推荐方式2,因为方式1无法传参,且重名时容易出错。

2.3 停止协程

cs 复制代码
// 停止指定协程
StopCoroutine("MyCoroutine");        // 方式1
StopCoroutine(MyCoroutine());        // 方式2(不推荐,会启动新协程再停)

// 停止该对象上所有协程
StopAllCoroutines();

三、yield return 的多种用法

yield return 是协程的"暂停指令",不同的返回值有不同的暂停行为:

写法 暂停多久 用途
yield return null 下一帧 分帧执行,避免卡顿
yield return new WaitForSeconds(n) n秒 延时执行
yield return new WaitForSecondsRealtime(n) n秒(不受Time.timeScale影响) 暂停菜单倒计时
yield return new WaitForEndOfFrame() 当前帧渲染完 截图、计算最终位置
yield return new WaitForFixedUpdate() 下一个 FixedUpdate 物理相关操作
yield return StartCoroutine(Other()) 等待另一个协程完成 协程嵌套
yield break 立即结束 提前退出协程

那么其实我们协程的知识就已经这些了,为了让大家能更加深入理解那么我们开始实现我们本章的脚本任务吧!

四、延时执行功能实现

cs 复制代码
using UnityEngine;

public class DelayedSpawn : MonoBehaviour
{
    public GameObject enemyPrefab;

    void Start()
    {
        // 启动协程
        StartCoroutine(SpawnAfterDelay(3f));
    }

    IEnumerator SpawnAfterDelay(float delayTime)
    {
        Debug.Log("等待 " + delayTime + " 秒...");
        
        yield return new WaitForSeconds(delayTime);  // 暂停指定秒数
        
        // 时间到了,继续执行
        Instantiate(enemyPrefab, transform.position, Quaternion.identity);
        Debug.Log("敌人已生成!");
    }
}

七、协程 vs Update 对比

特性 Update 方式 协程方式
代码可读性 需要大量状态变量 顺序执行,像写故事
计时逻辑 timer += Time.deltaTime yield return WaitForSeconds
内存开销 无额外开销 创建 IEnumerator 对象
适用场景 每帧都要做的事 延时、序列、周期性任务
停止控制 用 bool 标志位 StopCoroutine / StopAllCoroutines

由于这个其实很简单就不展示啦大家自己动手练一练吧!

**今天的教学就到这里!**接下来我将连续更新90天的Untiy教程从基础到一个网络部分,有兴趣的朋友们可以收藏关注,谢谢!如果有疑问,评论区见。

相关推荐
LN花开富贵2 小时前
【ROS】鱼香ROS2学习笔记二
linux·笔记·python·学习·嵌入式
檬柠wan2 小时前
MySQL-数据库增删改查学习
数据库·学习·mysql
张老师带你学2 小时前
unity 老版本资源迁移,第一人称,完整城市,有出身点房内视图,有gun shop视图,urp
科技·游戏·unity·模型·游戏美术
minglie13 小时前
Zynq 开发中的工程文件管理
学习
炽烈小老头4 小时前
【每天学习一点算法 2026/04/16】逆波兰表达式求值
学习·算法
千寻girling5 小时前
机器学习 | 线性回归 | 尚硅谷学习
学习·机器学习·线性回归
jasonblog5 小时前
对小龙虾openclaw的关注、学习、使用和变化观察
人工智能·学习·ai
Hical_W5 小时前
深入学习CPP17_PMR
c++·学习
何以解忧唯有撸码6 小时前
玩转控件:封装个带图片的Label控件
c#·winform·自定义控件·封装控件·控件扩展