toLua中Lua调用C#中的类

toLua中Lua调用C#:

[7]Lua脚本调用C#中的class

准备工作:
1.调用lua脚本
2.绑定LuaState虚拟机,这样在lua脚本中才可以对C#脚本进行访问。
3.在lua中使用Debug打印信息,需要在自定义CustomSetting脚本中添加Debug,并生成wrap文件。

image-20240514070352258

image-20240514070442189

---
--- 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)

image-20240514072109660

调用的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");
        }
    }
}

img
运行结果:
image-20240514082302000

此处注意:在生成的Debug warp文件时候会报错产生,是因为wrap文件中使用指针,将相关的代码注释掉即可!

总结:在lua脚本中调用:类中的静态对象可以使用 . 来获取,方法则使用 : 来调用,调用定义脚本需要在配置信息中添加,并重新生成wrap文件。

posted @ 2024-05-14 08:26  畅知  阅读(154)  评论(0编辑  收藏  举报