lua搭配Unity實現簡單計時器
阿新 • • 發佈:2020-07-18
lua配合Unity實現簡單計時器
注意:這裡是無法直接執行使用的,需要搭配具體的專案框架,在Unity的Update中每幀呼叫。
(這裡主要只是提供大概程式碼和思路)
這裡使用的UnityEngine.Time.deltaTime,其實就是Unity中的Time.deltaTime
TimeSystem.lua
--class為之前寫的面向物件類 TimeSystem = class() --單例 TimeSystem.Instance = function() if (TimeSystem.m_instance == nil) then TimeSystem.m_instance = TimeSystem.new(); end return TimeSystem.m_instance end function TimeSystem:ctor() self.tempTime = 0 --事件池 self.TimerDict = {} self.timerIndex = 1 end --引數:時間間隔、迴圈幾次、回撥函式、回撥物件、回撥引數 function TimeSystem:AddTimer(delta,loopTimes,callBack,obj,param) if callBack==nil then return end self.TimerDict[self.timerIndex] = {leftTime = delta,delta = delta,loopTimes = loopTimes,callBack = callBack,obj = obj,param = param,timerIndex = self.timerIndex} self.timerIndex = self.timerIndex + 1; return self.timerIndex - 1 end function TimeSystem:RemoveTimer(timerIndex) if timerIndex==nil then return end self.TimerDict[timerIndex] = nil end --讓這個函式被Unity的Update每幀呼叫 --timeInterval:時間間隔 --每幀都呼叫函式,但不是每幀都遍歷一次字典,不然太耗效能 --可以設定為0.1,一般延遲呼叫時間也不會太短 function TimeSystem:Update(timeInterval) self.tempTime = self.tempTime + UnityEngine.Time.deltaTime; if self.tempTime < timeInterval then return else self.tempTime = 0 end --遍歷字典,更新剩餘時間,時間到了就執行函式 for k,v in pairs(self.TimerDict) do v.leftTime = v.leftTime - timeInterval if v.leftTime <= 0 then if v.obj ~= nil then if v.callBack then v.callBack(v.obj,v.param) end else if v.callBack then v.callBack(v.param) end end v.loopTimes = v.loopTimes - 1 v.leftTime = v.delta if v.loopTimes <= 0 then v.callBack = nil self:RemoveTimer(v.timerIndex) end end end end function TimeSystem:Clear() self.TimerDict = {} end
Test.lua
--每隔1.5s執行一次輸出,總共執行兩次
TimeSystem.GetInstance():AddTimer(1.5,2,
function()
print("在時間" .. os.time() .."執行了")
end
,self
);