Unity之Coroutine协程(一)

本文详细介绍了Unity3D中的协程机制及其工作原理,包括如何使用协程减轻Update()函数的负担,并探讨了不同yield指令的效果及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#中没有Coroutine,Coroutine(协程)是Unity3D中的一种机制,可以减少Update()的负担。
  • 在协程yield return之后,继续执行协程是在Update()之后,LateUpdate()之前进行的。所以,协程并不是多线程,它和Update()一样是在主线程中执行的。
  • StartCoroutine必须在MonoBehaviour或继承于MonoBehaviour的类中调用。
public class MyCoroutine : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(PutInfo());
    }
    IEnumerator PutInfo()
    {
        while (true)
        {
            print("协程中1   " + Time.time);
            yield return null;
            print("协程中2   " + Time.time);
        }
    }
    void Update()
    {
        print("Update   " + Time.time);
    }
    void LateUpdate()
    {
        print("LateUpdate   " + Time.time);
    }
}
Unity之Coroutine协程(一)
  • yield return null与yield return 0、yield return 1等yield return num系列都表示等待一帧执行。
  • yield return new WaitForSeconds(time);与Time.timeScale有关。参数time 与Time.time一致。当参数time为1时,在Time.time每增加1时执行yield return后的代码。Time.timeScale>1时,游戏速度加快,Time.timeScale<1时,游戏速度减慢。如:当Time.timeScale=2,参数time为1时,此时游戏速度会加快,Time.time会以原先2被的速度增长,同样还是在Time.time为1的时候执行yield return后的代码,也就是说,这种情况下,Time.time变化速度快于Scale=1时候的变化速度,所以第一次执行yield return后的代码时用的真实时间比Scale=1的时间短。
  • yield return new WaitForFixedUpdate():等待所有的脚本的FixedUpdate函数执行完后在继续执行
  • yield return new WWW(url):等待url下载完后再继续执行
  • yield return StartCoroutine(MyFunc):等待协程MyFunc执行完后再执行
  • Time.realtimeSinceStartup()与Time.timeScale无关。
public class MyCoroutine : MonoBehaviour
{  
    void Start()
    {
        StartCoroutine(PutInfo());
    }
    IEnumerator PutInfo()
    {
        while (true)
        {
            print("协程中1   " + Time.time+"  "+Time.realtimeSinceStartup);
            yield return new WaitForSeconds(1);
            print("协程中2   " + Time.time + "  " + Time.realtimeSinceStartup);
        }
    }
    void Update()
    {
        print("Update   " + Time.time + "  " + Time.realtimeSinceStartup);
    }
    void LateUpdate()
    {
        print("LateUpdate   " + Time.time + "  " + Time.realtimeSinceStartup);
    }
}
-----------Time.timeScale=1时,在游戏启动2.43s后第一次执行yield return 后的代码----------
                  Unity之Coroutine协程(一)
-----------Time.timeScale=2时,在游戏启动1.96s后第一次执行yield return 后的代码----------
                  Unity之Coroutine协程(一)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫青菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值