大纲
参考
- Saplonily 的 LuaCutscenes 教程
- Lua Cutscenes 词典 by Nacline(制图群群文件)
- motonine 的 LuaCutscene 教程 (群文件里)
- Lua Cutscenes 文档
- Lua Cutscenes 函数源码
- Prismatic Helper 文档
- Prismatic Helper 指令 by 底龙
- Lua Cutscenes Recipe Book by Everest Wiki
- Lua Cutscenes without Lua Experience by Gamation
Lua Cutscenes 基本介绍
由于蔚蓝是用 C# 编程语言编写制作的, 而官方的剧情都是硬编码的 (直接在代码里写好), 所以如果大家想要制作剧情就得写代码, 门槛太高了!
所以就出现了 Lua Cutscenes 这样的 helper 来用 Lua 这种简单的编程语言来对接 C#, 即我们可以编写简单的 Lua 脚本来使用官方代码中的各种跟剧情相关的函数
下面讲解常见的剧情制作方式, 如果你想要更为细致的剧情操作, 比如在对话过程中加入操作, 可以使用 Prismatic Helper 等 Helper 的 Dialog 指令
首先在你的 Mod 下放置新创建的空 lua 文件以供后续使用, 记得套文件夹
- 📁 Mods
- 📁 你的 Mod
- 📄 everest.yaml
- 📁 LuaCutscenes
- 📁 作者名
- 📁 项目名
- 📄 trigger.lua
- 📄 talker.lua
- 📁 项目名
- 📁 作者名
- 📁 你的 Mod
然后这里以 Lua Cutscene Trigger 为例(Lua Talker 同理), 请你在地图中放置一个 LuaCutscene/LuaCutsceneTrigger,
并在 Filename 属性中填入 LuaCutscenes/作者名/项目名/trigger, 此时 Lua Cutscenes Helper 就能找到你的 lua 文件了,
如果文件是在游戏运行的时候新放的, 可能需要 Ctrl + F5 重启一下加载文件
Lua Cutscene Trigger
打开 trigger.lua 并填入以下内容
| 路径: 你的 Mod/LuaCutscenes/作者名/项目名/trigger.lua | |
|---|---|
1 2 3 4 5 6 7 | |
对于 Lua Cutscene Trigger 来说, 当你进入 Trigger 时, onBegin 函数中的代码会被逐行执行,
执行完毕后, onEnd 函数中的代码会被逐行执行
此时你就可以在函数内部加入一些 Lua Cutscenes Helper 为你预制好的 lua 函数了, 比如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
此时当你触碰 Lua Cutscene Trigger 的时候剧情函数就会往下执行了!
如果你觉得这些函数无法满足你, 可以参考 C# 交互栏目, 通过 Lua 访问游戏中的 C# 代码(刚才使用的预制 lua 代码本质上也是这么做的)
注意事项
- 这个流程是按顺序进行的, 也就是说上面的例子中, 镜头右移和镜头缩放 不会同时执行. 而且假设有一个流程被暂停或者耽误了, 后面的流程就会一直卡住不动, 直到那个卡住的进程结束.
- Lua 脚本在不做特殊处理的情况下, 跨房间会直接失效.
- Lua 脚本在暂停跳过以后, 会直接进入
onEnd代码然后结束过场流程.
更好的调试
找到蔚蓝根目录下的 everest-launch.txt 文件, 在里面新加入一行 --console, 这样之后蔚蓝在启动的时候就会附带一个控制台窗口.
如果 lua 写得不对了, 对应的报错信息也会显示在其中, 这时你就可以自己排查或者问 AI 之类的了
比如如果我们在上方忘记写 level = getLevel() 拿到 level, 那么后面就会因为拿不到 level 而报错
Lua Talker
和 Lua Cutscene Trigger 的格式其实比较类似, 但是 Lua Talker 启动过场的方式是玩家和实体交互, 因此我们在脚本中不使用 onBegin, 而是 onTalk:
| 路径: 你的 Mod/LuaCutscenes/作者名/项目名/talker.lua | |
|---|---|
1 2 3 4 5 | |
与 Lua Cutscene Trigger 不同的是, 跳过剧情并不会中断 onTalk 函数, 比如如果你在 onTalk 里 walk(10000),
那么跳过剧情之后 player 仍然会接着行走

