xLua中调用泛型方法(以UnityEngine.EventSystems.Execute。。。

更新时间:2023-07-25 19:52:44 阅读: 评论:0

xLua中调⽤泛型⽅法(以UnityEngine.EventSystems.Execute。。。
最近在做⼀个新⼿指引的效果,基本上就是改shader的参数就可以了。但是最让⼈意想不到的是,后⾯还有个点击穿透。让玩家只能点击焦点按钮,C#代码调试成功了,xLua这边重构死活过不去,后来看了眼xLua官⽅FAQ 才解决,话不多说了。上代码。
寿司怎么做好吃local Execute_generic = _generic_method(CS.UnityEngine.EventSystems.ExecuteEvents, 'Execute')
local Execute = Execute_generic(CS.UnityEngine.EventSystems.IPointerClickHandler)
Execute(GameObjectImage, lEventData,CS.UnityEngine.EventSystems.ExecuteEvents.pointerClickHandler)
下⾯是官⽅⽂档的案例代码:
// C#
public static Button GetButton(this GameObject go)
垂钓江湖{
return go.GetComponent<Button>();
}
-- lua
local go = CS.UnityEngine.GameObject.Find("button")
go:GetButton().onClick:AddListener(function()黑发
print('onClick')
end)
上⾯的代码是在C#⾥将泛型⽅法进⾏封装,当然官⽅也建议这么做。在xlua中调⽤也⽐较⽅便,但是我们的项⽬已经发布,为了后续更新不建议改动C#脚本,那就需要⽤到下⾯的代码了。(⾸先xlua版本⼤于2.1.12)
public class GetGenericMethodTest
{
int a =100;
public int Foo<T1, T2>(T1 p1, T2 p2)
{
应征入伍政策Debug.Log(typeof(T1));
Debug.Log(typeof(T2));
Debug.Log(p1);
Debug.Log(p2);
return a;
}
public static void Bar<T1, T2>(T1 p1, T2 p2)
{
Debug.Log(typeof(T1));
Debug.Log(typeof(T2));
Debug.Log(p1);
Debug.Log(p2);
}
}
-- lua
local foo_generic = _generic_method(CS.GetGenericMethodTest, 'Foo')
local bar_generic = _generic_method(CS.GetGenericMethodTest, 'Bar')
local foo = foo_generic(CS.System.Int32, CS.System.Double)
local bar = bar_generic(CS.System.Double, CS.UnityEngine.GameObject)
-
- call instance method
local o = CS.GetGenericMethodTest()
local ret = foo(o, 1, 2) -- 这⾥是实例调⽤,需要传⼀个实例 o
print(ret)
-- call static method道德沦丧>画灯笼简笔画
bar(2, nil) -- 静态⽅法直接传参数
可以看出,xlua提供⼀个反射机制,先构建了⼀个泛型类型 即 foo_generic 和 bar_generic
此时他们的泛型 T1 T2 还没有赋值。然后通过实例化泛型⽅法,同时将T1 T2进⾏赋值,此时⽅法的实例就是 foo 和 bar。然后直接通过实例传参调⽤即可。
需要注意的是,如果是实例⽅法,需要先声明实例,再通过实例进⾏调⽤。foo ⽅法的第⼀个参数即调⽤的实例 也可以使⽤lua语法糖,代码可以改为
local o = CS.GetGenericMethodTest()
local ret = o:foo(1, 2) --- 语法糖,默认传⼊ o
鱼炖豆腐的做法静态函数直接传参数就可以了。
双子座和狮子座本⼈菜鸟⼩⽩,如果写的有什么不对的地⽅,希望⼤家多多与我交流!感激不尽!

本文发布于:2023-07-25 19:52:44,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1096432.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实例   需要   代码   点击   静态   按钮   提供
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图