Unity3D新手引導開發手記

2022-01-14 17:11:41 字數 2776 閱讀 4546

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

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

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

1.組織乙個強引導(任務)所需的步驟,並可以一步一步前進

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

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

第二個功能相對麻煩一點,首先每乙個步驟可能都會有乙個高亮區域,我們需要在不改動原有**的基礎上,實現這個高亮,首先我們增加乙個guide攝像機,這個攝像機的優先順序是最高的,他只照射guide這個層的東西,而這個層的最底部,有乙個黑色的蒙版,在步驟開始執行時,我們只需要將要高亮的物件,設定為該層的物件,即可高亮顯示,並且蒙版新增乙個boxcollider,來防止玩家點選到蒙版以下的按鈕。在該新手引導步驟結束的時候,再將引導區設定回原來的層。

找到該物件並設定其層

private

void setobjectlayer(int layer, bool

isstart)

commontools.setlayer(highlightobj, layer);

} }

每乙個強引導都是乙個prefab,裡面記錄了每一步的引導區域,在執行狀態下,找到引導區域,拖給prefab的指令碼,然後指令碼找到該區域的完整路徑,拖完每一步的引導區域後,隨即儲存這個prefab,這樣我們就可以根據路徑來找到要高亮的引導區了

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

前人留下的demo中,是在每乙個步驟對應高亮區域的按鈕點選**中,新增一行**,來通知新手引導管理器步驟完成,也就是說,在實現過程中,每乙個需要點選引導區的步驟,都需要新增這麼一行**,工作量大,而且可維護性太差

另外,當發生介面跳轉的時候,也需要特殊處理,因為需要等新的介面載入完成,並顯示才能執行下乙個步驟,所以demo在介面完全顯示的時候,來通知新手引導管理器【改進】

在這裡特別針對上面兩個問題做出如下改進,使其無需在原先的**新增額外的**來通知步驟完成

但凡有高亮引導區的,都是可以點選的,那麼一定有boxcollider,在我獲取這個物件進行設定層級的時候,順便找到這塊引導區域的boxcollider,一般只會有乙個,因為引導的每一步都是明確的,找到這個boxcollider之後,為他的點選委託新增乙個委託,就是完成步驟的委託,然後在步驟結束的時候,去除這個委託,這樣就無需在每乙個點選事件處,強制新增完成下一步的**,而是在點選事件中,順帶執行我們的委託(原事件處理委託+新手引導步驟結束委託),這樣既不需要新增額外的**,破壞封裝,整體的流程也非常清晰

對於第二個問題,關鍵是因為在介面未顯示完全的時候,我們無法獲得相應的高亮區域,這裡使用逆向思維,我不等你載入完之後通知我,我主動去掃瞄你,當我們開始步驟的時候,如果有引導區域先掃瞄引導區域,啟用乙個協同,每0.2秒主動查詢該引導區域,當介面完全顯示出來的時候,一定可以獲得引導區域,也不需要在對應的介面載入完成,顯示之後寫額外的**來通知新手引導模組這邊了

通過上面兩個改進,完全解決了新手引導和原有**邏輯的耦合,將新手引導相關的功能全部內聚在新手引導模組中實現了

【其他改進】

乙個是使用訊息機制來替代單例,原有的新手引導管理器是乙個單例,但當你完成新手引導之後,就不再需要它了,所以使用訊息機制來推動新手引導管理器,當新手引導完成之後,訊息照常發出,只是處理者不見了

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

文字提示和點選螢幕繼續,有n種文字提示樣式,我們將其實現為乙個prefab,並根據配表顯示具體的樣式,內容,以及點選螢幕後的處理

【和伺服器聯調】

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

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

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

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

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

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

Unity3D新手引導開發手記

最近開始接手新手引導的開發,記錄下這塊相關的心得 首先客戶端是unity,在接手前,前面的同學已經初步完成了新手引導框架的搭建,這套框架比較簡單,有優點也有缺點,稍後一一點評 我們的新手引導是由乙個個強引導組成的,每個強引導都有一系列的步驟,這套框架實現的功能就是 1.組織乙個強引導 任務 所需的步...

Unity3D開發(九) Unity3d流光效果

遊戲開 壇 hello game 遊戲開發群 201276069 之前曾經注意過material 中紋理的屬性都有 tiling 和offset 但沒有深究過其用途,今天才知道竟然可以利用 offset做uv 動畫,從而完成各種有趣的動畫,比如流光效果!流過效果即通常一條高光光在物體上劃過,模擬高光...

Unity3D遊戲開發

入門級unity安裝教程 一 unity五大面板 unity3d的介紹 1 介面 選單 面板 元件 unity5.x 編輯器介紹 unity開啟篇 一 滑鼠右鍵 wsadeq前後左右上下移動 shift加速移動 滑鼠右鍵旋轉檢視 滑鼠中鍵移動檢視 alt 右鍵縮放 alt 左鍵旋轉物體視角 q移動場...