[MarsZ]Unity3d遊戲開發之Unity3d全策劃配置新手指引

Unity3d全策劃配置新手指引後端

 

前言... 2ide

版本... 2動畫

做者... 2ui

功能... 2設計

類型... 23d

觸發類型... 2server

步驟類型... 3blog

實現... 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_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 流程圖

詳細技術方案

程序主要邏輯

一、根據策劃配置的指引觸發類型,設置對應的指引觸發類型常量;

二、根據策劃配置的指引步驟類型,設置對應的指引步驟常量,設計相應的指引步驟界面(如須要界面,如點擊和拖動等須要手指播放界面。如播放某動畫須要全屏遮罩等);

三、打開界面時:

 i、根據策劃配置,檢測該界面是否有能觸發指引的GameObject,若有,給這些GameObject綁定GuideTriggerGameObject腳本,用於截獲能觸發指引的操做,如點擊(OnClick)等。截獲到操做時,發送觸發指引消息。指引控制器檢測該操做可否觸發指引組,如能夠,指引之。

 ii、根據策劃配置,檢測該界面是否有能執行指引的GameObject,若有,給這些GameObject綁定GuideGameObject腳本。當該GameObject正處於綁定的指引步驟執行中時,調整該GameObject的Layer和Depth等,讓該GameObject能夠接受點擊或其餘對應的指引操做。以及獨立於其餘顯示單元進行高亮(如須要)。

四、指引步驟執行完畢後,發送消息給控制器,控制器收到後,檢測當前指引組是否還有下一個指引步驟,若有,繼續執行下一個指引步驟,直至指引完該指引組的所有指引步驟。

五、指引組的步驟所有指引完畢後,檢測是否能觸發下一個指引組,如能,執行之,不然指引暫停。

關鍵細節答疑

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變化時,發送一個從新更新綁定GuideGameObjectGuideTriggerGameObject的事件。收到事件後,循環遍歷本界面GameObject上的全部Children GameObject,判斷其名字和索引是否對應到了base_guide_stepbase_guide中,若是有,則綁定GuideGameObjectGuideTriggerGameObject腳本,而且更新腳本里存儲的指引組和指引步驟列表。

相關文章
相關標籤/搜索