unity3D之协程Coroutine

本文深入探讨Unity3D中的协程使用技巧及注意事项,包括协程的基本概念、如何使用WaitForSeconds()函数实现延时操作,以及协程与主线程的关系等关键信息。

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

第二次写博客,对于unity3D的学习已经持续了近两个月,最近被其中的协程困惑很久,研究下简单写个记录供大家参考,欢迎各位大神指正错误。


一个最简单的实现协程的代码:

using UnityEngine;
using System.Collections;

public class coroutine : MonoBehaviour {

	// Use this for initialization
	void Start () {
        StartCoroutine(beginCoroutine());
	}

    public IEnumerator beginCoroutine()
    {
        yield return new WaitForSeconds(1.0f);
    }

	// Update is called once per frame
	void Update () {
	
	}
}
StartCoroutine():开启一个协程,可以是函数或者函数名称字符串,这里主要和结束协程StopCoroutine()有关。具体用法参照:点击打开链接
返回参数必须是IEnumerator,用yield return得到返回值。这里留个坑,IEnumerator和IEnumerable两个接口和yield用法暂时没搞清楚,过两天补上。
那么,这里主要介绍协程的使用注意,对于协程来说,小弟经过多次测试的验证发现结论就是一定要慎重使用协程!

第一,协程不同于线程,协程不是异步执行的,也就是说协程是作为一种函数在主函数中被调用的。

第二,C#中WaitForSeconds()函数不能直接使用,只能通过调用协程使用。也就是要实现过几秒执行的效果会用到协程。(Invoke()也留个坑)。

第三,yield的用法就相当于说:返回调用的函数,然后下一帧从这里重新开始。

具体给出一段测试函数。

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

    public static int count=0;
	// Use this for initialization
	void Start () {
        int i = 0;
        Debug.Log("start主函数");
        StartCoroutine(begin(i));	//第十行
        i++;
        Debug.Log("end 主函数" + i+","+count);
        Debug.Log("2222end 主函数" + i + "," + count);

	}

    public IEnumerator begin(int i)
    {

        Debug.Log("start 协成");
        count++;
        i++;
        Debug.Log("end 协成" + i + ", " + count);
        yield return new WaitForSeconds(3f);
        Debug.Log("return 协成完毕" + i + ", " + count);
        Debug.Log("2222end 协成" + i + ", " + count);

        

    } 
	// Update is called once per frame
	void Update () {
        
	}
}
在第十行调入协程后,会一直执行协程函数内的语句,直到遇见return。注意:此时执行WaitForSecond()函数,然后在当前帧继续执行调用协程的函数,也就是Start()内的代码,直到结束。下一帧回到协程函数内部,执行yeild return后面代码,直到函数结束。总之对于协程的使用一定要小心,如果只想实现延迟几秒,那么最好在Start()内调用协程之后不要有继续执行代码,或者控制好协程的stop。

代码执行结果:


相关知识链接:点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值