关于StartCoroutine的简单线程使用

StartCoroutine在unity3d的帮助中叫做协程,意思就是启动一个辅助的线程。

在C#中直接有Thread这个线程,但是在unity中有些元素是不能操作的。这个时候可以使用协程来完成。

使用线程的好处就是不会出现界面卡死的情况,如果有一次非常大量的运算,没用线程就会出现假死的情况。

下面通过一个简单的例子来说明使用协程的好处:


void OnGUI()
    {
        GUI.Label(new Rect(0, 0, 200, 50), "测试1:" + result);
        if (GUI.Button(new Rect(0, 100, 100, 50), "开启协程"))
        {
            StartCoroutine(GetResult());
        }

        GUI.Label(new Rect(200, 0, 200, 50), "测试2:" + result1);
        if (GUI.Button(new Rect(200, 100, 100, 50), "无协程测试"))
        {
            GetResult1();
        }
    }

上面的代码表示在GUI中定义2个label和按钮,一个按钮启动协程计算,另一个直接计算结果。由于2个方法都是计算同样的结果,计算量比较大,所以直接计算出现了暂时的卡死情况。


float result;
    IEnumerator GetResult()
    {
        for (int i = 0; i < 1000; i++)
        {
            for (int j = 0; j < 100000; j++)
            {
                result += (i + j);
                
            }
            if(i%100==0)
                yield return 1;
            
        }
    }

这个方法是协程的写法,在C#中协程要定义为IEnumerator 这个类型,javascript中不需要。

yield return 1;这句话表示返回1帧的结果。在i为100的整数时,就返回一次结果,这样可以避免大量的计算卡死。


float result1;
    void GetResult1()
    {
        for (int i = 0; i < 1000; i++)
        {
            for (int j = 0; j < 100000; j++)
            {
                result1 += (i + j);
            }
        }
    }

这个方法就是直接计算结果,由于运算量比较大,所以界面会卡死,这样就可以体现出用协程的好处了。
使用IEnumerator 这个类型时,必须用yield return来返回结果,参数为数字时表示为帧数。
如yield return 1 表示每一帧返回一次结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值