Unity 函数延迟调用
来源:互联网 发布:娇喘合集 网络歌手 编辑:程序博客网 时间:2024/05/17 06:15
using UnityEngine;using System.Collections;using System.Collections.Generic;using System;public class InvokManager : Singleton<InvokManager> { private List<MyCallLate> callList = new List<MyCallLate>(); private List<MyCallLate> tempCallList = new List<MyCallLate>(); /// <summary> /// 添加下帧执行方法 /// </summary> /// <param name="handle">执行的方法</param> /// <param name="delayTime">延迟时间</param> public static void Add(Action handle,float delayTime) { Instance.add(handle,delayTime); } private void add(Action handle, float delayTime) { for (int i = 0; i < callList.Count; i++) { if (callList[i].Equals(handle)) { return; } } MyCallLate callLate = new MyCallLate(handle,delayTime); callList.Add(callLate); if (callList.Count ==1) { MyTickManager.AddUpdate(Invoking); } } public static void Add(Action<object> handle, float delayTime,object data) { Instance.add(handle, delayTime,data); } private void add(Action<object> handle, float delayTime, object data) { for (int i = 0; i < callList.Count; i++) { if (callList[i].Equals(handle)) { return; } } MyCallLate callLate = new MyCallLate(handle, delayTime,data); callList.Add(callLate); if (callList.Count == 1) { MyTickManager.AddUpdate(Invoking); } } public static void Remove(Action handle) { Instance.remove(handle); } private void remove(Action handle) { for (int i = 0; i < callList.Count; i++) { if (callList[i].handle.Equals(handle)) { callList.Remove(callList[i]); i--; } } } public static void Remove(Action<object> handle,object data) { Instance.remove(handle,data); } private void remove(Action<object> handle, object data) { for (int i = 0; i < callList.Count; i++) { if (callList[i].handleAction.Equals(handle)) { callList.Remove(callList[i]); i--; } } } private void Invoking() { tempCallList.Clear(); tempCallList.InsertRange(0,callList); float time = Time.time; for (int i = 0; i < tempCallList.Count; i++) { MyCallLate task = tempCallList[i]; if (task.callTime == time) { continue; } float runTime = task.callTime + task.delayTime; if (time<runTime) { continue; } task.MyInvoking(); callList.Remove(task); } if (tempCallList.Count == 0) { MyTickManager.RemoveUpdate(Invoking); } } // 等同于 Invoke private class MyCallLate { public float callTime; public float delayTime; public Action handle; public Action<object> handleAction; public object data; public MyCallLate(Action handle, float delayTime) { this.callTime = Time.time; this.handle = handle; this.delayTime = delayTime; } public MyCallLate(Action<object> handleAction, float delayTime,object data) { this.callTime = Time.time; this.handleAction = handleAction; this.delayTime = delayTime; this.data = data; } public void MyInvoking() { if (handle != null) handle(); if (handleAction != null) handleAction(data); } }}
测试:
public class App : MonoBehaviour { void OnEnable() { InvokManager.Add(CalculateTime,3); } void Update () { MyTickManager.Instance.MyUpdate(); } public void CalculateTime() { Debug.Log("CalculateTime"); } void OnDisable() { MyTickManager.RemoveUpdate(CalculateTime); }}
Singleton< T > 单例
http://blog.csdn.net/microsoftmsdnnet/article/details/48178405
MyTickManager Update管理类
http://blog.csdn.net/microsoftMSDNNET/article/details/52399033
0 0
- Unity 函数延迟调用
- Unity延迟调用
- unity 调用android函数
- unity 调用android函数
- unity 调用android函数
- Unity调用其他函数
- unity函数调用顺序
- unity函数调用顺序
- arm汇编如何调用函数,如何写延迟函数
- C/C++ 获取系统时间,系统延迟函数调用
- 延迟函数
- [Mark Unity]MonoBehavior里面基本函数调用
- unity。。。。所有函数调用,执行顺序
- 【Unity】动态调用其他脚本的函数
- 很详细的unity脚本函数调用
- Unity学习笔记4-Unity中默认函数调用顺序
- Unity时间管理类,用来做一些方法的延迟调用
- iOS延迟调用和取消延迟调用
- ObObjective-C++环境配置
- libevent2.0源码学习二:通用数据结构
- Java之建造者模式(Builder Pattern)
- 从相机相册获取图片裁剪后用于评论晒图或更换背景图
- 地图投影知识系列(一)---世界地图投影
- Unity 函数延迟调用
- 文章标题
- 强制横屏的一种实现 ios
- Python爬虫urllib2笔记(二)
- Python中使用matPlotlib绘图-曲线图、柱状图、散列点
- normalizr 学习笔记 --- node.js开发
- 思科路由器防火墙如何配置的方法
- iOS应用跳转至app store 评分页(包括iOS7前后两种)
- 后缀数组 POJ 3693 && hdu 2459 Maximum repetition substring