---
description: Lua脚本环境
---

# 0.10

lua脚本环境模块可在程序运行时以热插拔的方式加载执行lua脚本编写的脚本化微应用程序。

## 术语约定

### 脚本化微应用

一个包含了lua脚本文件和图片、视频、音乐、模型等多种媒体文件打包而成的归档文件，可在加载运行后提供和主程序一致的交互体验。

### 根脚本

微应用程序至少需要包含一个名为root.lua的根脚本文件，微应用加载后，会执行root.lua，微应用的所有逻辑都从根脚本开始。

一个根脚本需要包含以下结构:

```lua
local function run()
    G_LOGGER:Info("lua root.Run ...")
    G_LOGGER:Info(G_SLOT_UI.name)
    G_LOGGER:Info(G_SLOT_WORLD.name)
end

local function update()
end

local function stop()
    G_LOGGER:Info("lua root.Stop ...")
end

local function handleEvent(_event, _data)
    G_LOGGER:Info(_event)
end

root = {
    Run = run,
    Update = update,
    Stop = stop,
    HandleEvent = handleEvent,
}
```

## 功能特性

### 运行时热插拔

模块可在运行时从外部插入微应用运行，同时可将微应用从运行时拔除。

### 全局导出

模块中已经导出了一些常用的可访问成员到lua空间，在lua代码中可以直接调用。

| 导出名                  | 类型                                     | 说明         |
| -------------------- | -------------------------------------- | ---------- |
| G\_LOGGER            | XTC.FMP.LIB.MVCS.Logger                | 日志的实例      |
| G\_SLOT\_UI          | UnityEngine.GameObject                 | UI挂载槽的实例   |
| G\_SLOT\_WORLD       | UnityEngine.GameObject                 | 3D世界挂载槽的实例 |
| G\_API\_PROXY        | XTC.FMP.MOD.LuaEnv.LIB.APIProxy        | API代理的实例   |
| G\_FONT\_MAIN        | UnityEngine.Font                       | 主要的字体      |
| G\_RUNNER\_COROUTINE | XTC.FMP.MOD.LuaEnv.LIB.CoroutineRunner | 协程的运行组件    |

## 配置说明

标准范例：

## 消息订阅

TODO

## 依赖插件

* oelMVCS
* oelArchive
* NVorbis
* XLuaPlugin

## 模板列表

### Karaoke (卡拉OK)

* 可更改主题皮肤
* 可切换人声和伴唱两种模式
* 可控制播放进度
* 可控制音量大小

#### 文件结构

```
|- x.lsa
  |- root.lua                 // 根脚本
  |- app.lua                  // 应用逻辑脚本
  |- style.lua                // 主题样式脚本
  |- lrc.lua                  // 歌词脚本
  |- accompaniment.ogg        // 不带人声的伴奏的音频，建议为(44100Hz, 192kbps, stereo)
  |- music.ogg                // 带人声的音乐的音频，建议为(44100Hz, 192kbps, stereo)
  |- bg.jpg                   // 背景图片，拉伸显示
  |- frame.png                // 背景边框图片，九宫格显示
  |- cover.png                // 中央唱片图
  |- handle.png               // 进度条按钮图
  |- icon-accompaniment.png   // 伴奏按钮图
  |- icon-music.png           // 唱按钮图
  |- icon-pause.png           // 暂停按钮图
  |- icon-play.png            // 播放按钮图
  |- icon-volume.png          // 音量按钮图
  |- loading.png              // 加载图
  |- panel-volume.png         // 音量条背景图
```

#### 配置说明

* 修改样式

样式的修改可替换图片和修改style.lua中的值

* 更改歌词

将歌词格式的文本替换到lrc.lua中

### PhotoAlbum (相册)

* 可更改主题皮肤
* 可浏览图片预览
* 可缩放图片大小
* 可显示和关闭图片配文

#### 文件结构

```
|- x.lsa
  |- root.lua                 // 根脚本
  |- app.lua                  // 应用逻辑脚本
  |- unityUtilities.lua       // 通用工具脚本
  |- style.lua                // 主题样式脚本
  |- config.lua               // 配置脚本
  |- description_off.png      // 描述关闭按钮图片
  |- description_on.png       // 描述打开按钮图片
  |- handle.png               // 缩放条按钮图
  |- slider.png               // 缩放条背景图
  |- progress.png             // 加载进度背景图
  |- images                   // 图片文件夹
    |- img#1.jpg              // 第一张图片
    |- ...
```

#### 配置说明

* 修改样式

样式的修改可替换图片和修改style.lua中的值

* 更改图片

将图片放置到images文件夹中，并按 img#{n}.jpg方式命名，n从1开始。

修改完图片后更改config.lua中的图片数量值

```lua
local count = 4
```

同时添加图片的描述

```lua
description["img#1.jpg"]["en_US"] = "图片1的描述"
```

### ImagePresentation (图片演示)

* 可更改主题皮肤
* 可使用上一页和下一页进行翻页
* 可点击画面显示和关闭工具栏
* 工具栏可拖拽
* 可在工具栏中打开图片预览列表

#### 文件结构

```
|- x.lsa
  |- root.lua                 // 根脚本
  |- app.lua                  // 应用逻辑脚本
  |- config.lua               // 配置脚本
  |- unityUtilities.lua       // 通用工具脚本
  |- style.lua                // 主题样式脚本
  |- toolbar_drag.png         // 工具栏拖拽按钮图片
  |- toolbar_prev.png         // 工具栏上一页按钮图片
  |- toolbar_next.png         // 工具栏下一页按钮图片
  |- toolbar_list.png         // 工具栏列表按钮图片
  |- images                   // 图片文件夹
    |- img#1.jpg              // 第一张图片
    |- ...
```

#### 配置说明

* 修改样式

样式的修改可替换图片和修改style.lua中的值

* 更改图片

将图片放置到images文件夹中，并按 img#{n}.jpg方式命名，n从1开始。

修改完图片后更改config.lua中的图片数量值

```lua
local count = 4
```

## 更新日志

### ImagePresentation/6.0.0

\[新增] 第一版

### PhotoAlbum/6.0.0

\[新增] 第一版

### 0.10.0

\[更新] 将NLayer组件替换为NVorbis \[新增] 导出协程运行组件到lua运行时 \[更新] 音频读取使用流方式加快加载速度

### Karaoke/6.1.0

\[新增] 预加载完成后使用协程暂停1秒 \[更改] 使用ogg替换mp3

### 0.9.0

\[更新] 关闭时结束读取线程

### Karaoke/6.0.1

\[修正] 播放进度无法点击的问题 \[更新] 自动循环播放
