當前位置:成語大全網 - 新華字典 - UnityResource加載淺析

UnityResource加載淺析

用於資源加載,常用Resource.Load<泛型>(加載文件名字)得到asset下的Resource文件中的目標文件,搜索方式是以asset目錄下子目錄為Resource名字的文件夾,再找需要加載文件的名字。返回的是泛型的對象。

值得壹說的是 如果加載文件名字在整個資源中有兩個的話,是加載目錄路徑層次高的那個Resource文件夾中的資源 ,給我的感覺這個是逐層遍歷的,Resource文件夾下面還有可以有Resource文件夾。可以在Resource文件夾下添加文件夾然後可以指定搜索某壹個文件夾中的文件。

這裏文件夾路徑必須是斜杠,而不是反斜杠 ,unity中的路徑好像都是斜杠,如果妳直接寫路徑的話,從外部輸進來好像是可以的。

看這個名字就知道了,這個是去搜索目標路徑內所有的泛型內容。返回壹個數組

這是用來釋放內存用的,在使用Destroy後其實是沒有把內存釋放的。在destroy後再使用這個方法就釋放了。值得註意的是 如果妳的Resource.Load()賦值給壹個變量後,然後Destroy這個實例對象,在使用這個方法是無法在內存中刪除的,需要把這個變量制為空就可以了 ,因為這個變量是壹直引用著Resource.Load的,所以 Resource.Load最好不要添加引用 。在使用Destroy實例對象後沒有使用此方法,再次實例新的對象是不會增加內存的消耗的。

剛學unity的時候就聽教程上說用這個方法好,可以優化資源,unity打包的時候可以把Resource文件夾的資源都打包。但是如果妳在場景中引用的話也可以在打進包裏啊,我知道這個時候妳就會說像是texture2d這種不可能在場景中都用到嘛,這樣的可以用這種方法,但是為啥要把場景所有的東西都動態加載呢?像場景模型這些固定的為什麽也要動態加載呢?是要創建自己的對象池嗎?但是這樣的動態加載感覺很雞肋啊,直接在場景中把這些固定的放好不就好了嗎?還要自己去實例化,不是很明白。如果妳換場景,不再用這個固定的模型,沒去卸載他,豈不是有增加了內存的消耗。而且美術,策劃那邊如果要改場景中的壹些東西也很不方便啊,有沒有那個大神帶發個車?

今天問問大哥知道了用這個方式是為了後面打包的時候方便分包用。

2018年11月11日更新

unity官方不推薦我們使用Resources加載方式,更加推薦使用AssetBundle的加載。給出的幾個原因是:

也不是說我們完全不能使用Resource文件夾,我們在快速開發中使用或者模型項目中使用,或者是小型項目。或者我們可以在開發是使用Resource然後在打包的時候把這裏面的文件打包成AssetBundle並刪除。

關於Resource文件夾下的序列化:

在unity打包時,Resource文件夾下的文件會生壹個類似AssetBundle打包時的依賴文件,這個文件存儲的資源文件的壹些信息,其中有File GUID和Local ID這個兩個id來代表那個文件及文件位置。然後再運行中的時候會生成壹個Instance Id,我們在遊戲中加載時,就是使用的該id。但是File GUID的效率並不高,這也是為了兼容不同平臺。這個過程就是我們打開應用時黑屏的哪個階段,官方給出的時間復雜度是O(n log(n))。關於unity的序列化可以看看這篇文章 /learn/tutorials/topics/best-practices/resources-folder

/learn/tutorials/topics/best-practices/assets-objects-and-serialization

原文鏈接: /article/22