Zephus 发表于 2022-12-7 11:46

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

一、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#代码:
//定义接口

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#脚本
//定义委托

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)
页: [1]
查看完整版本: Unity 热更新 之Lua调用C#中带参方法