Использование соединений Lua и Unity

Использование кода Unity на Lua:

a=CS.UnityEngine

a.GameObject("Lua") --Создать новый объект
camera=a.GameObject.Find('Main Camera') --Найти имя
camera=a.GameObject.FindWithTag('MainCamera') --Найти тег
input1 =a.GameObject.Find("Name"):GetComponent(typeof(a.UI.InputField)) --Получить поле ввода
btn = a.GameObject.Find("Res"):GetComponent(typeof(a.UI. Button)) - -Получить кнопку
tt=a.GameObject.Find("Tapp"):GetComponent(typeof(a.UI.Text)) --Получить текст

btn.onClick:AddListener(Clickone) --Получаем делегат метода

Использование кода Lua в Unity:

1.Представляем функцию [CSharpCallLua]

2. Введение пространства имен: использование XLua;

3. Создайте экземпляр объекта LuaEnv lua = new LuaEnv();

4.lua.DoString("require('Имя файла Lua')");//Запросить содержимое файла Lua

5.lua.Global.Get<>("Метод или шаблон Lua"); Создать экземпляр свойств Lua

 Загрузить текстовый файл

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

/*
*创建者:
*创建时间:
*描述:只能加载Txt的文件
*版本:
*/
public class Test : MonoBehaviour
{
    public int id = 1001;
    public void GetOne()
    {
        print("Hello");
    }
    public static void GetTwo()
    {
        print("World");
    }
    [CSharpCallLua]
    public delegate void Opens();//通过委托去映射Lua文件内的属性,方法


    LuaEnv lua;
    void Start()
    {
        GameObject g = new GameObject("天才");//创建空物体

        lua = new LuaEnv();

        lua.DoString("require('One')");//请求Lua文件内容
        Opens op = lua.Global.Get<Opens>("Init");
        op();
            
    }

    void OnDestory()
    {
        lua.Dispose();//关闭资源
    }
}

Загрузите файлы Lua и создайте отдельные папки Lua для хранения файлов Lua.


using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using Unity.VisualScripting;
using UnityEngine;
using XLua;

/*
*创建者:
*创建时间:
*描述:
*版本:
*/

public class Person 
{
    public int id;
    public string name;

}

public class Test3 : MonoBehaviour
{
    LuaEnv lua;
    Person p;
    [CSharpCallLua]
    public delegate int Count(object a, object b);//带参数的委托

    void Start()
    {
        lua = new LuaEnv();
        lua.AddLoader(FileLoad);    //添加加载器(用于加载Lua文件)
        lua.DoString("require('Three')");//请求获取Lua文件

        //读取Lua数据
        int a = lua.Global.Get<int>("a");
        float b = lua.Global.Get<float>("b");
        string c = lua.Global.Get<string>("c");
        bool d = lua.Global.Get<bool>("d");
        print(a + "\t" + b + "\t" + c + "\t" + d);

        //通过类的方式映射Lua类(模板)
        p = lua.Global.Get<Person>("Student");
        print(p.id + "\t" + p.name);
        //通过集合映射Lua类(模板)
        List<object> list = lua.Global.Get<List<object>>("Student");
        foreach (var item in list)
        {
            print(item);
        }
        //通过字典映射Lua类(模板)
        Dictionary<object, object> dic = lua.Global.Get<Dictionary<object, object>>("Student");
        foreach (var item in dic)
        {
            print(item.Key + "\t" + item.Value);
        }

        //通过带参委托映射Lua中带参数的方法
        Count ct = lua.Global.Get<Count>("Sum");
        print(ct(1, 2));


        //用于获取带多个参数的Lua文件方法
        LuaFunction lf = lua.Global.Get<LuaFunction>("Sum");
        object[] obj = lf.Call(1, 2);
        foreach (var item in obj)
        {
            print(item);
        }

    }
    //以字节数组的形式存放Lua文件
    Byte[] FileLoad(ref string name)
    {
        string s = Application.dataPath + "/Lua/" + name + ".lua";

        return File.ReadAllBytes(s);//读取文件所有的字节
    }

    void OnDestory()
    {
        lua.Dispose();//关闭资源
    }
}

Lua-файл Три блока кода:

a=1
b=1.2
c='hello'
d=true
Student={
	id=1001,
	name="小霸王",
	Study=function()
		print(Student.name..'爱学习')
	end,
	1111
}
function Sum(a,b)
	c=a+b
	return c
end

 

Guess you like

Origin blog.csdn.net/m0_71624363/article/details/129960016