Unity3D的主要構成大家都知道,首先是場景圖,場景圖上的節點構成一顆樹。
每個節點對應一個GameObject對象
然后每個GameObject有若干個組件
有一些組件會與資源產生關系,比如MeshRenderer會關聯材質,材質會關聯shader和貼圖
場景圖的一部分可以被保存為一個預設,prefab。
有時候我們會需要用預設去復用,而預設的加載似乎只能通過AB去打包,其實不然,這里我們有一個開源的庫就可以解決這個問題。
為什么不使用AB,可以見上一篇,加載(一),不使用AB一份資源全平台統一,也沒有痛苦的打包時間,資源依賴也很容易處置
代碼在GITHUB https://github.com/lightszero/easydown
其中unity_sceneexport演示場景生成
unity演示場景加載。
一、文件生成
我們先編輯一個場景,隨意一些.
然后選中他的節點,導入我們GameObject組件和MyJson組件
注意由於名字是很重要的信息,這里名稱重復,我們的導出會有影響,需要保證,同一層次的對象名字不重復。
修改一下再導出吧。
就會把這個預設導出成我們自定義的格式。然后easydown就可以不使用AB就把這個場景加載出來。
之后會生成這些文件。
二、文件加載
例子中有這樣一行,具體的設計就請自由分析了
如果正常執行這個場景就會被加載出來。
三、分析
使用和加載的地方都很簡單,可是這其中是如何完成的,你肯定會有一些好奇。
代碼都在,可自行分析,我們這里把大體思路分析一下。
首先對於場景樹和每一個組件的信息,我們都保存到了一個json內。
然后組件的保存這里做了些特殊處理,因為組件的參數可能會關聯到樹上的其他組件或者GameObject,這里就另外有一份關系表。
最后對於一些復用資源,如貼圖、模型是獨立保存的。
並且對於布局還導出了一份布局依賴資源。
這樣加載布局時,先加載布局文件盒布局依賴文件,然后根據依賴文件再加載對應的資源。
最后將布局文件還原成場景樹。
這並不是一個框架就能全部解決的事情,因為我們不能利用官方的組件序列化和還原的方法,所以我們需要針對每一個組件編寫處理程序。
這個例子中已經帶入了將一個模型渲染出來所涉及到的那些組件的處理程序。
我們項目中是用這種框架將NGUI的每一張界面打散處理。
由於開源項目不能攜帶NGUI,我將這些組件暫時注釋掉了,但你都可以從github項目中找到他們。
另外這個演示用的框架是我另外寫的,在原先的代碼上做了些調制,使用這些NGUI組件處理器可能還要稍微改寫。
不過對於能吃透這個機制,看懂這個框架的人來說,這都不算什么。