XLua框架搭建——类型导出与黑名单

本文介绍了如何在XLua框架中进行类型导出和设置黑名单。建议在单独的配置文件ExampleGenConfig.cs中管理导出标签,以实现对C#类的Lua调用。同时,详细讨论了Dotween的导出示例,并强调了黑名单配置在打包过程中的重要性,以避免报错。官方提供的ExampleGenConfig.cs包含了常见需要屏蔽的类,遇到问题时可更新或自定义配置。

经过前面的配置,应该可以正常跑Lua代码了,但是要想在lua中调用C#的代码,一般要生成相应的wrap文件,xlua通过打标签的方式来进行实现。

官方建议不要在类里面打标签,而是统一到一个文件里,提供了示例代码ExampleGenConfig.cs,统一写在一个文件里,如果要配置同一个命名空间下的所有类进行导出,比如UGUI类,可以通过如下代码直接遍历取得

[LuaCallCSharp]
    public static List<Type> LuaCallCSharp
    {
        get
        {
            List<Type> list = Assembly.Load("UnityEngine.UI").GetExportedTypes().Concat(customTypes)
                 .Where(type => !type.IsGenericTypeDefinition)//去除泛型
                .Where(type => !type.IsNested)//去除嵌套类型
                .Where(type => !isExcluded(type)).ToList();
            return list;
        }
    }

以及Dotween的导出代码

    [ReflectionUse]
    [LuaCallCSharp]
    private static List<Type> doTweenTypes = new List<Type>()
    {
        //DOTween
        typeof(DG.Tweening.AutoPlay),
        typeof(DG.Tweening.AxisConstraint),
        typeof(DG.Tweening.Ease),
        typeof(DG.Tweening.LogBehaviour),
        typeof(DG.Tweening.LoopType),
        typeof(DG.Tweening.PathMode),
        typeof(DG.Tweening.PathType),
        typeof(DG.Tweening.RotateMode),
        typeof(DG.Tweening.ScrambleMode),
        typeof(DG.Tweening.TweenType),
        typeof(DG.Tweening.UpdateType),

        typeof(DG.Tweening.DOTween),
        typeof(DG.Tweening.DOVirtual),
        typeof(DG.Tweening.EaseFactory),
        typeof(DG.Tweening.Tweener),
        typeof(DG.Tweening.Tween),
        typeof(DG.Tweening.Sequence),
        typeof(DG.Tweening.TweenParams),
        typeof(DG.Tweening.Core.ABSSequentiable),

        typeof(DG.Tweening.Core.TweenerCore<Vector3, Vector3, DG.Tweening.Plugins.Options.VectorOptions>),

        typeof(DG.Tweening.TweenCallback),
        typeof(DG.Tweening.TweenExtensions),
        typeof(DG.Tweening.TweenSettingsExtensions),
        typeof(DG.Tweening.ShortcutExtensions),
        typeof(DG.Tweening.ShortcutExtensions43),
        typeof(DG.Tweening.ShortcutExtensions46),
        typeof(DG.Tweening.ShortcutExtensions50),
    };

说到相关配置,xlua下还有一个很重要的配置是黑名单,具体配置方式参考官方文档《Xlua的配置》

如果你不要生成一个类型的一些成员的适配代码,你可以通过这个配置来实现。
标签方式比较简单,对应的成员上加就可以了。
由于考虑到有可能需要把重载函数的其中一个重载列入黑名单,配置方式比较复杂,类型是List<List<string>>,对于每个成员,在第一层List有一个条目,第二层List是个string的列表,第一个string是类型的全路径名,第二个string是成员名,如果成员是一个方法,还需要从第三个string开始,把其参数的类型全路径全列出来。
例如下面是对GameObject的一个属性以及FileInfo的一个方法列入黑名单:
[BlackList]
public static List<List<string>> BlackList = new List<List<string>>()  {
    new List<string>(){"UnityEngine.GameObject", "networkView"},
    new List<string>(){"System.IO.FileInfo", "GetAccessControl", "System.Security.AccessControl.AccessControlSections"},
};

这个如果不配置,在平时操作中不会有问题,但是打包时会报错,QQ群里经常有人提问相关问题,官方目前提供的ExampleGenConfig.cs代码已经将大部分会出现的报错需要加进黑名单的都已经加进去了,如果还有相关问题,可以查找git上最新的ExampleGenConfig.cs替换自己项目里的文件,如果还不能解决,则需要自己按上面的方法手动配置相关黑名单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值