toLua中Lua调用C#中的类

tolua,lua · 浏览次数 : 0

小编点评

**lua 调用 C# 的步骤:** 1. **绑定 LuaState:**使用 `luaState = lua.State` 创建一个 LuaState 对象,用于与 C# 之间的通信。 2. **创建 C# 类实例:**使用 `GameObject.Find("TonyChang")` 找到名为 "TonyChang" 的 GameObject,并从它创建一个 C# 的类的实例。 3. **访问类成员:**使用 `object3.transform.position.x` 获取类中 "object3" 的位置 x 值。 4. **调用 C# 方法:**使用 `Debug.Log()` 打印 `TonyChang.transform.position.x` 的值。 **示例代码:** ```lua -- 创建 LuaState 对象 local luaState = lua.State -- 创建 C# 类实例 local TonyChang = GameObject.Find("TonyChang") local obj = UnityEngine.GameObject.Instantiate(TonyChang, Vector3.zero, Quaternion.identity) -- 获取类成员 local object3 = obj.transform:find("object3") -- 获取位置 local position = object3.transform.position -- 打印值 print("Position x:", position.x) ``` **注意:** * 在调用 C# 方法之前,请确保 C# 代码已编译并安装。 * 在生成 `warp` 文件之前,请确保在 Unity 编辑器中设置 `Debug` 为 `true`。 * 由于 `warp` 文件使用指针,在生成时可能会出现错误。解决方案是注释掉相关代码段。

正文

toLua中Lua调用C#:

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

准备工作:打算在Lua脚本中使用Debug,使用lua调用C#脚本,需要绑定LuaState和自定义添加Debug

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中调用自定义脚本

--使用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

调用自定的脚本需要在CustomSettings 新增,并生成warp 文件,才可以在lua中调用。
此处注意:在生成的Debug warp文件时候会报错产生,是因为wrap文件中使用指针,将相关的代码注释掉即可!

与toLua中Lua调用C#中的类相似的内容:

toLua中Lua调用C#中的类

toLua中Lua调用C#: [7]Lua脚本调用C#中的class 准备工作:打算在Lua脚本中使用Debug,使用lua调用C#脚本,需要绑定LuaState和自定义添加Debug Generated by EmmyLua(https://github.com/EmmyLua) Created

热更学习笔记--toLau中lua脚本对C#中枚举和数组的访问

[8]Lua脚本调用C#中的枚举学习 --调用枚举类型 print(" toLua中调用C#中枚举类型 ") PrimitiveType = UnityEngine.PrimitiveType local cubeObj = GameObject.CreatePrimitive(PrimitiveT

Lua热更学习--使用toLua中的协程

[6] C#访问调table类中的成员变量和函数 访问table中的变量和函数 lua中可以使用table作为class,因此对table中的函数访问调用是必要的根据前面对table访问和function的获取调用,这里尝试获取调用。 依然是如此,此种调用方式获取到的table中的函数是引用拷贝。

[4]自定义Lua解析器管理器-------演化脚本V0.7

使用自定义委托通过tolua来调用多返回值和长参数类型的函数。 防踩坑指南,使用自定义委托需要将委托类型添加到CustomSettings中。

Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本

[0]toLua的导入 下载toLua资源包,访问GitHub项目地址,点击下载即可。 将文件导入工程目录中: 导入成功之后会出现Lua菜单栏,如未成功生成文件,可以点击Generate All 重新生成(注意很可能是路径问题导致的生成失败!) 之后就可以开始编写脚本执行第一个lua程序了! [1]