经过前面的配置,应该可以正常跑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替换自己项目里的文件,如果还不能解决,则需要自己按上面的方法手动配置相关黑名单。
本文介绍了如何在XLua框架中进行类型导出和设置黑名单。建议在单独的配置文件ExampleGenConfig.cs中管理导出标签,以实现对C#类的Lua调用。同时,详细讨论了Dotween的导出示例,并强调了黑名单配置在打包过程中的重要性,以避免报错。官方提供的ExampleGenConfig.cs包含了常见需要屏蔽的类,遇到问题时可更新或自定义配置。

1245

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



