(轉)Unity3D新手引導開發手記

轉自:http://www.cnblogs.com/ybgame/p/3844315.htmlhtml

最近開始接手新手引導的開發,記錄下這塊相關的心得前端

首先客戶端是Unity,在接手前,前面的同窗已經初步完成了新手引導框架的搭建,這套框架比較簡單,有優勢也有缺點,稍後一一點評服務器

clipboard

咱們的新手引導是由一個個強引導組成的,每一個強引導都有一系列的步驟,這套框架實現的功能就是:框架

1.組織一個強引導(任務)所需的步驟,並能夠一步一步前進ide

2.實現蒙版,遮罩以及高亮引導區ui

第一個功能比較簡單,首先須要有一個新手引導管理器來管理每個步驟,而後啓動第一個步驟,只須要在每一次點擊的事件處理中,通知新手引導管理器,結束當前步驟,啓動下一個步驟spa

第二個功能相對麻煩一點,首先每個步驟可能都會有一個高亮區域,咱們須要在不改動原有代碼的基礎上,實現這個高亮,首先咱們增長一個Guide攝像機,這個攝像機的優先級是最高的,他只照射Guide這個層的東西,而這個層的最底部,有一個黑色的蒙版,在步驟開始執行時,咱們只須要將要高亮的對象,設置爲該層的對象,便可高亮顯示,而且蒙版添加一個BoxCollider,來防止玩家點擊到蒙版如下的按鈕。在該新手引導步驟結束的時候,再將引導區設置回原來的層。設計

clipboard[1]

複製代碼
//找到該物件並設置其層
    private void SetObjectLayer(int layer, bool isStart)
    {
        if (highLightObj != null)
        {
            if (isStart)
            {
                highLightObjLayer = highLightObj.layer;
            }

            CommonTools.SetLayer(highLightObj, layer);
        }
    }
複製代碼

 

每個強引導都是一個Prefab,裏面記錄了每一步的引導區域,在運行狀態下,找到引導區域,拖給Prefab的腳本,而後腳本找到該區域的完整路徑,拖完每一步的引導區域後,隨即保存這個Prefab,這樣咱們就能夠根據路徑來找到要高亮的引導區了code

clipboard[2]

上面的引導區拖拽是很是適合策劃人員來設計新手引導的,而動態改變引導區所在的層,來實現高亮和屏蔽其餘按鈕,也是比較巧妙的,可是這裏關於步驟完成相關的邏輯,耦合性是很是大的,咱們來看一下這裏是如何實現下一步的htm

前人留下的Demo中,是在每個步驟對應高亮區域的按鈕點擊回調中,添加一行代碼,來通知新手引導管理器步驟完成,也就是說,在實現過程當中,每個須要點擊引導區的步驟,都須要添加這麼一行代碼,工做量大,並且可維護性太差

另外,當發生界面跳轉的時候,也須要特殊處理,由於須要等新的界面加載完成,並顯示才能執行下一個步驟,因此Demo在界面徹底顯示的時候,來通知新手引導管理器,而每一個界面加載完成的標準又不統一,有些須要等某個特效播放完畢,纔會顯示,若是對相應的邏輯不是很熟悉,這塊地方很是容易出BUG

 

【改進】

在這裏特別針對上面兩個問題作出以下改進,使其無需在原先的代碼添加額外的代碼來通知步驟完成

但凡是有高亮引導區的,都是能夠點擊的,那麼必定有BoxCollider,在我獲取這個對象進行設置層級的時候,順便找到這塊引導區域的BoxCollider,通常只會有一個,由於引導的每一步都是明確的,找到這個BoxCollider以後,爲他的點擊委託添加一個委託,就是完成步驟的委託,而後在步驟結束的時候,去除這個委託,這樣就無需在每個點擊事件處,強制添加完成下一步的代碼,而是在點擊事件中,順帶執行咱們的委託(原事件處理委託+新手引導步驟結束委託),這樣既不須要添加額外的代碼,破壞封裝,總體的流程也很是清晰

對於第二個問題,關鍵是由於在界面未顯示徹底的時候,咱們沒法得到相應的高亮區域,這裏使用逆向思惟,我不等你加載完以後通知我,我主動去掃描你,當咱們開始步驟的時候,若是有引導區域先掃描引導區域,啓用一個協同,每0.2秒主動查找該引導區域,當界面徹底顯示出來的時候,必定能夠得到引導區域,也不須要在對應的界面加載完成,顯示以後寫額外的代碼來通知新手引導模塊這邊了

經過上面兩個改進,徹底解決了新手引導和原有代碼邏輯的耦合,將新手引導相關的功能所有內聚在新手引導模塊中實現了

 

【其餘改進】

一個是使用消息機制來替代單例,原有的新手引導管理器是一個單例,但當你完成新手引導以後,就再也不須要它了,因此使用消息機制來推進新手引導管理器,當新手引導完成以後,消息照常發出,只是處理者不見了

根據服務器下發的消息動態建立,只有當我須要完成新手引導時,才建立新手引導管理器,並初始化新手引導

文字提示和點擊屏幕繼續,有N種文字提示樣式,咱們將其實現爲一個Prefab,並根據配表顯示具體的樣式,內容,以及點擊屏幕後的處理

 

【和服務器聯調】

在新手引導這塊,服務器只作簡單的判斷,只要不是明顯的錯誤,咱們選擇信任前端,並作好數據的存儲以及下發工做

在遊戲的前端,咱們須要作好異常處理,以及強制引導流程,當強引導一開始,就要強制執行到結束

咱們遊戲的引導是這樣的,例如去商城購買物品這樣的一個引導,都是正常一步一步走的,當走到購買完成的步驟,即通知服務器,完成了這個引導,那麼會碰到三種異常,當咱們走到一半的時候斷掉,當咱們購買完成,將來得及通知服務器時斷線,當咱們通知了服務器以後斷線,有不同的處理

第一種,未購買掉線,則重連後讓玩家強制從新開始該引導

第二種,購買後未通知掉線,則強制執行該引導,但開始執行時,作異常檢測,例如檢測是否存在任務物品,若是是則直接完成任務

第三種,購買通知後掉線,則直接讓玩家完成該新手引導

相關文章
相關標籤/搜索