using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class CilpFPS : MonoBehaviour { //协程id private int id; //协程字典 Dictionary dic = new Dictionary(); public void AddFPS(List list, int num, Action action) { int name = id++; Coroutine coroutine = StartCoroutine(GetFromInfoList(name, list, num, action)); dic.Add(name, coroutine); } /// /// 添加分帧 /// /// 分帧加载的总数量< /// 一帧调用的帧的数量 /// 具体做什么 public void AddFPS(int max, int num, Action action) { int name = id++; Coroutine coroutine = StartCoroutine(GetFromInfoList(name, max, num, action)); dic.Add(name, coroutine); } /// /// 开始分帧加载 /// /// 协程名称 /// 分帧加载的总数量 /// 一帧调用的帧的数量 /// 具体做什么 /// IEnumerator GetFromInfoList(int name, List list, int num, Action action) { int InfoListIndex = 0; foreach (T item in list) { InfoListIndex++; action(item); if (InfoListIndex % num == 0) { yield return null; // 在下一帧执行 } } StopFPS(name); } /// /// 开始分帧加载 /// /// 协程名称 /// 分帧加载的总数量 /// 一帧调用的帧的数量 /// 具体做什么 /// IEnumerator GetFromInfoList(int name, int max, int num, Action action) { for (int i = 0; i < max; i++) { action(i); if (i % num == 0) { //每一帧提取5条数据 Debug.Log("运行时间:" + Time.time + ",创建次数:" + (i + 1)); yield return null; // 在下一帧执行 } } StopFPS(name); } /// /// 移除协程 /// /// private void StopFPS(int name) { if (dic.ContainsKey(name)) { StopCoroutine(dic[name]); dic.Remove(name); } } }