unity 协程 基础介绍
协程不是多线程,虽然是支持分开管理的,检查协程的代码不用考虑同步和锁的问题(用于异常测试的测试知识点)
unity 会在每秒帧处理对象的协程,当某些情况下,需要检查 update 函数后会进行处理协程,就需要检查,检查方式代码走查。
MonoBehaviour 并且 yield 满足,会执行协程后面的代码。
用 fps 做 1 个范例,遇到条件语句会等待时间后执行,也可以挂起。自我感觉是写的比较浅的只写了①时间管理
游戏产业可以和②碰撞管理类 ③计数 参与管理
具体 C# 例子如下:
using UnityEngine;
using System.Collections;
public class NcDrawFpsRect : MonoBehaviour
{
---
IEnumerator FPS()
{
while (true)
{
// Update the FPS
float fps = accum/frames;
sFPS = fps.ToString( "f" + Mathf.Clamp( nbDecimal, 0, 10 ) );
yield return new WaitForSeconds(fre); //①时间管理 协程上面float fre
//Update fps color
color = (fps >= 30) ? Color.green : ((fps > 10) ? Color.yellow : Color.red);
public float fre = 0.5F;
private float accum = 0.0F;
private int frames = 0;
yield return new WaitForSeconds(wait(0.3f)); //①时间管理
}
}
协程效率对比 update 带来的性能消耗较少,这块具体可以看 unity 官方手册。
在游戏开发中把 gameobject 的 active 属性设置为 false 就关闭了协程。在 MonoBehaviour 里开发者可以便于管理,同时避免出错,这个也是协程存在的意义。