在做一個(gè)RPG游戲,需要在對(duì)話開(kāi)始時(shí)停止玩家移動(dòng),對(duì)話完后,恢復(fù)玩家的移動(dòng)
本來(lái)是在 ExecuteBlock 里執(zhí)行前調(diào)用自己的 OnBlockStart 函數(shù),并在 ExecuteBlock 的參數(shù)里傳入 OnBlockEnd
但如果Block有嵌套的調(diào)用,比如A會(huì)去執(zhí)行到B里,就會(huì)失效。因?yàn)樵趫?zhí)行B的時(shí)候,并不會(huì)調(diào)用 OnBlockStart 和 OnBlockEnd
本來(lái)準(zhǔn)備魔改一下 Fungus 的源碼,但改的過(guò)程中發(fā)現(xiàn) Fungus 已經(jīng)留好了接口。但這個(gè)接口查了 Google 和 百度都沒(méi)有相關(guān)信息,所以記錄在這里
只需要添加委托就可以了
BlockSignals.OnBlockStart += OnBlockBegin;
BlockSignals.OnBlockEnd += OnBlockEnd;
Menu 也一樣,添加對(duì)應(yīng)委托就好了
MenuSignals.OnMenuStart += OnMenuStart;
MenuSignals.OnMenuEnd += OnMenuEnd;
Menu 也可以通過(guò)委托的方式,自動(dòng)選中第一個(gè)選項(xiàng)
public void OnMenuStart(MenuDialog menu)
{
// 默認(rèn)選中第一個(gè)選項(xiàng)
menu.CachedButtons[0].Select();
}