Tolua使用笔记六:在lua中操作C#的委托事件与在lua中对Unity的GameObject的操作

案例十一:

该案例主要讲解的是再Unity中对于C#中的委托的一些操作的方法

相比之前的一些例子,如果细心完整的看下来,会发现较开始的例子,这个例子算是比较复杂的了

核心代码就不贴了,太长了,如果没有经验,直接看这个例子,可能你已经晕在这里了,现在我就开始为大家细细的解析这样一篇代码

先从类TestEventListener开始说起,这是一个例子作者自己封装的一个类,里面包含了2种类型的委托和一些委托事件的变量和一些基础的方法

public class TestEventListener : MonoBehaviour
{
    public delegate void VoidDelegate(GameObject go);
    public delegate void OnClick(GameObject go);    
    public OnClick onClick = delegate { };

    public event OnClick onClickEvent = delegate { };    
    
    public void SetOnFinished(OnClick click)
    {
        Debugger.Log("SetOnFinished OnClick");
    }
    
    public void SetOnFinished(VoidDelegate click)
    {
        Debugger.Log("SetOnFinished VoidDelegate");
    }

    [NoToLuaAttribute]
    public void OnClickEvent(GameObject go)
    {
        onClickEvent(go);
    }
}
这里大家先留下一个概念,后面会用到这个类,然后大家回到脚本TestDelegate这边来,这便是这个例子的入口类

按照惯例,作者一如既往的在Awake里面就几乎做完了所有的基本加载操作,我们都的时候也都是从这里开始:

    void Awake()
    {               
        state = new LuaState();
        state.Start();
        LuaBinder.Bind(state);   //加载基本的Warp文件
        Bind(state);

        state.LogGC = true;
        state.DoString(script);
        GameObject go = new GameObject("TestGo");
        listener = (TestEventListener)go.AddComponent(typeof(TestEventListener));

        SetClick1 = state.GetFunction("SetClick1");
        AddClick1 = state.GetFunction("AddClick1");
        AddClick2 = state.GetFunction("AddClick2");
        RemoveClick1 = state.GetFunction("RemoveClick1");
        RemoveClick2 = state.GetFunction("RemoveClick2");
        TestOverride = state.GetFunction("TestOverride");
        AddEvent = state.GetFunction("AddEvent");
        RemoveEvent = state.GetFunction("RemoveEvent");        
    }
首先自然是创建lua虚拟机,然后调用 state.Start() 为虚拟机加载一些标准库。

然后则是使用LuaBinder.Bind(LuaState  state) 为该虚拟机中加载一些基本的class类型,就是之前在CustomSetting中添加并Warp的类型

之后的Bind()函数则是为lua虚拟机加载一些该例子特有的类型,平时我们完全可以不通过该方法添加,直接在CustomSetting中添加即可。

然后就是编译读取下面的lua脚本

            function DoClick1(go)                
                print('click1 gameObject is '..go.name)                    
            end

            function DoClick2(go)                
                print('click2 gameObject is '..go.name)                              
            end                       

            function AddClick1(listener)       --添加点击事件DoClick1
                if li
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值