Unity運行時刻資源管理

Unity運行時刻資源管理
----------------------------------------------------------------------------------------
Asset Bundles
    製做:BuildPipeline.BuildAssetBundle()
    加載:AssetBundle.Load()
    卸載:AssetBundle.Unload(bool unloadAllLoadedObjects)
        unloadAllLoadedObjects = true:釋放解壓數據,全部已實例化的資源亦被釋放。
        unloadAllLoadedObjects = false:釋放解壓數據,已實例化的資源不釋放。

Resource Folders
    製做:Project視圖中任意名爲「Resources」文件夾下的資源,不管場景中是否用到。
    加載:Resources.Load()
    卸載:Resources.UnloadUnusedAssets(),實例經過Object.Destroy()釋放。
    工做方式:
        全部Resources資源及其相關資源都存儲於resources.assets中,但若是有資源被某場景使用,該資源則被存儲於該場景對應的sharedassets<0~n>.assets中。
        若是編譯目標平臺爲Streaming Web Player,則狀況略有不一樣。你能夠在設置中經過First Streamed Level With Resources一項指定全部Resources資源跟隨哪一場景(Level)加載。在該模式下,全部先於「First streamed Level」加載的場景,用到的Resource資源同上,都存儲於其對應的sharedassets中;後於「First streamed Level」加載的場景,其用到的Resource資源,卻存儲於resources.assets中。
----------------------------------------------------------------------------------------

Streaming Web Players
    該模式中的Streaming是以場景(Level)爲單位的,你能夠在編譯設置中指定各個場景的載入順序,Unity Web Player會按該順序自發異步加載各場景。同時,Unity也提供了經過WWW加載.unity3d場景文件的API,使開發者對場景加載有更靈活的控制權。
    實際上,WWW能夠用於網絡下載任意資源(紋理、文本、二進制文件),視頻和音頻也能夠經過WWW下載,並且能夠作到邊下載邊播放。

AssetBundle
----------------------------------------------------------------------------------------
想打包進AssetBundle中的二進制文件,其文件名後綴必須爲「.bytes」,Unity會將其視爲TextAssets對待。

AssetBundle bundle = www.assetBundle;
獲取WWW.assetBundle的一刻,由WWW下載的數據壓縮包被解壓,AssetBundle對象被建立,此時你能夠用AssetBundle.Load()實例化資源了。

除非使用AssetBundle.LoadAll()獲取全部資源,不然沒法獲得一個AssetBundle中的資源列表。通常作法是在該AssetBundle中放置一個定好名稱的TextAsset,在其中維護一份全部資源的名稱列表。

一個AssetBundle包能夠引用其餘AssetBundle包中的資源。製做時,須要調用BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies()函數對;加載時,被引用的包須要先於引用包加載。
另外,重編這種包須要開啓BuildAssetBundleOptions.DeterministicAssetBundle,以保證每次重編時所使用的資源ID都是同樣的。

你能夠在一個遊戲裏使用另外一個遊戲的AssetBundle,前提是該AssetBundle中所引用的資源,要麼存在於該AssetBundle中,要麼已經被載入了遊戲中。爲確保AssetBundle引用的資源被編進同包中,製做時可使用BuildAssetBundleOptions.CollectDependencies選項。
----------------------------------------------------------------------------------------

AssetDatabase
Unity Editor使用AssetDatabase維護項目中的全部資源文件,Unity使用這套API取代傳統的filesystem。這是一個Editor類,因此只有在名爲「Editor」的文件夾下的Script中才有用。

BuildPipeline.BuildStreamedSceneAssetBundle()或BuildPipeline.BuildPlayer(..., BuildOptions.BuildAdditionalStreamedScenes)生成的場景包,使用WWW下載後,只需調用WWW.assetBundle,而不需AssetBundle.LoadAll(),便可激活包中的場景,即調用WWW.assetBundle後,你就能夠經過Application.LoadLevel()來載入場景了。網絡

相關文章
相關標籤/搜索