1
--EventManager.lua 位于Assets/GameRes/Lua/
local EventManager = {}
local listenerTable = { }
--添加监听 是不是重复监听
EventManager.AddListener = function(eventType, listener,target)
--如果其参数 v 的值为假(nil 或 false), 它就调用 error; 否则,返回所有的参数。
--assert (v [, message])
assert(eventType,'eventType is nil!')
local t = listenerTable[eventType]
if not t then
t = {}
listenerTable[eventType] = t
end
--遇到一样的监听会增加表里面一个数据
t[#t + 1] = {listener = listener , target = target}
end
--触发监听
EventManager.TriggerListener = function(eventType,arg)
--pcall以保护模式调用函数f。 第一个返回值是状态码,当没有错误时,其为真,第二个状态
--码为返回的错误
local ok,errors= pcall(function()
assert(eventType,'eventType is nil!')
local t = listenerTable[eventType]
if t then
for i = #t,1,-1 do --遍历所有同样事件类型
if t[i] then
if t[i].target == nil then
t[i].listener(arg)
else
t[i].listener(t[i].target,arg) --有的需要传递方法自身
end
end
end
end
end)
if not ok then
local errorMessage = "error on troggerListener , type is "..eventType.."\n"..errors
CS.UnityEngine.Debug.LogError(errorMessage)
end
end
EventManager.RemoveListener = function (eventType,listener,target)
assert(eventType,"eventType is nil!")
local t = listenerTable[eventType]
if t then
if target then
for i = 1,#t do
if t[i].target == target and t[i].listener == listener then
table.remove(t,i)
break
end
end
return
end
for i = 1,#t do
if t[i].listener == listener then
table.remove(t,i)
break
end
end
end
end
return EventManager
2
--EventType.lua 位于位于Assets/GameRes/Lua/
local EventType = {}
EventType.Test = 1
EventType.CreateUI = 2
return EventType
3.如何在main.lua调用
--main.lua
local EventManager = require "EventManager"
local EventType = require "EventType"
function Awake()
print("Lua Awake")
EventManager.AddListener(EventType.Test,function(arg) print("Test"..tostring(arg)) end)
end
function Start()
print("Lua Start")
EventManager.TriggerListener(EventType.Test,"6666")
end
--长时间函数
function Update()
--print("Lua Update")
end
function OnDestroy()
print("Lua OnDestory")
end
function SceneLoaded(name)
print("Lua SceneLoaded "..name)
end
function SceneUnloaded(name)
print("Lua SceneUnloaded "..name)
end
function OnApplicationFocus(focus)
print("Lua OnApplicationFocus "..tostring(focus))
end
function OnApplicationPause(pause)
print("Lua OnApplicationPause "..tostring(pause))
end
function OnApplicationQuit()
print("Lua OnApplicationQuit ")
end