toLua中Lua调用C#中的类
toLua中Lua调用C#:
[7]Lua脚本调用C#中的class
准备工作:
1.调用lua脚本
2.绑定LuaState虚拟机,这样在lua脚本中才可以对C#脚本进行访问。
3.在lua中使用Debug打印信息,需要在自定义CustomSetting脚本中添加Debug,并生成wrap文件。
---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by TonyChang.
--- DateTime: 2024/5/14 6:55
---
print("----------------------toLua中调用c#脚本-------------------------")
--调用Unity中的类
local object1 = UnityEngine.GameObject("object1")
local object2 = UnityEngine.GameObject("TonyChang")
GameObject = UnityEngine.GameObject
local object3 = GameObject("object3")
--类中的静态对象可以使用 . 来调用
local TonyChang = GameObject.Find("TonyChang")
print(TonyChang.transform.position.x)
调用的C#自定义脚本
Lua中调用自定义脚本
与使用Debug打印信息方式一样,如果lua中要调用C#中的内容则需要在CustomSetting中添加类,要通过命名空间.类名形式添加。之后仍需生成对应的wrap脚本。如果有报错,注释掉相关内容即可!
下面在lua脚本中的调用吧~
--使用Unity的Debug来打印
Debug = UnityEngine.Debug
Debug.Log("----------Hello-----------")
Vector3 = UnityEngine.Vector3
--使用 :调用成员方法
TonyChang.transform:Translate(Vector3.right)
Debug.Log(TonyChang.transform.position.x)
--调用继承了MonoBehaviour的类
TonyChang:AddComponent(typeof(TestScripts.Test))
--调用没有继承MonoBehaviour的类
local JackStu = TestScripts.Student("Jack")
JackStu:Speak()
Lua中要调用的自定义类
using UnityEngine;
namespace TestScripts
{
public class Student
{
private string _name;
public Student(string name)
{
_name = name;
}
public void Speak()
{
Debug.Log("my name is " + _name);
}
}
public class Test : MonoBehaviour
{
private void Awake()
{
Debug.Log("Test.cs is running");
}
}
}
运行结果:
此处注意:在生成的Debug warp文件时候会报错产生,是因为wrap文件中使用指针,将相关的代码注释掉即可!
总结:在lua脚本中调用:类中的静态对象可以使用 . 来获取,方法则使用 : 来调用,调用定义脚本需要在配置信息中添加,并重新生成wrap文件。