Unity3d全策划配置新手指引
前言... 2
版本... 2
作者... 2
功能... 2
類型... 2
觸發類型... 2
步驟類型... 3
實現... 4
簡要... 4
策划方面... 4
程序方面... 4
流程圖... 5
詳細技術方案... 6
程序主要邏輯... 6
關鍵細節答疑... 6
附:word版百度雲盤下載
前言
本文檔描述Unity3d下支持策划靈活配置、多樣性豐富的新手指引的相關說明,如有設計上不明白的地方,可登陸游戲(《魔霸西游》)體驗。技術上有疑問的地方,可聯系作者MarsZ解答,QQ569491198。
2015年7月28日
版本
V1.2( 2015年7月29日11:33:09)
作者
MarsZ (QQ569491198)
功能
在指定任意條件下,觸發某對應指引,指示玩家執行某相關操作(如點擊、拖動或播放某指令)。指引期間除執行指定操作外,無法執行其他無關操作(如點擊無關地方)。所有指引由策划靈活配置,包括什么時候觸發、觸發什么指引等。
類型
觸發類型
指引觸發條件(主條件為可能觸發指引的操作,副條件為判斷指引能否觸發時的附加判斷條件)
格式: type,value
=====只為主條件, 后端用=====
1: 完成某指引后,主界面觸發 base_guide.guide_id
2: 首通某關卡后,主界面觸發 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腳本,並且更新腳本里存儲的指引組和指引步驟列表。