zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Unity Lua 之 在 Unity中 通过 文件加载的方式,读取执行文件中的 lua 内容,实现 Hello Lua

文件执行 实现 方式 通过 加载 内容 读取
2023-09-11 14:20:50 时间

Unity Lua 之 在 Unity中 通过 文件加载的方式,读取执行文件中的 lua 内容,实现 Hello Lua

 

目录

Unity Lua 之 在 Unity中 通过 文件加载的方式,读取执行文件中的 lua 内容,实现 Hello Lua

一、简单介绍

二、注意事项

三、实现步骤

四、关键代码


 

一、简单介绍

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

xLua为Unity、 .Net、 Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。

xLua在功能、性能、易用性都有不少突破,这几方面分别最具代表性的是:

  •     可以运行时把C#实现(方法,操作符,属性,事件等等)替换成lua实现;
  •     出色的GC优化,自定义struct,枚举在Lua和C#间传递无C# gc alloc;
  •     编辑器下无需生成代码,开发更轻量;

在Unity中使用xlua 的重要一个原因就是热更新,我们本着这个歌目的开始我们的学习。

本节介绍,如何读取执行文件中的 lua 内容,实现 Hello Lua。

 

二、注意事项

1、建议文件以 .lua.txt,便于区别是 lua,同时 Unity 读取也方便

2、在使用 require 加载文件的时候(例如:luaEnv.DoString("require'HelloLuaByFile'");),注意:

(1)文件名为:xxx.lua.txt;

(2)文件放在 Resources 文件夹下

(require实际上是调一个个的loader去加载,有一个成功就不再往下尝试,全失败则报文件找不到。 目前xLua除了原生的loader外,还添加了从Resource加载的loader,需要注意的是因为Resource只支持有限的后缀,放Resources下的lua文件得加上txt后缀。)

三、实现步骤

1、新建一个文本文件 HelloLuaByFile.lua.txt

 

2、打开编写 lua 代码

 

3、新建 Unity 工程,新建一个 Resources 文件夹,并把 文本文件 HelloLuaByFile.lua.txt 导入

 

4、新建脚本,进行读取执行文件中的内容

 

5、把脚本挂载到场景中

 

6、运行场景,输入 Hello Lua

 

四、关键代码


using UnityEngine;
using XLua;         // 导入 XLua

public class HelloLuaByFile : MonoBehaviour
{
    // Lua 环境变量
    LuaEnv luaEnv;

    // Start is called before the first frame update
    void Start()
    {
        LuaInit();

        // 方法 一:
        // 加载 Lua 文件
        //TextAsset ta = Resources.Load<TextAsset>("HelloLuaByFile.lua");
        //if (ta != null) {
        //    // 执行 Lua 语句
        //    luaEnv.DoString(ta.text);
        //}

        // 方法 二:(前提 1、文件名为:HelloLuaByFile.lua.txt; 2、文件放在 Resources 文件夹下 )
        luaEnv.DoString("require'HelloLuaByFile'");
    }


    void OnDestroy() {
        LuaDispose();
    }

    /// <summary>
    /// Lua 环境构建
    /// </summary>
    private void LuaInit() {
        luaEnv = new LuaEnv();
    }

    /// <summary>
    /// Lua 环境释放
    /// </summary>
    private void LuaDispose() {
        luaEnv.Dispose();
    }
}