90 lines
2.9 KiB
Markdown
90 lines
2.9 KiB
Markdown
#unity/日常积累
|
||
|
||
```lua
|
||
TimerFunc ={
|
||
timerTasks={};--延时任务
|
||
timerLoopTasks={};--延时循环任务
|
||
taskIndex=1;--任务编号
|
||
};
|
||
--设置延时循环函数 id,初次延时,循环后间隔延时,循环时间,循环函数,结束时回调函数
|
||
function TimerFunc:SetDelayLoopFunction(delayTime, delayTime1, loopTime, funcLoop,funcOnFinish)
|
||
if self.timerLoopTasks[self.taskIndex] == nil then
|
||
self.timerLoopTasks[self.taskIndex] = {};
|
||
end
|
||
self.timerLoopTasks[self.taskIndex].startTime=CS.UnityEngine.Time.time+delayTime;--触发时机
|
||
self.timerLoopTasks[self.taskIndex].loopDelay=delayTime1;--每次循环的间隔
|
||
self.timerLoopTasks[self.taskIndex].overTime=CS.UnityEngine.Time.time+loopTime+delayTime;--循环持续时间
|
||
self.timerLoopTasks[self.taskIndex].funcLoop=funcLoop;--循环函数
|
||
self.timerLoopTasks[self.taskIndex].funcOnFinish=funcOnFinish;--结束时回调函数
|
||
self.taskIndex=self.taskIndex+1;
|
||
return self.taskIndex-1;
|
||
end
|
||
--延时函数 id,延时时间,触发方法
|
||
function TimerFunc:SetDelayFunction(delayTime, func)
|
||
if self.timerTasks[self.taskIndex] == nil then
|
||
self.timerTasks[self.taskIndex] = {};
|
||
end
|
||
self.timerTasks[self.taskIndex].func = func;
|
||
self.timerTasks[self.taskIndex].startTime = CS.UnityEngine.Time.time + delayTime;
|
||
self.taskIndex=self.taskIndex+1;
|
||
return self.taskIndex-1;
|
||
end
|
||
--更新
|
||
function TimerFunc:Update()
|
||
for k, v in pairs(self.timerTasks) do
|
||
--满足延时条件 触发
|
||
if v.startTime < CS.UnityEngine.Time.time then
|
||
if v.func~=nil then
|
||
v.func();--延时方法
|
||
end
|
||
self.timerTasks[k]=nil;--回收任务
|
||
end
|
||
end
|
||
for k,v in pairs(self.timerLoopTasks) do
|
||
--过期任务
|
||
if v.overTime < CS.UnityEngine.Time.time then
|
||
if v.funcOnFinish~=nil then
|
||
v.funcOnFinish();--循环方法结束回调
|
||
end
|
||
self.timerLoopTasks[k]=nil;--回收任务
|
||
--有效任务
|
||
else
|
||
--满足触发条件
|
||
if v.startTime < CS.UnityEngine.Time.time then
|
||
if v.funcLoop~=nil then
|
||
v.funcLoop();--循环方法
|
||
end
|
||
v.startTime=v.startTime+v.loopDelay;--设置下一次触发时间
|
||
end
|
||
end
|
||
end
|
||
end
|
||
--撤销任务
|
||
function TimerFunc:Remove(id)
|
||
for k,v in pairs(self.timerTasks) do
|
||
if k==id then
|
||
self.timerTasks[id]=nil;
|
||
return;
|
||
end
|
||
end
|
||
for k,v in pairs(self.timerLoopTasks) do
|
||
if k==id then
|
||
self.timerLoopTasks[id]=nil;
|
||
return;
|
||
end
|
||
end
|
||
end
|
||
--清理
|
||
function TimerFunc:Clear()
|
||
for k, v in pairs(self.timerTasks) do
|
||
self.timerTasks[k] = nil;
|
||
end
|
||
for k, v in pairs(self.timerLoopTasks) do
|
||
self.timerLoopTasks[k] = nil;
|
||
end
|
||
self.taskIndex=1;
|
||
end
|
||
|
||
```
|
||
|
||
![[Pasted image 20220426092658.png]] |