toLua学习笔记十——lua调用C#的类

17 篇文章 4 订阅

toLua访问C#的类,固定套路 命名空间.类名,比如GameObject,在lua中调用就是UnityEngine.GameObject。
1、通过C#实例化一个对象,因为lua中没有new,所以我们直接使用类名()来实例化对象。

local obj1 = UnityEngine.GameObject()
local obj2 = UnityEngine.GameObject("Master_Xue")

2、在使用中,为了方便实用并且节约性能,我们通常定义全局变量来存储我们C#中的类

GameObject = UnityEngine.GameObject

使用方式如下:

local obj3 = GameObject("Master_Xue3")

3、类中的静态对象都可以通过.来调用,静态对象的成员变量也是直接对象.属性的方式来获取。

local obj4 = GameObject.Find("Master_Xue")
print(obj4.transform.position.x)

4、需要注意的是,部分类例如Debug默认使用会报错,因为我们没有把他们加入到CustomSetting文件中,
在使用时,需要将其加入到CustomSetting中的BindType[] customTypeList中。

_GT(typeof(Debug)), 

之后点击lua->Generate all生成文件之后即可正常使用

Debug = UnityEngine.Debug
Debug.Log(obj4.transform.position.x)

5、如果要使用成员方法,一定要用:

Vector3 = UnityEngine.Vector3
obj4.transform:Translate(Vector3.right)
Debug.Log(obj4.transform.position.x)

6、继承了Mono的类不能直接new的,通过Gameobject的Addcomponent方法添加脚本,同样需要将其加入到CustomSetting中的BindType[] customTypeList中。

local obj5 = GameObject("加脚本测试")
obj5:AddComponent(typeof(LuaCallCSharp))

7、没有继承Mono的类,依然需要将其加入到CustomSetting中的BindType[] customTypeList中。

public class Test{
    public void Speak(string str){
        Debug.Log("Test:"+str);
    }
}

namespace Master_Xue{
    public class Test2{
        public void Speak (string str){
            Debug.Log("Test2:"+str);
        }
    }
}
local t1 = Test()
t1:Speak("t1说话")

local t2 = Master_Xue.Test2()
t2:Speak("t2说话")
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tolua++是一个将C/C++代码导出到Lua的工具,它可以将C/C++代码转换成Lua解释器调用的API,并在运行时将C/C++代码封装成Lua可用的函数。 以下是一个简单的示例,演示如何使用tolua++将C++代码转换成Lua调用的库: ```c++ // example.h class Example { public: Example(int value); int getValue(); private: int m_value; }; ``` ```c++ // example.cpp #include "example.h" Example::Example(int value) : m_value(value) { } int Example::getValue() { return m_value; } ``` 首先,我们需要使用tolua++生成绑定代码。假设我们的绑定代码文件名为examplebindings.pkg,其内容如下: ``` // examplebindings.pkg $#include "example.h" module example { class Example { public: Example(int value); int getValue(); }; } ``` 然后,我们可以使用tolua++命令行工具将绑定代码生成为C++头文件和Lua文件: ``` $ tolua++ -o examplebindings.h -H examplebindings.hpp examplebindings.pkg ``` 生成的examplebindings.h和examplebindings.hpp文件包含了C++的绑定代码,我们需要将其与原始的C++代码一起编译成库文件。 接下来,我们可以编写Lua脚本来调用C++代码: ```lua -- example.lua require "examplebindings" local example = example.Example(42) print(example:getValue()) -- 输出42 ``` 在上面的示例中,我们首先加载了examplebindings模块,然后创建了一个Example对象,并调用了其getValue()方法。注意,我们使用了冒号语法来调用方法,这是Lua中常用的一种语法。 最后,我们可以使用Lua解释器来运行example.lua脚本,以调用C++代码并输出结果。 以上就是使用tolua++将C++代码转换成Lua调用的库的基本流程。需要注意的是,tolua++只支持部分C++特性,例如模板和多重继承等特性可能无法正确导出。在实际使用中,我们需要根据具体情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值