93 lines
2.6 KiB
C#
93 lines
2.6 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class CilpFPS : MonoBehaviour
|
|
{
|
|
|
|
|
|
//协程id
|
|
private int id;
|
|
//协程字典
|
|
Dictionary<int, Coroutine> dic = new Dictionary<int, Coroutine>();
|
|
|
|
public void AddFPS<T>(List<T> list, int num, Action<T> action)
|
|
{
|
|
int name = id++;
|
|
Coroutine coroutine = StartCoroutine(GetFromInfoList(name, list, num, action));
|
|
dic.Add(name, coroutine);
|
|
}
|
|
/// <summary>
|
|
/// 添加分帧
|
|
/// </summary>
|
|
/// <param name="max">分帧加载的总数量<</param>
|
|
/// <param name="num">一帧调用的帧的数量</param>
|
|
/// <param name="action">具体做什么</param>
|
|
public void AddFPS(int max, int num, Action<int> action)
|
|
{
|
|
int name = id++;
|
|
Coroutine coroutine = StartCoroutine(GetFromInfoList(name, max, num, action));
|
|
dic.Add(name, coroutine);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开始分帧加载
|
|
/// </summary>
|
|
/// <param name="name">协程名称</param>
|
|
/// <param name="max">分帧加载的总数量</param>
|
|
/// <param name="num">一帧调用的帧的数量</param>
|
|
/// <param name="action">具体做什么</param>
|
|
/// <returns></returns>
|
|
IEnumerator GetFromInfoList<T>(int name, List<T> list, int num, Action<T> action)
|
|
{
|
|
int InfoListIndex = 0;
|
|
foreach (T item in list)
|
|
{
|
|
InfoListIndex++;
|
|
action(item);
|
|
if (InfoListIndex % num == 0)
|
|
{
|
|
yield return null; // 在下一帧执行
|
|
}
|
|
}
|
|
StopFPS(name);
|
|
}
|
|
/// <summary>
|
|
/// 开始分帧加载
|
|
/// </summary>
|
|
/// <param name="name">协程名称</param>
|
|
/// <param name="max">分帧加载的总数量</param>
|
|
/// <param name="num">一帧调用的帧的数量</param>
|
|
/// <param name="action">具体做什么</param>
|
|
/// <returns></returns>
|
|
IEnumerator GetFromInfoList(int name, int max, int num, Action<int> 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 移除协程
|
|
/// </summary>
|
|
/// <param name="name"></param>
|
|
private void StopFPS(int name)
|
|
{
|
|
if (dic.ContainsKey(name))
|
|
{
|
|
StopCoroutine(dic[name]);
|
|
dic.Remove(name);
|
|
}
|
|
}
|
|
|
|
}
|