*注:最开始仍需要用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)
暂无评论