IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity Xlua 之 C#调用Lua(三) -> 正文阅读

[游戏开发]Unity Xlua 之 C#调用Lua(三)

Unity Xlua 之 C#调用Lua(三)

一.List和Dictionary映射table

public class Lesson06_LuaListDic : MonoBehaviour
{
    private void Start()
    {
        LuaMgr.GetInstance().Init();
        LuaMgr.GetInstance().LoadFile("Main");
        var globalTable = LuaMgr.GetInstance().Global;
        var testList1 = globalTable.Get<List<int>>("TestList1");
        foreach (var item in testList1)
            Debug.Log(item);
        var testList2 = globalTable.Get<List<object>>("TestList2");
        foreach (var item in testList2)
            Debug.Log(item);
        var testDic1 = globalTable.Get<Dictionary<string, int>>("TestDic1");
        foreach (var keyPair in testDic1)
            Debug.Log($"{keyPair.Key},{keyPair.Value}");
        var testDic2 = globalTable.Get<Dictionary<object, object>>("TestDic2");
        foreach (var keyPair in testDic2)
            Debug.Log($"{keyPair.Key},{keyPair.Value}");
    }
}
TestList1 = {1,2,3,4,5,6}
TestList2 = {"123",true,1.2,333}

TestDic1 = {
    ["1"] = 1,
    ["2"] = 2,
    ["3"] = 3,
    ["4"] = 4
}
TestDic2 = {
    ["132"] = "zzs",
    [true] = false,
    [1] = 333,
    [false] = "sss"
}

二.类映射table

public class CSCallLua
{
    public int testInt;
    public string testString;
    public bool testBool;
    public UnityAction testFunc;
    public void Test()
    {
        Debug.Log("Test");
    }
    public CSCallInLua TestInCls;
}


public class CSCallInLua
{
    public int testInt;
}

public class Lesson07_LuaClass : MonoBehaviour
{
    private void Start()
    {
        LuaMgr.GetInstance().Init();
        LuaMgr.GetInstance().LoadFile("Main");

        var globalTable = LuaMgr.GetInstance().Global;
        var callLua = globalTable.Get<CSCallLua>("TestCls");
        Debug.Log(callLua.testInt);
        Debug.Log(callLua.testString);
        Debug.Log(callLua.testBool);
        Debug.Log(callLua.TestInCls.testInt);
        callLua.testFunc?.Invoke();
    }
}
TestCls = {
    testInt = 2,
    testString = "zzs",
    testFloat = 1.2,
    testBool = false,
    testFunc = function ()
        print("类中的方法")
    end,
    TestInCls = {
        testInt = 333
    }
}

三.接口映射table

只有接口是引用传递,类和默认的int,float,string等都是值传递
需要打上[CSharpCallLua]标签,并且重新生成代码

[CSharpCallLua]
public interface ICSCallInterface
{
    int testInt { get; set; }
    string testString { get; set; }
    bool testBool { get; set; }
    void testFunc();
    CSCallLuaInterface testInInterface { get; set; }
}

public class CSCallLuaInterface
{
    public int testInt;
}

public class Lesson08_LuaInterface : MonoBehaviour
{
    private void Start()
    {
        LuaMgr.GetInstance().Init();
        LuaMgr.GetInstance().LoadFile("Main");

        var globalTable = LuaMgr.GetInstance().Global;
        var csCall = globalTable.Get<ICSCallInterface>("TestInterface");
        Debug.Log(csCall.testInt);
        Debug.Log(csCall.testString);
        Debug.Log(csCall.testBool);
        Debug.Log(csCall.testInInterface.testInt);
        csCall.testFunc();

        csCall.testInInterface.testInt = 999;
        csCall.testString = "wy";
        
        Debug.Log("=======================");
        csCall = globalTable.Get<ICSCallInterface>("TestInterface");
        Debug.Log(csCall.testInInterface.testInt);
        Debug.Log(csCall.testString);
        //**可以看出只有接口是引用传递,类和默认的int,float,string等都是值传递**
    }
}
TestInterface = {
    testInt = 1,
    testString = "zzs",
    testFloat = 1.22,
    testBool = false,
    testFunc = function ()
        print("接口中的方法")
    end,
    testInInterface = {
        testInt = 666
    }
}

四.LuaTable映射table

LuaTable尽量不要使用,影响性能,获取的LuaTable如果不手动释放或者不CG将常驻内存

public class Lesson09_LuaTable : MonoBehaviour
{
    private void Start()
    {
        LuaMgr.GetInstance().Init();
        LuaMgr.GetInstance().LoadFile("Main");
        var globalTable = LuaMgr.GetInstance().Global;
        var table = globalTable.Get<LuaTable>("TestInterface");
        Debug.Log(table.Get<int>("testInt"));
        Debug.Log(table.Get<string>("testString"));
        Debug.Log(table.Get<float>("testFloat"));
        table.Get<UnityAction>("testFunc")?.Invoke();
        var table2 = table.Get<LuaTable>("testInInterface");
        Debug.Log(table2.Get<int>("testInt"));
        //LuaTable尽量不要使用,影响性能,获取的LuaTable如果不手动释放或者不CG将常驻内存
        table.Dispose();
        table2.Dispose();
    }
}
TestInterface = {
    testInt = 1,
    testString = "zzs",
    testFloat = 1.22,
    testBool = false,
    testFunc = function ()
        print("接口中的方法")
    end,
    testInInterface = {
        testInt = 666
    }
}

五.C#调用Lua练习(用lua实现递归查找子物体)

function Find(rootTrans,name,type)
    if rootTrans.name == name then
        return rootTrans:GetComponent(type)
    end
    local target = nil
    for i = 0, rootTrans.childCount - 1 do
        target = Find(rootTrans:GetChild(i),name,type)
        if target~=nil then
            break
        end
    end
    return target
end
public class Lesson10_LuaFindChild : MonoBehaviour
{
    private void Start()
    {
        LuaMgr.GetInstance().Init();
        LuaMgr.GetInstance().LoadFile("FindChild");

        var globalTable = LuaMgr.GetInstance().Global;
        var findFunc = globalTable.Get<Func<Transform,string,Type,Transform>>("Find");
        var t = findFunc(transform, "Test", typeof(Transform));
        Debug.Log(t.name);
    }
}
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:53:21  更:2022-03-16 22:54:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 16:53:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码