Unity3d全策劃配置新手指引
前言... 2
版本... 2
作者... 2
功能... 2
類型... 2
觸發類型... 2
步驟類型... 3
實現... 4
簡要... 4
策劃方面... 4
程序方面... 4
流程圖... 5
詳細技術方案... 6
程序主要邏輯... 6
關鍵細節答疑... 6
附:Word版百度云盤下載
http://pan.baidu.com/s/1DbNxs
本文檔描述Unity3d下支持策劃靈活配置、多樣性豐富的新手指引的相關說明,如有設計上不明白的地方,可登陸游戲(《魔霸西游》)體驗。技術上有疑問的地方,可聯系作者MarsZ解答,QQ569491198。
2015年7月28日
V1.2( 2015年7月29日11:33:09)
MarsZ (QQ569491198)
在指定任意條件下,觸發某對應指引,指示玩家執行某相關操作(如點擊、拖動或播放某指令)。指引期間除執行指定操作外,無法執行其他無關操作(如點擊無關地方)。所有指引由策劃靈活配置,包括什么時候觸發、觸發什么指引等。
指引觸發條件(主條件為可能觸發指引的操作,副條件為判斷指引能否觸發時的附加判斷條件)格式: type,value=====只為主條件, 后端用=====1: 完成某指引后,主界面觸發base_guide.guide_id2: 首通某關卡后,主界面觸發 base_scene.scene_id=====只為主條件=====5: 關卡對話結束(關卡id#1,戰勝;2,戰敗;3,勝或敗;4,戰前)6: 點擊操作(界面#目標#索引 0無索引)7: 拖動操作(界面#目標1#索引1#目標2#索引2 0無索引)11:任意仙魔血量低于X(%) (只用于線性)25:章節領獎(關卡id#0,該關卡;1,除了該關卡)=====可為副條件=====10:進入區域(關卡id#區域12345)14:戰斗&回合(關卡id # 1勝;2敗;3超時;4戰敗 # 第n次)15:戰斗&回合(除了關卡id # 1勝;2敗;3超時;4戰敗 # 第n次)16:戰前配置,已上陣X個仙魔 (不包括主角)20:主角的第1個激活屬性激活了(1)(1不可修改)21:主角提升到了N級(N)=====只為副條件:12:檢測任務狀態(任務id#0,未完成;1,完成未領;2,完成已領;3,未觸發;4,完成)17:檢測指引狀態(指引id#0,未完成;1,完成)18:檢測PVP狀態(界面#0,未開始;1,開始)22:檢測戰斗狀態(關卡id#0,非戰斗中;1,戰斗中)23:檢測敵方仙魔總血量高于百分比(關卡id#XX)24:檢測模塊是否解鎖(模塊id#0,未解鎖;1,解鎖;)
……
0: 純對話1: 箭頭指示2: 手指點擊3: 手指拖動4: 手指雙擊7: 功能解鎖/鎖定9: 戰斗暫停/繼續10:發送仙魔位置11:對錯提示12:播放解鎖動畫13:移到主界位置14:戰斗界面動畫15:切換頭像16:點擊移動17:箭頭文本18:至某界面20:滑動地圖
……
策劃主要通過配置2個表來實現對指引的設置和控制,分別為:
base_guide表以及base_guide_step表。表結構分別為:

圖1 base_guide表結構

圖2 base_guide_step 表結構
程序讀取配置表,當用戶執行某些特定類型的操作,如點擊、拖動或接收/完成任務,通關某關卡等時,檢測相關操作能滿足哪個指引組的執行條件(如是否點擊了對應的指引物體、是否拖動了對應的物體到對應的位置、是否接受/完成了對應的任務、是否通關了對應的關卡)。如滿足某指引組執行條件,并且當前能執行指引(如不在加載界面,界面不在緩動等),則執行對應的指引組(base_guide表的guide_id的指引)。如不滿足,則指引暫時結束。
執行完某指引組的當前步驟的指引(base_guide_step表的guide_step_id的指引)后,判斷是否已執行完當前指引組的所有指引步驟,如未指引完,則執行該指引組中的下一個指引步驟,否則判斷是否能觸發下個指引組。

圖3 流程圖
1、根據策劃配置的指引觸發類型,設置對應的指引觸發類型常量;
2、根據策劃配置的指引步驟類型,設置對應的指引步驟常量,設計相應的指引步驟界面(如需要界面,如點擊和拖動等需要手指播放界面。如播放某動畫需要全屏遮罩等);
3、打開界面時:
i、根據策劃配置,檢測該界面是否有能觸發指引的GameObject,如有,給這些GameObject綁定GuideTriggerGameObject腳本,用于截獲能觸發指引的操作,如點擊(OnClick)等。截獲到操作時,發送觸發指引消息。指引控制器檢測該操作能否觸發指引組,如可以,指引之。
ii、根據策劃配置,檢測該界面是否有能執行指引的GameObject,如有,給這些GameObject綁定GuideGameObject腳本。當該GameObject正處于綁定的指引步驟執行中時,調整該GameObject的Layer和Depth等,讓該GameObject可以接受點擊或其他對應的指引操作。以及獨立于其他顯示單元進行高亮(如需要)。
4、指引步驟執行完畢后,發送消息給控制器,控制器收到后,檢測當前指引組是否還有下一個指引步驟,如有,繼續執行下一個指引步驟,直至指引完該指引組的全部指引步驟。
5、指引組的步驟全部指引完畢后,檢測是否能觸發下一個指引組,如能,執行之,否則指引暫停。
Q:關于指引時只讓對應的指引物體可以接受點擊、拖動等事件或者高亮。
A:指引時全屏遮罩一個指引layer(層級高于普通GameObject的層級)的蒙版,屏蔽所有無關的GameObject,對應正處于指引步驟中的GameObject,調整其層級到layer層,調整其depth以滿足深度合適(必要時可以借助UIPanel來設置depth),讓其可以接受事件。
Q:關于點擊具有某屬性值的物體觸發特定指引。如點擊某類型的某ID值的卡牌能觸發特定指引。
A:打開界面時,給能觸發指引步驟的物體綁定GuideGOInfo(繼承自MonoBehaviour)腳本,腳本上附上相關的屬性值(這些屬性在物體上的信息更新時也要即時更新)。當物體遇到觸發條件時(如被點擊等),檢測上方的屬性時是否也滿足某些指引的觸發條件,如果一切條件都滿足,即可觸發對應指引。
Q:關于“播放動畫”類型的指引步驟的執行方案。
A:對于這類型的指引步驟,當觸發時,發送消息事件給外部,請求“播放動畫”或其他操作。當這類操作完畢時,發送消息事件給指引,告知指引步驟完畢,讓指引繼續執行即可。
Q:關于斷線重連后指引的繼續。
A:關鍵指引步驟會發送消息給后端(見base_guide_step表的to_server
字段),請求后端保存該指引組和指引步驟。斷線重連后,結合后端保存的指引組ID和指引步驟,計算出當前應該處于的指引組和指引步驟,執行之。如果該步驟是某界面中執行的,則先打開對應界面再執行指引步驟即可。
Q:關于指引間隙誤操作。
A:要有個全局的指引遮罩蒙版,指引間隙間(如2步驟間等)讓蒙版的作用。指引繼續執行時或者指引結束后去掉該蒙版。
Q:某GameObject如何知道自己處于當前指引步驟。
A:該GameObject身上會有GuideGameObject腳本,繼承自MonoBehaviour,且腳本中綁定有與本GameObject關聯的指引組和指引步驟列表。當Update執行時,會判斷其綁定的指引組和指引步驟列表中,是否有當前正在執行的指引組和指引步驟,如果有,則為正在執行與自身有關的指引。
Q:如何知道某GameObject綁定有什么指引。
A:在界面初始化時及界面中可能觸發指引的GameObject變化時,發送一個重新更新綁定GuideGameObject和GuideTriggerGameObject的事件。收到事件后,循環遍歷本界面GameObject上的所有Children GameObject,判斷其名字和索引是否對應到了base_guide_step和base_guide中,如果有,則綁定GuideGameObject或GuideTriggerGameObject腳本,并且更新腳本里存儲的指引組和指引步驟列表。
新聞熱點
疑難解答