首先:C# 委托与事件 作为基础 https://blog.csdn.net/icebergliu1234/article/details/81260175
using UnityEngine;
using System;
using System.Collections.Generic;
using LuaInterface;
public class TestDelegate: MonoBehaviour
{
private string script =
@"
function DoClick1(go)
print('click1 gameObject is '..go.name)
end
function DoClick2(go)
print('click2 gameObject is '..go.name)
end
function AddClick1(listener) --添加点击事件
if listener.onClick then
listener.onClick = listener.onClick + DoClick1
else
listener.onClick = DoClick1
end
end
function AddClick2(listener)
if listener.onClick then
listener.onClick = listener.onClick + DoClick2
else
listener.onClick = DoClick2
end
end
function SetClick1(listener) --设置点击事件
if listener.onClick then
listener.onClick:Destroy()
end
listener.onClick = DoClick1
end
function RemoveClick1(listener) --移除点击事件
if listener.onClick then
listener.onClick = listener.onClick - DoClick1
else
print('empty delegate')
end
end
function RemoveClick2(listener)
if listener.onClick then
listener.onClick = listener.onClick - DoClick2
else
print('empty delegate')
end
end
--测试重载问题
function TestOverride(listener)
listener:SetOnFinished(TestEventListener.OnClick(DoClick1))
--委托类型(参数列表) 即可在lua中创建一个新的委托变量
--TestEventListener.OnClick是委托类型
listener:SetOnFinished(TestEventListener.VoidDelegate(DoClick2))
end
function TestEvent()
print('this is a event')
end
function AddEvent(listener) --添加事件, TestEvent转成了需要的delegate类型
listener.onClickEvent = listener.onClickEvent + TestEvent
end
function RemoveEvent(listener) --移除事件
listener.onClickEvent = listener.onClickEvent - TestEvent
end
local t = {name = 'byself'}
function t:TestSelffunc()
print('callback with self: '..self.name)
end
function AddSelfClick(listener)
if listener.onClick then
listener.onClick = listener.onClick + TestEventListener.OnClick(t.TestSelffunc, t)
else
listener.onClick = TestEventListener.OnClick(t.TestSelffunc, t)
end
end
function RemoveSelfClick(listener)
if listener.onClick then
listener.onClick = listener.onClick - TestEventListener.OnClick(t.TestSelffunc, t)
else
print('empty delegate')
end
end
";
LuaState state = null;
TestEventListener listener = null;
LuaFunction SetClick1 = null;
LuaFunction AddClick1 = null;
LuaFunction AddClick2 = null;
LuaFunction RemoveClick1 = null;
LuaFunction RemoveClick2 = null;
LuaFunction TestOverride = null;
LuaFunction RemoveEvent