Unity3d熱更新全書-載入(二)如何在不用AssetBundle的前提下動態載入預設

瘋光無線發表於2014-08-10

Unity3D的主要構成大家都知道,首先是場景圖,場景圖上的節點構成一顆樹。

每個節點對應一個GameObject物件

然後每個GameObject有若干個元件

有一些元件會與資源產生關係,比如MeshRenderer會關聯材質,材質會關聯shader和貼圖

場景圖的一部分可以被儲存為一個預設,prefab。

有時候我們會需要用預設去複用,而預設的載入似乎只能通過AB去打包,其實不然,這裡我們有一個開源的庫就可以解決這個問題。

為什麼不使用AB,可以見上一篇,載入(一),不使用AB一份資源全平臺統一,也沒有痛苦的打包時間,資源依賴也很容易處置

程式碼在GITHUB https://github.com/lightszero/easydown

其中unity_sceneexport演示場景生成

unity演示場景載入。

一、檔案生成

image

我們先編輯一個場景,隨意一些.

然後選中他的節點,匯入我們GameObject元件和MyJson元件

image選單上會多出一項,點選它

image會顯示出所有的節點,點選Parser

注意由於名字是很重要的資訊,這裡名稱重複,我們的匯出會有影響,需要保證,同一層次的物件名字不重複。

修改一下再匯出吧。

就會把這個預設匯出成我們自定義的格式。然後easydown就可以不使用AB就把這個場景載入出來。

image

之後會生成這些檔案。

二、檔案載入

例子中有這樣一行,具體的設計就請自由分析了

image

如果正常執行這個場景就會被載入出來。

image

三、分析

使用和載入的地方都很簡單,可是這其中是如何完成的,你肯定會有一些好奇。

程式碼都在,可自行分析,我們這裡把大體思路分析一下。

首先對於場景樹和每一個元件的資訊,我們都儲存到了一個json內。

然後元件的儲存這裡做了些特殊處理,因為元件的引數可能會關聯到樹上的其他元件或者GameObject,這裡就另外有一份關係表。

最後對於一些複用資源,如貼圖、模型是獨立儲存的。

並且對於佈局還匯出了一份佈局依賴資源。

這樣載入佈局時,先載入佈局檔案盒佈局依賴檔案,然後根據依賴檔案再載入對應的資源。

最後將佈局檔案還原成場景樹。

 

這並不是一個框架就能全部解決的事情,因為我們不能利用官方的元件序列化和還原的方法,所以我們需要針對每一個元件編寫處理程式。

image

這個例子中已經帶入了將一個模型渲染出來所涉及到的那些元件的處理程式。

 

我們專案中是用這種框架將NGUI的每一張介面打散處理。

image

由於開源專案不能攜帶NGUI,我將這些元件暫時註釋掉了,但你都可以從github專案中找到他們。

另外這個演示用的框架是我另外寫的,在原先的程式碼上做了些調製,使用這些NGUI元件處理器可能還要稍微改寫。

不過對於能吃透這個機制,看懂這個框架的人來說,這都不算什麼。

相關文章