Несколько способов Unity вызвать Lua (подробности)

Я тоже новичок и хотел бы высказать свое мнение о Lua. В процессе изучения Lua Lua, вызываемый Unity, может вызывать соответствующие свойства, методы и методы модуля (что эквивалентно классу в C#) через делегаты, структуры, классы и интерфейсы (если есть другие, лучшие способы, пожалуйста, объясните мне).

//结构体
public struct Son
{
    public int Id;
    public string s;

}
//类
public class Son1
{
    public int Id;
    public string s;
}
//接口
public interface Son2
{
    public int Id { get; set; }
    public string s { get; set; }
    public void Func();
    
}
//委托
public delegate int id;
public delegate int Obj(object a, object b);

По моему мнению, использование интерфейсов должно быть наиболее полезным среди этих четырех методов.Я также рекомендую использовать интерфейсы для извлечения данных. Когда я использую другие методы для получения методов в модуле, появляются небольшие ошибки, поэтому, если вы хотите получить методы в классе, я рекомендую вам использовать интерфейсы здесь. Другие небольшие данные удобнее всего получать с помощью структур.
 

Использование интерфейсов: получение методов в классах

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

/*
*创建者:
*创建时间:
*描述:
*版本:
*/
[CSharpCallLua]//一定要添加特性,里面的属性名称和方法名称也必须和Lua里面的相同
public interface Open
{
    public string Id { get; set; }
    public string Pwd { get; set; }
    void GetUI();
}

public class Te: MonoBehaviour
{
    LuaEnv lua;
    Open o;
    void Start()
    {
        lua = new LuaEnv();
        lua.AddLoader(FileLoading);//加载器
        lua.DoString("require('M')");//获取
        o = lua.Global.Get<Open>("A");
        print(o.Id);
        print(o.Pwd);
        o.GetUI();

        
    }
    byte[] FileLoading(ref string name)//读文件的方式读取Lua内容
    {
        
        string s = Application.dataPath + "/Lua/" + name + ".lua";
        return File.ReadAllBytes(s);
    }

    void OnDestory()
    {
        lua.Dispose();
    }
}

Луа-часть:


A={
	Id=1001,
	Pwd='密码',
	GetUI=function()
		print("获取到类里面的方法")
	end
}

Результат вывода: 

 Метод привлечения делегата

[CSharpCallLua]//委托获取,不用特性也可以
public delegate void D();
public class Te : MonoBehaviour
{
    LuaEnv lua;
    void Start()
    {
        lua = new LuaEnv();
        lua.AddLoader(FileLoading);
        lua.DoString("require('M')");
        D d = lua.Global.Get<D>("Out");
        d();
      

    }
    byte[] FileLoading(ref string name)
    {

        string s = Application.dataPath + "/Lua/" + name + ".lua";
        return File.ReadAllBytes(s);
    }

    void OnDestory()
    {
        lua.Dispose();
    }

Lua-скрипт:

function Out()
	print("外面的方法")
end

Результат вывода:

 

Acho que você gosta

Origin blog.csdn.net/m0_71624363/article/details/129960557
Recomendado
Clasificación