首页 > 编程语言 >xlua - lua调用c#函数

xlua - lua调用c#函数

时间:2024-02-29 23:13:13浏览次数:16  
标签:obj filePath c# xlua Test5Obj lua LuaEnv public

c# 部分

public class Test5Obj
{
    public int i;
    private string str;

    public Test5Obj() { }

    public void PrintInt()
    {
        Debug.Log($"c# PrintInt:{i}");
    }

    public void PrintStr()
    {
        Debug.Log($"c# PrintStr:{str}");
    }

}

 

public class Test5 : MonoBehaviour
{
    private LuaEnv m_LuaEnv;

    void Start()
    {
        m_LuaEnv = new LuaEnv();
        m_LuaEnv.AddLoader((ref string filePath) =>
        {
            filePath = filePath.Replace('.', '/');
            filePath = $"Assets/{filePath}.lua.txt";
            var txtAsset = AssetDatabase.LoadAssetAtPath<TextAsset>(filePath);
            return Encoding.UTF8.GetBytes(txtAsset.text);
        });

        m_LuaEnv.Global.Set("Test5MonoInst", this);
        m_LuaEnv.DoString("require('Lua.Test5')");
    }

    void OnDestroy()
    {
        if (null != m_LuaEnv)
            m_LuaEnv.Dispose();
    }

    public void DoPrint(Test5Obj obj)
    {
        obj.PrintInt();
        obj.PrintStr();
    }

}

lua脚本:

c#函数参数为class或struct时,如果lua提供的参数值为table,xlua会利用table来创建class或struct对象(所有public field会用table的同名字段初始化)

Test5MonoInst:DoPrint({ i = 5, str = "abc" }) --i为public字段, 会被初始化; str为private字段, 不会被初始化

 

lua脚本:

table的函数,默认不会覆盖掉class或stuct的函数

 

local Test5Obj = {}
Test5Obj.__index = Test5Obj

function Test5Obj.new()
    local obj = { i = 6, str = "def" }
    setmetatable(obj, Test5Obj)
    return obj
end

function Test5Obj:PrintInt()
    print("PrintInt")
end

function Test5Obj:PrintStr()
    print("PrintStr")
end


local obj = Test5Obj.new()
Test5Mono:DoPrint(obj)

 


 

标签:obj,filePath,c#,xlua,Test5Obj,lua,LuaEnv,public
From: https://www.cnblogs.com/sailJs/p/18037410

相关文章

  • LWIP RAW接口TCP与UDP部分函数解析
    RAWTCP接口tcp_input()函数voidtcp_input(structpbuf*p,structnetif*inp) --->staticerr_ttcp_process(structtcp_pcb*pcb) --->staticvoidtcp_receive(structtcp_pcb*pcb) --->>TCP_EVENT_RECV(pcb,recv_data,ERR_OK,err);//调用用户注册......
  • Huggingface初上手即ERNIE-gram句子相似性实战
    大模型如火如荼的今天,不学点语言模型(LM)相关的技术实在是说不过去了。只不过由于过往项目用到LM较少,所以学习也主要停留在直面——动眼不动手的水平。Huggingface(HF)也是现在搞LM离不开的工具了。出于项目需要,以及实践出真知的想法,在此记录一下第一次使用HF和微调ERNIE-gram的过程......
  • ABC238 复盘
    ABC238复盘[ABC238A]ExponentialorQuadratic思路解析通过“指数爆炸”的特点可以发现当\(n\ge5\)或\(n=1\)时\(2^n\)是大于\(n^2\)的,所以一个if即可code#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; cin>>n; if(n>=5||n==......
  • [ABC238F] Two Exams 题解
    [ABC238F]TwoExams题解思路解析这题很麻烦,因为有两个维度。所以可以想到先按照第一维排序,这样就不需要考虑第二维的问题。其次再发现数据范围小,可以想到能用dp做,接下来就考虑如何dp。首先我们要知道我们遍历到了第几个公民,同时还要知道还剩下几个代表名额,同时我们还需要思......
  • Python用RNN循环神经网络:LSTM长期记忆、GRU门循环单元、回归和ARIMA对COVID
    原文链接:http://tecdat.cn/?p=27042原文出处:拓端数据部落公众号 该数据根据世界各国提供的新病例数据提供。  获取时间序列数据  df=pd.read_csv("C://global.csv")探索数据此表中的数据以累积的形式呈现,为了找出每天的新病例,我们需要减去这些值 ......
  • 94. 二叉树的中序遍历c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/voidinorder(structTre......
  • 145. 二叉树的后序遍历c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*//***Note:Thereturnedarraymustbemalloced,assumecallercallsfree().*/voidpostorder(structT......
  • P8085 [COCI2011-2012#4] KRIPTOGRAM 题解
    P8085[COCI2011-2012#4]KRIPTOGRAM题解本文原发布于2024-02-07洛谷题库P8085[COCI2011-2012#4]KRIPTOGRAM题解区,现于2024-2-29转载至博客园思路解析这道题目的主要难点在于如何判断明文中形如\(\texttt{abcb}\)的子串可以和密文\(\texttt{bcac}\)匹配,因为如果......
  • 使用Umi-OCR进行本地OCR文字识别
    在GitHub上看到了一个好用的OCR工具Umi-OCR,不仅支持批量导入图片、PDF文档识别而且开源免费,还能够在本地离线运行。可以说是为某些不适宜导入在线OCR应用的文档以及大体量本地OCR需求量身定做的软件。(顿时感觉自己的白描白买了)软件在线提供两种版本下载,区别在于一种内置的识别引......
  • ARC161F
    题面给定一张含\(n\)个点,\(nk\)条边的图\(G=(V,E)\),判断是否满足\(\forallX\subsetneqqV,X\neq\varnothing\),\(X\)导出子图的边数\(\div\)\(|X|\)\(<k\)。\(nk\le5\times10^4\)。题解首先要发现这是一个最大权闭合子图的问题,对于一条边\((x,y)\),其贡献为\(......