找回密码
 立即注册
查看: 266|回复: 0

XLua笔记

[复制链接]
发表于 2021-8-15 09:33 | 显示全部楼层 |阅读模式
1、XLua强制类型转换
cast(data,type)
第一个参数是需要强转的对象,第二个参数是目标类型
例如:有一个对象_resData需要强转为C#类型ResourceData。
  1. local _resdata=_data
  2. cast(_resdata, typeof(CS.MapTileResourceData))
复制代码
原因: xlua.cast实现了改功能,LuaEnv.cs文件中初始化了cast
  1. cast = xlua.cast
复制代码
2、XLua调用带泛型函数(通过提供的xlua.get_generic_method方法调用。)
创建一个带泛型的Test函数。
  1. //测试类
  2. public class Test
  3.     {
  4.         private int a = 100;
  5.         //泛型方法
  6.         public int GenericMethodTest<T>(T t)
  7.         {
  8.             Debug.Log(t);
  9.             Debug.Log(typeof(T));
  10.             return a;
  11.         }
  12.     }
复制代码
XLua中代码如下:
  1. //实例化Test类
  2. local test=CS.Test.Test()
  3. //取得泛型方法    CS.Test为命名空间
  4. local testGenericFunc=xlua.get_generic_method(CS.Test.Test,"GenericMethodTest")
  5. //为泛型方法指定类型
  6. local realFunc=testGenericFunc(typeof(CS.System.Int32))
  7. //调用 若泛型方法为静态,则无需传第一个实例参数
  8. realFunc(test,5)
复制代码
  1. local YKApplication_Ins = CS.YoukiaUnity.App.YKApplication.Instance
  2.     local _SceneManagers = xlua.get_generic_method(CS.YoukiaUnity.App.YKApplication, "GetManager")
  3.     local _temp = _SceneManagers(CS.YoukiaUnity.Scene.SceneManager)
  4.     local _SceneManager =_temp(YKApplication_Ins)
复制代码
引用:XLua学习
https://github.com/Tencent/xLua/commit/fa1b6d85557a525c920bef75dda91da6e8e99454
3、值类型强转
原因:Xlua的C#代码中找到一个类RawObject.cs,实现了几个强转的函数。
  1. CS.XLua.Cast.Int32(_finalDamage)
复制代码
4、Xlua重写C#的属性
直接重写get_XXX(),或set_XXX()方法。
C# 中属性的本质,编译成中间语言后是 get、set 两个方法,调用属性实际上是调用 get 或 set 方法。get 对应名为“get_属性名”的方法,set 对应名为“set_属性名"的方法。
5、带有ref out 参数的函数
函数返回值返回  ref  out的值。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 11:43 , Processed in 0.238325 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表