Lua调用C#类

先创建一个Main脚本作为主入口,挂载到摄像机上

cs 复制代码
public class Main : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        LuaMgr.GetInstance().Init();
        LuaMgr.GetInstance().DoLuaFile("Main");
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

编写Lua脚本

Main.lua

Lua 复制代码
print("OK")
--也会执行重定向
--require("Test")
require("L1_CallClass")

L1_CallClass.lua

Lua 复制代码
--Lua中使用C#类
--CS.命名空间.类名
--Unity的类(GameObject Transform等
--在CS.UnityEngine

--默认调用无参构造
local obj1 = CS.UnityEngine.GameObject()
local obj2 = CS.UnityEngine.GameObject("命名")

--节约性能
GameObject = CS.UnityEngine.GameObject
local obj3 = GameObject("节约性能")

--静态方法直接.使用
local obj4 = GameObject.Find("命名")
print(obj4.transform.position)

--使用成员方法,一定要加:
Vector3 = CS.UnityEngine.Vector3
obj4.transform:Translate(Vector3.right)
print(obj4.transform.position)

--自定义类
local t = CS.Test1()
t:Speak("说话")
local t2 = CS.Holens.Test2()
t2:Speak("说话")

--继承Mono的类 不能直接New
local obj5 = GameObject("加脚本测试")
--xLua提供了一个重要方法 typeof方法
obj5:AddComponent(typeof(CS.LuaCallC))

自定义类

cs 复制代码
//自定义类
public class Test1
{
    public void Speak(string str)
    {
        Debug.Log("Test1"+str);
    }
}

namespace Holens
{
    public class Test2
    {
        public void Speak(string str)
        {
            Debug.Log("Test2" + str);
        }
    }
}
public class LuaCallC : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

运行结果

相关推荐
youngee11几秒前
hot100-49前缀树
开发语言·c#
Dillon Dong2 分钟前
从C到SIMULINK: 字节/字偏移 + 位偏移实现故障与故障字保存操作
c语言·开发语言·c#
m5655bj6 分钟前
如何通过 C# 将 Markdown 转换为 PDF 文档
开发语言·pdf·c#
张人玉44 分钟前
WPF HTTPS 通信示例使用说明
数据库·网络协议·http·c#·wpf
2501_930707781 小时前
使用C#代码向 Word 文档添加文档属性
开发语言·c#·word
阿蒙Amon1 小时前
C#每日面试题-属性和字段的区别
开发语言·c#
wuguan_1 小时前
C#之泛型
c#·泛型
bugcome_com1 小时前
深入浅出 C# 索引器:不止于数字索引的灵活利器
c#
工程师0071 小时前
C# 调用 Win32 API
开发语言·c#·api·win32
双河子思1 小时前
C# 语言编程经验
开发语言·c#