Unity之简易任务队列TaskQueue
来源:互联网 发布:网络招聘怎么写 编辑:程序博客网 时间:2024/06/05 22:36
任务队列
该功能包括两个类:Task任务类,TaskQueue任务队列类
其中TaskQueue负责:
1、开始任务
2、添加任务
3、清空任务
4、开始任务回调
5、完成队列中所有任务回调
6、下一个任务
7、当前任务进度
8、队列存储所有任务
其中Task类代码如下:
using System;using System.Collections;using System.Collections.Generic;public class Task { //任务名 private string m_TaskName; public string TaskName { set { m_TaskName = value; } get { return m_TaskName; } } //任务具体内容,外部传入 public Action Work; public Task(Action work, string taskName = "defaultTaskName") { this.Work = work; this.m_TaskName = taskName; }}
TaskQueue类代码如下:
using System;using System.Collections;using System.Collections.Generic;using UnityEngine;public class TaskQueue { //构造函数 public TaskQueue() { m_TaskQueue = new Queue<Task>(); m_TasksNum = 0; } //1、添加任务 public void AddTask(Task task) { m_TaskQueue.Enqueue(task); } public void AddTask(Action work) { Task task = new Task(work); m_TaskQueue.Enqueue(task); } //2、开始任务 public void Start() { //获取任务队列的总任务数 m_TasksNum = m_TaskQueue.Count; if (OnStart != null) { OnStart(); } NextTask(); } //3、清空任务 public void Clear() { m_TaskQueue.Clear(); m_TasksNum = 0; } //4、开始任务回调 public Action OnStart = null; //5、完成所有任务回调 public Action OnFinish = null; //6、下一个任务 private void NextTask() { if (m_TaskQueue.Count > 0) { Task task = m_TaskQueue.Dequeue(); task.Work(); NextTask(); } else { if (OnFinish != null) { OnFinish(); } } } //7、当前任务进度 public float TaskProcess { get { return 1 - m_TaskQueue.Count * 1.0f / m_TasksNum; } } //8、任务队列总任务量 private int m_TasksNum = 0; //9、任务队列 private Queue<Task> m_TaskQueue;}
然后写一个test脚本挂在相机上,测试前面的代码:
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Test : MonoBehaviour { void Start () { TaskQueue taskQueue = new TaskQueue(); taskQueue.OnStart = () => { Debug.Log("OnStart"); }; taskQueue.OnFinish = () => { Debug.Log("OnFinish"); }; taskQueue.AddTask(Task1); taskQueue.AddTask(Task2); taskQueue.Start(); } private void Task1() { Debug.Log("Task1"); } private void Task2() { Debug.Log("Task2"); }}
执行结果如下图:
该任务队列写的比较简单,后期会拓展,敬请期待。
以上知识分享,如有错误,欢迎指出,共同学习,共同进步。
阅读全文
0 0
- Unity之简易任务队列TaskQueue
- UtilBox(ub)基础组件 -- 并发任务队列Taskqueue/TaskDispatcher (一)
- Unity简易数据库之Sqlite
- Unity之简易定时器Timer
- php之任务队列
- 解决方案之任务队列
- node.js任务队列简易版实现(基于Promise)
- 异步任务执行之-队列
- Timer 源码解读 (2) TaskQueue 最小堆实现的优先队列
- Python操作Reids之任务队列
- 2016蓝桥杯假期任务之《黄金队列》
- Django之celery分布式异步任务队列
- ceilometer监控源码分析之任务队列
- Linux内核工作队列之任务执行
- Android实现简易轻量下载器:单线程任务队列
- 任务队列
- 任务队列
- 任务队列
- Python字符串相似度检测
- 使用Pytohn从MongoDB中提取文档相关链接学习
- 机器学习-----之KNN近邻算法(python3)
- 矩形覆盖
- Spring MVC怎么获取request的请求参数
- Unity之简易任务队列TaskQueue
- 解决:下载的项目链接到本地数据库
- shell递归遍历目录
- 优化CNNs--量化方法进展介绍
- 【android】简易发短信软件
- 简单的几种请求实现(retrofit由于时间问题,下次补上)
- STM32 复位及时钟 应用总结(1)
- Java--JDK的安装与配置、安装Eclipse
- poj 1099 Square Ice