StartCoroutine的使用
2024-09-02 00:23:30
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和button,一个button启动协程计算,还有一个直接计算结果。
因为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 表示每一帧返回一次结果。
最新文章
- 泛型-List<;T>;
- JQuery基础教程:事件(下)
- acdream 1681 跳远女王(BFS,暴力)
- Apache DbUtils - JDBC轻量级封装的工具包
- 设计模式_Decorator_装饰模式
- careercup-中等难度 17.11
- 异常IllegalStateException终于解决了
- SAP自带的创建报表工具
- <;我的外骨骼,诺基>;后的访谈
- bug单的生命周期
- Python基础之Windows下Python3.x环境搭建
- arts打卡 从排序数组中删除重复项
- clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
- Core 中 Filter 中相关处理
- Delphi事件的广播 转
- 基于GitLab与Git Extensions搭建版本控制工具
- 【转载】COM 组件设计与应用(一)——起源及复合文件
- Spring4.0+quartz2.2.1+memcahce多台nginx实现均衡
- 【Python】xlrd,NotImplementedError-formatting_info=True not yet implemented
- linux内核介绍
热门文章
- netsh http的使用
- Rapidjson的简单使用示例
- Announcing Zuul: Edge Service in the Cloud--转
- Android 使用TabLayout、ViewPager和Fragment实现顶部菜单可滑动切换
- 机器学习(三) Jupyter Notebook, numpy和matplotlib的详细使用 (上)
- Coderfroces 862 C. Mahmoud and Ehab and the xor
- C# DevExpress GridControl使用方法
- VUE里子组件获取父组件动态变化的值
- Swift学习笔记(2)--元组(Tuples)、Optional(可选值)、(Assertions)断言
- Linux局域网登陆响应时间过长