15.Lua调用CSharp-扩展方法
15.1 知识点
准备工作
// 初始化LuaManager
LuaManager.Instance.Init();
// 执行Lua文件
LuaManager.Instance.DoLuaFile("Lesson15_Lua调用CSharp_扩展方法");
扩展方法
在C#中定义测试类和静态工具类
public class Lesson15_TestClass
{
public string name = "Lesson15_Lua调用CSharp_扩展方法测试类";
public void Speak(string str)
{
Debug.Log(name + "说话:" + str);
}
public static void Eat()
{
Debug.Log("Lesson15_TestClass吃东西");
}
}
//想要在Lua中使用扩展方法 要在扩展方法的静态工具类前面加上[LuaCallCSharp]特性 并重新生成xLua代码
//在Lua中要使用的类 建议都加上[LuaCallCSharp]特性 可以提升性能
//不加该特性 除了扩展方法对应的类 其它类都能正常使用 但是由于lua是通过反射的机制去调用的C#类 效率较低
[LuaCallCSharp]
public static class Lesson15_Tools
{
//Lesson15_TestClass的扩展方法
public static void Move(this Lesson15_TestClass testClass)
{
Debug.Log(testClass.name + "开始移动");
}
}
在Lua脚本中调用静态方法、成员方法和扩展方法
--得到类
Lesson15_TestClass = CS.Lesson15_TestClass
--实例化类对象
local Lesson15_testClass = Lesson15_TestClass()
--调用静态方法 类名.静态方法()
Lesson15_TestClass.Eat()--Lesson15_TestClass吃东西
--调用成员方法 类实例:成员方法()
Lesson15_testClass:Speak("哈哈哈哈")--Lesson15_Lua调用CSharp_扩展方法测试类说话:哈哈哈哈
--调用扩展方法 类实例:扩展方法()
--注意:想要在Lua中使用扩展方法 要在扩展方法的静态工具类前面加上[LuaCallCSharp]特性 并重新生成xLua代码
Lesson15_testClass:Move()--Lesson15_Lua调用CSharp_扩展方法测试类开始移动
15.2 知识点代码
Lesson15_Lua调用CSharp_扩展方法.lua
print('我是Lua脚本 Lesson15_Lua调用CSharp_扩展方法')
print("**********知识点一 扩展方法************")
--得到类
Lesson15_TestClass = CS.Lesson15_TestClass
--实例化类对象
local Lesson15_testClass = Lesson15_TestClass()
--调用静态方法 类名.静态方法()
Lesson15_TestClass.Eat()--Lesson15_TestClass吃东西
--调用成员方法 类实例:成员方法()
Lesson15_testClass:Speak("哈哈哈哈")--Lesson15_Lua调用CSharp_扩展方法测试类说话:哈哈哈哈
--调用扩展方法 类实例:扩展方法()
--注意:想要在Lua中使用扩展方法 要在扩展方法的静态工具类前面加上[LuaCallCSharp]特性 并重新生成xLua代码
Lesson15_testClass:Move()--Lesson15_Lua调用CSharp_扩展方法测试类开始移动
Lesson15_Lua调用CSharp_扩展方法
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class Lesson15_Lua调用CSharp_扩展方法 : MonoBehaviour
{
void Start()
{
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson15_Lua调用CSharp_扩展方法");
}
}
public class Lesson15_TestClass
{
public string name = "Lesson15_Lua调用CSharp_扩展方法测试类";
public void Speak(string str)
{
Debug.Log(name + "说话:" + str);
}
public static void Eat()
{
Debug.Log("Lesson15_TestClass吃东西");
}
}
//想要在Lua中使用扩展方法 要在扩展方法的静态工具类前面加上[LuaCallCSharp]特性 并重新生成xLua代码
//在Lua中要使用的类 建议都加上[LuaCallCSharp]特性 可以提升性能
//不加该特性 除了扩展方法对应的类 其它类都能正常使用 但是由于lua是通过反射的机制去调用的C#类 效率较低
[LuaCallCSharp]
public static class Lesson15_Tools
{
//Lesson15_TestClass的扩展方法
public static void Move(this Lesson15_TestClass testClass)
{
Debug.Log(testClass.name + "开始移动");
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com