漫步Unity3D(三)
八、預制(Prefab)
僅此一點提出,由于它使用過于頻繁。
還Unity 一中的核心要素。原本Unity你拖放模型到場景中的一個對象,或者,創建一個幾何。或淺的地形。個物體的偏移、旋轉和縮放。然后綁定好腳本,設置好參數。假設想要第二個相同物體的話。復制一份。可是問題來了,假設有一個問題須要這n個物體都進行改動,那么就要操作n遍。這個時候預制就體現出威力了,你能夠拖拽場景中的物體到下方的資源瀏覽窗體中,這樣一個新的預制居創建出來了。
場景中的n個物體都是通過預制創建的,那么直接改動預制。場景中的這些物體就都會對應的進行改變。相同,改動完場景中的屬性,然后點擊屬性窗體中的Applybutton,預制也會被改動。唯一例外的組件是Transform組件,它不會被預制改動。
除此之外的其它組件。包含腳本配置的參數都會被改動。
能夠簡單的理解為預制就是一個配置文件,記錄了物體和相關的配置參數。
而非常多時候,我也確實拿它來做腳本配置,比方實現技能系統的時候。每一個技能都是一個預制,給它綁定好相應的腳本,配置好技能參數。然后游戲中釋放技能的時候實例化這個預制就能夠了。
之前有一個問題一直困擾著我,我想要預制支持這樣一個功能,它當中的參數能夠序列化到場景文件里。可是又不會受到Applybutton的影響。這樣我就能夠方便的把一個預制拖動到場景中,復制n份。分別做場景編輯的配置。并且不用操心我一不小心點了Applybutton把全部的場景全玩砸了。
只是如今想來。這個功能全然能夠不用預制來實現,擴展一下菜單功能直接生成并組裝好物體就能夠了。
總之,Unity中盡量使用預制來載入模型和其它資源。而不要直接使用,這個是一個正確的思路和方向。
很方便,而且易于維護。
九、文件系統和AssetsBundle
既然講到Prefab了。就順帶把Unity的文件系統也解說一下。
在手游興起之前,Unity特長是頁游開發。這個是虛幻等引擎不具備的功能。文件打包系統和AssetsBundle就是當中重要的一環。
Unity游戲執行的是一個場景,默認會載入一個場景,代碼中能夠通過Application.LoadLevel來載入其它場景。游戲執行時僅僅會存在一個場景。載入一個新的場景,舊的場景資源會被釋放掉。
當然Application.LoadLevelAdditive能夠把一個場景加入到當前場景上。每一個腳本都能夠使用DontDestroyOnLoad函數。聲明當前對象不會在場景載入的時候被銷毀掉,經常使用于單例模式。
Unity打包游戲資源的時候會依據當前場景中依賴的資源進行篩選。沒有被使用到的資源是不會被打包的。圖片被打包的時候還會依據配置進行紋理壓縮,這個功能很方便并且強大。借助于這個功能,你不須要各個平臺維護一套資源,Unity自己主動幫助你搞定了。
當然Unity把轉化后的文件緩存起來了,所以切換平臺的時候這些文件會又一次壓縮一遍。
所以我建議一個平臺checkout一份project。這樣就能夠避免多平臺切換時的時間消耗了。
Unity導出后的資源命名為level(N)和sharedassets(N).assets。你不能直接讀取一個文件,全部文件必須存在于場景中,或者是被場景中的某一個物件的腳本引用到。
這樣的模式在制作簡單的游戲或者小游戲的時候非常方便。可是游戲大了就力不從心了。我們實際游戲開發中大多數碰到的還是動態載入的情況。
比方我如今的游戲就僅僅有一個場景,里面僅僅存放了幾個簡單的管理類。
全部須要的界面、場景都是執行時動態載入的。這個時候我們須要把資源(更確切的說是預制。Unity會自己主動依據依賴關系進行資源查找和打包)放到Resources目錄下。放到這個目錄下的資源不管場景有沒有使用到都會被導出。而且代碼中能夠使用Resources.Load("文件路徑")來載入這個物件。
載入好物件后再通過Instantiate函數實例化這個對象,然后就能夠正常使用了。
最后再說一說AssetsBundle,這個也是一個小的文件系統。
我們為了降低安裝包的體積,或者是為了自己主動更新資源,必需要使用AssetsBundle來打包資源。
我們能夠通過擴展編輯器來寫一個ExportResource的函數,將指定的文件打包成AssetsBundle,然后能夠將這個包放到server上面,游戲執行的時候動態下載并載入。能夠說一個mmo的實現必定要使用到這個功能。它是對Unity相對封閉的文件系統的一個開放接口。
十、物件屬性的配置和編輯器擴展
這個是很出彩的功能,借助于反射機制。這個功能無比的便捷和強大。你僅僅要寫一個腳本。然后加入一個public的變量。然后就能夠在編輯器中設置這個值了。當然Unity僅僅識別內建類型。自定義的類要加上[System.Serializable]來聲明。
Unity的編輯器擴展功能很強大,你能夠輕易的重寫屬性窗體中的顯示內容和顯示方式,也能夠加入一個button來實現某個特殊功能。Unity 的內建GUI最大的用途就是這里了。
十一、關于Editor目錄的說明
假設你看下Unity自己主動生成的vsproject。會發現project數目有可能會達到七八個。 Unity全部編輯器相關的腳本文件都要放到Editor文件夾以下(是不是根文件夾無所謂,僅僅要名字叫Editor就能夠了)。這些文件會單獨生成一個Unity-Editor的project。全部包括UnityEditor的代碼僅僅能在編輯器模式下執行,不能公布到windows或者android上面。
(第三部要點是關于Unity 實用,第四到實際的游戲解決方案的一部分,)
版權聲明:本文博客原創文章,博客,未經同意,不得轉載。
總結
以上是生活随笔為你收集整理的漫步Unity3D(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 购买恒温恒湿试验箱需要注意哪些问题?
- 下一篇: Linux之正则表达式