-
Notifications
You must be signed in to change notification settings - Fork 89
Minigame
woctordho edited this page Aug 13, 2022
·
10 revisions
minigame.lua中的minigame函数封装了调用小游戏的整个流程。具体的例子可以参考Assets/Resources/Scenarios/test_minigame.txt。
- 把小游戏做成一个prefab(可以在3D场景中,也可以在UI中),比如
Assets/Resources/Prefabs/ExampleCube.prefab和ExampleMinigame.prefab - 在Lua中用
show(prefab_loader, prefab_name)显示prefab,hide(prefab_loader)隐藏prefab
-
DialogueEntry.WrapCoroutine会把脚本中的每个代码块包装在__Nova.coroutineHelper:AcquireActionPause()/ReleaseActionPause()中。当Gamestate.actionPauseLock被acquire时,Nova本体不会推进对话 - 在小游戏前/后,在Lua中调用
input_off()/input_on(),就会禁用/启用鼠标菜单和快捷键- 其实是调用
GameController.DisableInput/EnableInput - 如果玩家点窗口的叉退出游戏,会出现“要退出游戏吗”的警告框,这时玩家仍然能点击警告框
- 如果不禁用鼠标菜单和快捷键,允许玩家在小游戏中存档/读档,理论上也是可以的,但是存档中只能保存小游戏开始前的状态,而不能保存小游戏进行到一半的状态
- 其实是调用
- 在Lua中调用
wait_fence(),就会让Nova本体等待小游戏结束。在ExampleMinigameController中调用gameState.SignalFence(true),就会让小游戏结束,Nova本体继续运行
- 在
ExampleMinigameController中,用variables.Get和variables.Set读写变量,checkpointHelper.GetGlobalVariable和checkpointHelper.SetGlobalVariable读写全局变量- 变量名称之前要加
v_/gv_
- 变量名称之前要加
- 在小游戏前/后,在Lua中调用
__Nova.coroutineHelper:StartInterrupt()/StopInterrupt(),就会让gameState把小游戏的结果记录在nodeHistory中- 调用
StopInterrupt之后,不能再在同一条对话中根据小游戏结果来修改变量。建议把所有结果的结算放到小游戏的controller中
- 调用
- 在小游戏的controller class里写一个
Show函数,用来显示小游戏的UI - 在class上面加上
[ExportCustomType]attribute,用来导出Lua接口 - 在class文件里加上
using LuaInterface;,在Awake函数里加上LuaRuntime.Instance.BindObject("小游戏名字", this);,就会把小游戏的C# object instance绑定到Lua的__Nova这个全局table里的小游戏名字这个key- 如果小游戏有好几个instance,可以把
小游戏名字改成一个变量
- 如果小游戏有好几个instance,可以把
- 在Unity Editor的上面的菜单中点击
Lua -> Clear Wrap Files,就会生成这个class的Lua接口 - 在Lua中调用
__Nova.小游戏名字:Show(),就会显示小游戏的UI,代替show(prefab_loader, prefab_name) - 你需要自己调用
minigame函数中用到的其他东西