其實我一直沒想好怎麼寫這個UI框架的管理內容,總覺得自己這個設計並不合理,之前的項目和當前的框架有相關聯的內容,也有很大的出路。之前的有做過動態添加控制腳本,也有掛載腳本,這次更是一改前風,我使用了非mono類進行管理UI,然後用UIManager去管理協同程序,這裏面就存在一定的弊端,那就是沒有辦法監聽被動停止協程或者讓協程結束。當然這樣做的好處就是方便日後dll熱更新或者是修改成別的熱更新方式。
下面我們還是來談一下這次的框架設計。
框架,無非就是設計接口,UI設計了打開界面、獲取界面、回收界面、添加監聽、添加協同、移除協同一個六個接口,其中接口的意義都在字面上,也沒有什麼特別的,然後就是整體的管理流程了。
說UIManager之前,我們還是來先看看IUIModelControl這個界面對象。
是否參與回退:控制界面在當別的界面關閉時參與重新打開界面,但是目前沒有用,因爲我們打開界面的時候不會說去隱藏別的界面只會直接關閉別的界面,所以沒有什麼用;
是否允許別人關閉自己:控制別的界面打開的時候是否能關閉自己;
獲取關聯界面:這個就是打開自己的時候連帶打開的界面;
關閉排除界面:關閉界面的時候是否需要關閉別的界面;
初始化界面數據:打開界面的第一步,將數據傳遞進去;
打開自身界面:顯示界面;
關閉自身界面:關閉自己;
清除自身數據:一般是用在切換場景當中的統一關閉當中;
界面設置最上層:將界面設置到同層級的最上層;
界面的顯示和隱藏:控制界面顯示和隱藏;
數據更新:框架每幀調用方法。
當然還有一些別的方法,下面我們重點來說一下怎麼使用這個框架。
上面這個圖顯示得清楚嗎。
層級順序基本不能變動,名字也不能修改,因爲這個名字對應的是框架層級設定相對應的層級枚舉。
這個是一個UI界面。
打開UI界面的時候不是使用這個名字,而是使用集成IUIModelControl的控制類,控制類當中設定了UI預製的名字,然後通過資源管理框架進行加載的。
當你打開這個框架的時候,你會發現還有一個IUIModelLuaControl,還記得前面的場景管理器,其實是一樣的設定,這個只是添加了一個LuaTable,然後設定需要擁有init、update、destroy三個方法,這三個方法分別對應了顯示界面、更新界面和銷燬界面。
以前兩個框架當中,都是prefab和控制類同一名字,這次設定了在控制類當中書寫prefab名字以加載,一改之前的方法。
其他好像沒沒能說出什麼,感覺都不重要卻又覺得都很重要,框架具在,看官可以自己看看,有什麼錯誤和建言都可以直接留言明說。
項目GitHub地址