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

Unity 热更新 之Lua调用C#中带参方法

[复制链接]
发表于 2022-12-7 11:46 | 显示全部楼层 |阅读模式
一、C#中可变参数方法

  • C#调用代码
public class LuaCallCshap : MonoBehaviour
{
    LuaEnv env = null;
    void Start()
    {
        env = new LuaEnv();
        env.DoString("require 'LuaCallCsharp'");
    }

    private void OnDestroy()
    {
        env.Dispose();
    }
}

  • C#类代码
public class LuaCallCshap : MonoBehaviour
{
    LuaEnv env = null;
    void Start()
    {
        env = new LuaEnv();
        env.DoString("require 'LuaCallCsharp'");
    }

    private void OnDestroy()
    {
        env.Dispose();
    }
}

  • Lua代码
local IsInvoked = CS.IsInvokedClass
local classObj=IsInvoked()--自动调用父类和子类的构造函数

--测试调用C#方法带有params的方法
local intResult= classObj:Method(1,3,"地体格","测i是的")
print("返回值="..intResult)二、C#结构体

  • C#代码 调用代码同上
//定义结构体
public struct MyStruct
{
    public int x;
    public int y;
}
public class IsInvokedClass
{
    public void Method(MyStruct p)
    {
        Debug.Log(p.x);
        Debug.Log(p.y);
    }
}

  • Lua代码
local IsInvoked = CS.IsInvokedClass
local classObj=IsInvoked()--自动调用父类和子类的构造函数

--测试调用C#方法带有结构体的方法
--定义一个表
myStructTable ={x=1,y=2}
classObj:Method(myStructTable)三、C#接口参数

  • C#代码:
//定义接口
[XLua.CSharpCallLua]
public interface MyInterface
{
    int x { get; set; }
    int y { get; set; }
    void Speak();
}
public class IsInvokedClass
{
    //方法具有接口为参数的
    public void Method(MyInterface p)
    {
        Debug.Log(p.x);
        Debug.Log(p.y);
        p.Speak();
    }
}

  • 在unity中加载一下



  • Lua
local IsInvoked = CS.IsInvokedClass
local classObj=IsInvoked()--自动调用父类和子类的构造函数

--测试调用C#方法带有接口的方法
--定义一个表
myInterfaceTable ={
x=100,
y=200,
Speak=function()
print("lua 中的Speak")
end
}
classObj:Method(myInterfaceTable)四、C#委托参数

  • C#脚本
//定义委托
[XLua.CSharpCallLua]
public delegate void MyDelegate(int num);
public class IsInvokedClass
{
    //方法具有接口为参数的
    public void Method(MyDelegate p)
    {
        //调用委托
        p.Invoke(88);
    }
}

  • 加载



  • Lua脚本
local IsInvoked = CS.IsInvokedClass
local classObj=IsInvoked()--自动调用父类和子类的构造函数

--测试调用C#方法带有委托的方法
--定义函数
muDelegate =function(num)
print("lua 中定义委托方法。参数num="..num);
end
classObj:Method(muDelegate)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-24 16:51 , Processed in 0.149835 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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