应用面:能用像写c#一样,在lua里实现业务功能,更好的理解lua
源码:
c#部分:我用的是xlua,注册方式使用[XLua.LuaCallCSharp],tolua的注册方式自行查找
namespace Game.Scripts.Listener
{
[DisallowMultipleComponent]
[AddComponentMenu("")] // Hide in 'Add Component' menu
[XLua.LuaCallCSharp]
public class StartListenerIL : MonoBehaviour
{
public event Action listeners;
public void AddListener(Action func)
{
listeners += func;
}
public void RemoveListener(Action func)
{
listeners -= func;
}
private void Start()
{
listeners?.Invoke();
}
}
}
namespace Game.Scripts.Listener
{
[DisallowMultipleComponent]
[AddComponentMenu("")] // Hide in 'Add Component' menu
[XLua.LuaCallCSharp]
public class EnableListenerIL : MonoBehaviour
{
public event Action listeners;
public void AddListener(Action func)
{
listeners += func;
}
public void RemoveListener(Action func)
{
listeners -= func;
}
private void OnEnable()
{
listeners?.Invoke();
}
}
}
namespace Game.Scripts.Listener
{
[DisallowMultipleComponent]
[AddComponentMenu("")] // Hide in 'Add Component' menu
[XLua.LuaCallCSharp]
public class DisableListenerIL : MonoBehaviour
{
public event Action listeners;
public void AddListener(Action func)
{
listeners += func;
}
public void RemoveListener(Action func)
{
listeners -= func;
}
private void OnDisable()
{
if (listeners != null)
listeners.Invoke();
}
}
}
namespace Game.Scripts.Listener
{
[DisallowMultipleComponent]
[AddComponentMenu("")] // Hide in 'Add Component' menu
[XLua.LuaCallCSharp]
public class DestroyListenerIL : MonoBehaviour
{
public event Action listeners;
public void AddListener(Action func)
{
listeners += func;
}
public void RemoveListener(Action func)
{
listeners -= func;
}
private void OnDestroy()
{
if(listeners != null)
listeners.Invoke();
}
}
}
namespace Game.Scripts.Listener
{
[DisallowMultipleComponent]
[AddComponentMenu("")] // Hide in 'Add Component' menu
[XLua.LuaCallCSharp]
public class UpdateListenerIL : MonoBehaviour
{
public event Action listeners;
public void AddListener(Action func)
{
listeners += func;
}
public void RemoveListener(Action func)
{
listeners -= func;
}
private void Update()
{
listeners?.Invoke();
}
}
}
以上几个是常用的生命周期函数,后续想添加其他接口,按相同的方式添加代码
Lua部分:
local Helpers = {}
function Helpers.AddEnableListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.EnableListenerIL);
local listener = tr:GetComponent(types);
if listener == nil or listener:Equals(nil) then
listener = tr.gameObject:AddComponent(typeof(types))
end
listener:AddListener(func);
if tr.gameObject.activeInHierarchy and func ~= nil then
func();
end
end
function Helpers.RemoveEnableListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.EnableListenerIL);
local listener = tr:GetComponent(types);
if listener ~= nil then
listener:RemoveListener(func);
end
end
function Helpers.AddDisableListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.DisableListenerIL);
local listener = tr:GetComponent(types);
if listener == nil or listener:Equals(nil) then
listener = tr.gameObject:AddComponent(typeof(types))
end
listener:AddListener(func);
end
function Helpers.RemoveDisableListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.DisableListenerIL);
local listener = tr:GetComponent(types);
if listener ~= nil then
listener:RemoveListener(func);
end
end
function Helpers.AddStartListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.StartListenerIL);
local listener = tr:GetComponent(types);
if listener == nil or listener:Equals(nil) then
listener = tr.gameObject:AddComponent(typeof(types))
end
listener:AddListener(func)
end
function Helpers.RemoveStartListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.StartListenerIL);
local listener = tr:GetComponent(types);
if listener ~= nil then
listener:RemoveListener(func);
end
end
function Helpers.AddDestroyListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.DestroyListenerIL);
local listener = tr:GetComponent(types);
if listener == nil or listener:Equals(nil) then
listener = tr.gameObject:AddComponent(typeof(types))
end
listener:AddListener(func)
end
function Helpers.RemoveDestroyListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.DestroyListenerIL);
local listener = tr:GetComponent(types);
if listener ~= nil then
listener:RemoveListener(func);
end
end
function Helpers.AddUpdateListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.UpdateListenerIL);
local listener = tr:GetComponent(types);
if listener == nil or listener:Equals(nil) then
listener = tr.gameObject:AddComponent(typeof(types))
end
listener:AddListener(func)
end
function Helpers.RemoveUpdateListener(tr, func)
local types = typeof(CS.Game.Scripts.Listener.UpdateListenerIL);
local listener = tr:GetComponent(types);
if listener ~= nil then
listener:RemoveListener(func);
end
end
return Helpers

646

被折叠的 条评论
为什么被折叠?



