-
Notifications
You must be signed in to change notification settings - Fork 78
Minigame
woctordho edited this page Aug 24, 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
函数中用到的其他东西