影片網址:https://youtu.be/8a0IBUUMAiY
我們主要使用了以下幾種方式建置的場景來做比較:
- 直接在場景中建立的模型:
這個場景中的物件所使用的模型,是直接存在於場景中的,所以,與 Project 視窗中的任何資源檔案無關,通常可以使用 Unity 提供的 API 直接產生它。 - 使用一個模型資源建立的場景:
這個場景中的物件,是直接使用 Project 視窗中具備模型網格、UV 等資料的資源檔案所建立的,在這裡,是使用一個一體成型的模型來建立整個場景。 - 使用一個 Prefab 建立的場景:
這個場景與第二個場景相同,也是使用一個一體成型的模型來建立整個場景,不同的是,需先將模型製作成 Prefab 檔案,然後,再使用這個 Prefab 檔案來建立場景。 - 使用多個模型資源組合的場景:
這個場景中的物件,與第二個場景相同,是直接使用 Project 視窗中具備模型網格、UV 等資料的資源檔案所建立的,所不同的是,並非一體成型的模型,而是將場景需求的模型拆解成小塊,使用組合的方式建立場景。 - 使用多個 Prefab 組合的場景:
這個場景與第四個場景相同,也是將場景需求的模型拆解成小塊,使用組合的方式建立場景,所不同的是,需先將模型製作成 Prefab 檔案,然後,再使用這個 Prefab 檔案來組合出場景。
首先,先來觀察一下小場景。
小場景是個 5x5 的空間。 |
專案場景檔案資料夾
直接在場景中建立的模型 |
使用一個模型資源建立的場景 |
使用一個 Prefab 建立的場景 |
使用多個模型資源組合的場景 |
使用多個 Prefab 組合的場景 |
電腦桌機 Mac OS X 的 App
直接在場景中建立的模型 |
直接在場景中建立的模型 Log |
使用一個模型資源建立的場景 |
使用一個模型資源建立的場景 Log |
使用一個 Prefab 建立的場景 |
使用一個 Prefab 建立的場景 Log |
使用多個模型資源組合的場景 |
使用多個模型資源組合的場景 Log |
使用多個 Prefab 組合的場景 |
使用多個 Prefab 組合的場景 Log |
Build 成為 Xcode 專案
直接在場景中建立的模型 |
直接在場景中建立的模型 Log |
使用一個模型資源建立的場景 |
使用一個模型資源建立的場景 Log |
使用一個 Prefab 建立的場景 |
使用一個 Prefab 建立的場景 Log |
使用多個模型資源組合的場景 |
使用多個模型資源組合的場景 Log |
使用多個模型資源組合的場景 |
使用多個模型資源組合的場景 Log |
安裝到 iOS 裝置
直接在場景中建立的模型 |
使用一個模型資源建立的場景 |
使用一個 Prefab 建立的場景 |
使用多個模型資源組合的場景 |
使用多個 Prefab 組合的場景 |
Build 成為 Android 的 apk 檔
直接在場景中建立的模型 |
使用一個模型資源建立的場景 |
使用一個 Prefab 建立的場景 |
使用多個模型資源組合的場景 |
使用多個 Prefab 組合的場景 |
大場景是 38x38 的迷宮路線 |
專案場景檔案資料夾
直接在場景中建立的模型 |
使用一個模型資源建立的場景 |
使用一個 Prefab 建立的場景 |
使用多個模型資源組合的場景 |
使用多個 Prefab 組合的場景 |
電腦桌機 Mac OS X 的 App
直接在場景中建立的模型 |
直接在場景中建立的模型 Log |
使用一個模型資源建立的場景 |
使用一個模型資源建立的場景 Log |
使用一個 Prefab 建立的場景 |
使用一個 Prefab 建立的場景 |
使用多個模型資源組合的場景 |
使用多個模型資源組合的場景 |
使用多個 Prefab 組合的場景 |
使用多個 Prefab 組合的場景 |
Build 成為 Xcode 專案
直接在場景中建立的模型 |
直接在場景中建立的模型 Log |
使用一個模型資源建立的場景 |
使用一個模型資源建立的場景 Log |
使用一個 Prefab 建立的場景 |
使用一個 Prefab 建立的場景 Log |
使用多個模型資源組合的場景 |
使用多個模型資源組合的場景 Log |
使用多個 Prefab 組合的場景 |
使用多個 Prefab 組合的場景 Log |
安裝到 iOS 裝置
直接在場景中建立的模型 |
使用一個模型資源建立的場景 |
使用一個 Prefab 建立的場景 |
使用多個模型資源組合的場景 |
使用多個 Prefab 組合的場景 |
Build 成為 Android 的 apk 檔
直接在場景中建立的模型 |
使用一個模型資源建立的場景 |
使用一個 Prefab 建立的場景 |
使用多個模型資源組合的場景 |
使用多個 Prefab 組合的場景 |
以上資料可以看出,使用一體成型的模型資源或 Prefab 來建立場景,所佔用的容量最小,而且它們之間的差異很小,但是,在這個測試中,這部分是個很大的缺陷,因為,通常使用一體成型的方式來建立模型,有 100 個場景,應該不會每個場景都使用相同的模型,而這個測試則是 100 個場景重複使用相同的模型資源或 Prefab,理所當然的,所佔的容量會是最小,但在實作上,可能 100 個場景都將使用不同的模型資源或 Prefab,那麼,所佔容量可能會是最大,或者與直接在場景建立模型的做法差不多,此部分還沒有特別實際測試過。所以「使用一體成型的模型資源或 Prefab 來建立場景,所佔用的容量最小」這個結果並不可靠。
而透過程式直接在場景中建立模型來製作場景,它是很老實地在場景中記錄了整個模型的資料,各場景之間的物件彼此並沒有任何關聯,即使它們看起來一樣,模型內的資料也一樣,可是,並不會因此和節省容量。
而使用多個 Prefab 所組合起來的場景,很明顯的可以看出來,所佔用的容量最大,而且場景數量越多、場景內的物件數量越多,與其他做法的差別越大。
在 Unity 專案的開發過程中,大量的使用 Prefab 可以帶來許多好處,包含資源的重複使用,以及變更內容的方便性,相當易於維護,但經過這個實驗,發現到這是必須付出容量作為代價,不過,物件的易用性與容量之間的取捨,還是要看實際專案狀況來決定。
想要節省容量,又想要保持方便的開發流程,可能就需要製作一些簡單的工具指令來協助,例如將 Prefab 的內容,像是所包含的子物件以及 Component 等,透過自己撰寫的 Editor 程式或者 MenuItem 直接在場景中產生 GameObject.. 等,這樣,或許就比較能維持容量取捨與開發流程之間的平衡。
這個測試,還有些不足的地方,就留待未來再深入研究吧!如果,你喜歡這個文章或所展示的影片,請幫忙介紹給你的朋友,也別忘了訂閱影片頻道以及來粉絲專頁按個讚、留個言,謝謝!
使用 Unity 版本 5.2.3f1。
影片中所使用的專案可在此下載:http://1drv.ms/1mrL0Lc
2016/01/12
對於使用一個模型資源直接建立場景以及使用一個 Prefab 建立場景的做法,重新補充於另一篇「Unity:場景物件數量的影響(二)」。