boxmoe_header_banner_img

菜就多练喵

文章导读

[Unity][XLua]热更新15——Lua调用C#类


avatar
Ib_Mccf 2026年3月10日 26

*注:最开始仍需要用C#脚本来执行ua脚本,lua才能调用C#

lua可以通过<CS.命名空间.类名>来调用C#中的类

通过.来调用成员与静态方法

通过:来调用成员方法

可以通过申明一个全局变量GameObject = CS.UnityEngine.GameObject取别名的方法来方便使用和节约性能。
XLua可以使用typeof()方法可以获取C#类的Type

--lua调用C#类
--固定写法:CS.命名空间.类名
--Untiy的类:CS.UntiyEngine.GameObject等

--通过C#的类实例化一个对象 lua没有new()
--默认会调用类的无参构造函数    
local obj1 = CS.UnityEngine.GameObject()
local obj2 = CS.UnityEngine.GameObject("有参构造函数")

--为了方便使用和节约性能,可以用全局变量存储C#的类
GameObject = CS.UnityEngine.GameObject
local obj3 = GameObject()
local obj4 = GameObject("取一个别名")

--类中的静态对象可以直接通过.来调用
local obj5 = GameObject.Find("有参构造函数")

--得到对象中的成员变量直接.就可以访问
obj5.transform.position = CS.UnityEngine.Vector3(1, 2, 3)
Debug = CS.UnityEngine.Debug
Debug.Log(obj5.transform.position)

Vector3 = CS.UnityEngine.Vector3
--如果使用对象的成员方法 一定要用冒号:来调用
obj5.transform:Translate(Vector3.up)
Debug.Log(obj5.transform.position)

--调用C#自定义类
--无命名空间的自定义类
local t1 = CS.Test1()
t1:Speak("说话")
--有命名空间的自定义类
local t2 = CS.TestNamespace.Test2()
t2:Speak("说话")

--继承MonoBehaviour的类不能直接new
local obj6 = GameObject("加脚本测试")
--lua不支持泛型,需要传入类的Type
obj6:AddComponent(typeof(CS.LuaCallCSharp))
//自定义类
public class Test1
{
    public void Speak(string str)
    {
        Debug.Log("Test1" + str);
    }
}
namespace TestNamespace
{
    public class Test2
    {
        public void Speak(string str)
        {
            Debug.Log("Test2" + str);
        }
    }
}
public class LuaCallCSharp : MonoBehaviour
{
}


评论(0)

查看评论列表

暂无评论


发表评论

表情 颜文字

插入代码