-
Notifications
You must be signed in to change notification settings - Fork 78
Minigame
woctordho edited this page Jun 5, 2024
·
10 revisions
minigame.lua
中的minigame
函数封装了调用小游戏的整个流程。具体的例子可以参考Assets/Resources/Scenarios/test_minigame.txt
。
- 把小游戏做成一个prefab,比如
Assets/Resources/Prefabs/ExampleCube.prefab
和ExampleMinigame.prefab
- 在Lua中用
show(prefab_loader, prefab_name)
显示prefab,hide(prefab_loader)
隐藏prefab- 如果要把小游戏加载到3D场景中,则
prefab_loader
设为__Nova.prefabLoader
,它在Hierarchy的最外面 - 如果要把小游戏加载到UI中,则
prefab_loader
设为__Nova.uiPrefabLoader
,它在Hierarchy的UI
中
- 如果要把小游戏加载到3D场景中,则
-
DialogueEntry.WrapCoroutine
会把脚本中的每个代码块包装在__Nova.coroutineHelper:AcquireActionPause()
/ReleaseActionPause()
中。当Gamestate.actionPauseLock
被acquire时,Nova本体不会推进对话 - 在小游戏前/后,在Lua中调用
input_off()
/input_on()
,就会禁用/启用环形菜单和快捷键- 其实是调用
InputManager.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
把小游戏的结果记录在存档中- 如果一段脚本中使用了
wait_fence()
或StartInterrupt()/StopInterrupt()
,则需要将这段脚本的执行时间标记为before_checkpoint
,具体语法请参考test_minigame.txt
。
- 如果一段脚本中使用了
- 在小游戏的controller class里写一个
Show
函数,用来显示小游戏的UI - 按照Lua接口注册生成这个class的Lua接口
- 在Lua中调用
__Nova.小游戏名字:Show()
,就会显示小游戏的UI,代替show(prefab_loader, prefab_name)
- 你需要自己调用
minigame
函数中用到的其他东西