Lua と Unity 接続の使用

Lua で Unity コードを使用する:

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.InputField) Button)) - -ボタンを取得します
tt=a.GameObject.Find("Tapp"):GetComponent(typeof(a.UI.Text)) --テキストを取得します

btn.onClick:AddListener(Clickone) -- メソッド デリゲートを取得します

Unity で Lua コードを使用する:

1.機能【CSharpCallLua】のご紹介

2.名前空間を導入します: XLua を使用します。

3. オブジェクト LuaEnv をインスタンス化します。 lua = new LuaEnv();

4.lua.DoString("require('Lua ファイル名')");//Lua ファイルの内容を要求

5.lua.Global.Get<>("Lua メソッドまたはテンプレート"); Lua プロパティをインスタンス化します。

 Txtファイルをロードする

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 ファイル 3 つのコード ブロック:

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

 

おすすめ

転載: blog.csdn.net/m0_71624363/article/details/129960016