Resources資源管理
Resources:Assets目錄下面新建Resources文件夾,其中的所有資源,不論是否被場景用到,都會(huì)被打包到游戲中。

注意:
Resources類只能加載Resources文件夾下的資源,若出現(xiàn)嵌套,都會(huì)加載建議在Assets下放一個(gè)Resource文件夾就好;Resources加載資源時(shí)應(yīng)使用相對(duì)路徑,且不包含擴(kuò)展名。如Resources.Load<Texture2D>("images/texture1");
資源加載方式:
一、函數(shù)
Resources.Load()://加載Resources目錄的一個(gè)asset
Resources.LoadAsync()://Resources.Load的異步方法
Resources.LoadAll()://類似Resources.Load,但是用于加載某目錄下所有asset
Resources.LoadAssetAtPath()://加載Asset/目錄下的資源,只能用于編輯器模式,寫打包工具時(shí)可能用到
卸載資源:
Resources.UnloadAsset(Object assetToUnload):
//卸載指定的asset,只能用于從磁盤加載的;如果場景中有此asset的引用,Unity會(huì)自動(dòng)重新加載它,CPU開銷小。
Resources.UnloadUnusedAssets:
//卸載所有未被引用的asset,可以在畫面切換時(shí)調(diào)用,或定時(shí)調(diào)用釋放全局未使用資源。
被腳本的靜態(tài)變量引用的資源不會(huì)被卸載。盡量避免在游戲進(jìn)行中調(diào)用,因?yàn)樵摻涌陂_銷較大,容易引起卡頓,可嘗試用Resources.Unload(obj)逐個(gè)卸載,保證游戲的流暢度。
Resources系統(tǒng)的最佳實(shí)踐
強(qiáng)烈不建議使用Resources系統(tǒng),原因如下:
- 使用Resources文件夾將會(huì)使細(xì)粒度的內(nèi)存管理變得更難
- 對(duì)Resources文件夾的不恰當(dāng)使用會(huì)導(dǎo)致應(yīng)用程序構(gòu)架和啟動(dòng)時(shí)間變長
- 隨著Resources文件夾數(shù)量的增加,在這些文件夾中管理Asset將會(huì)變得越來越難
- 使用Resources系統(tǒng)會(huì)降低項(xiàng)目向不同平臺(tái)提供定制內(nèi)容的能立,并且導(dǎo)致項(xiàng)目無法進(jìn)行增量內(nèi)容更新
- AssetBundle變體是Unity用來在設(shè)備層面調(diào)整內(nèi)容的首選工具。
合理地使用Resources系統(tǒng)
在下面兩種特殊情況中,Resources系統(tǒng)會(huì)很有用,而且不會(huì)影響開發(fā)體驗(yàn):
Resources系統(tǒng)簡單易用的特點(diǎn)使其非常適合用于快速開發(fā)原型。不過,當(dāng)項(xiàng)目進(jìn)入正式開發(fā)階段時(shí),應(yīng)該停止使用Resources文件夾。
Resources文件夾可以用于處理一些簡單的內(nèi)容:
1.在項(xiàng)目的整個(gè)生命周期中都被使用的內(nèi)容、 非內(nèi)存密集型內(nèi)容
2.不太可能添加補(bǔ)丁或者不受平臺(tái)和設(shè)備影響的內(nèi)容
3.用于最小化引導(dǎo)的內(nèi)容
PlayerPrefs持久化存儲(chǔ)
Unity3d提供了一個(gè)用于本地持久化保存與讀取的類——PlayerPrefs。工作原理非常簡單,以鍵值對(duì)的形式將數(shù)據(jù)保存在文件中,然后程序可以根據(jù)這個(gè)名稱取出上次保存的數(shù)值。
一、PlayerPrefs類支持3中數(shù)據(jù)類型的保存和讀取,浮點(diǎn)型,整形,和字符串型。
一、函數(shù)
PlayerPrefs.SetInt(); //保存整型數(shù)據(jù);
PlayerPrefs.GetInt(); //讀取整形數(shù)據(jù);
PlayerPrefs.SetFloat(); //保存浮點(diǎn)型數(shù)據(jù);
PlayerPrefs.GetFlost(); //讀取浮點(diǎn)型數(shù)據(jù);
PlayerPrefs.SetString(); //保存字符串型數(shù)據(jù);
PlayerPrefs.GetString(); //讀取字符串型數(shù)據(jù);
PlayerPrefs.DeleteAll(); //刪除全部鍵 ;
PlayerPrefs.HasKey (string key); //判斷數(shù)據(jù)是否存在的方法;
PlayerPrefs.DeleteKey (string key); //刪除指定數(shù)據(jù);
注意:這些函數(shù)的用法基本一致使用Set進(jìn)行保存,使用Get進(jìn)行讀取。
二、使用
PlayerPrefs.SetString("Unity", "張三");
這個(gè)方法中第一個(gè)參數(shù)表示存儲(chǔ)數(shù)據(jù)的名稱,第二的參數(shù)表示具體存儲(chǔ)的數(shù)值。
張三=PlayerPrefs.GetString("Unity");
這個(gè)方法中第一個(gè)數(shù)據(jù)表示讀取數(shù)據(jù)的名稱,本來還有第二的參數(shù),表示默認(rèn)值,如果通過數(shù)據(jù)名稱沒有找到對(duì)應(yīng)的值,那么就返回默認(rèn)值,這個(gè)值也可以寫,則返回空值。
三、保存文件在不同平臺(tái)上的的存儲(chǔ)位置:
-
PC 端
②打開Unity中Edit----->Project Settings---->Player
①打開注冊(cè)表:regedit
③注冊(cè)表中---->Software2-1④找到Unity2-2⑤找到寫入的文件2-32-4
- Android 端:
①apk安裝在內(nèi)置flash存儲(chǔ)器上時(shí),
PlayerPrefs的位置是\data\data\com.company.product\shared_prefs\com.company.product.xml
②apk安裝在內(nèi)置SD卡存儲(chǔ)器上時(shí),PlayerPrefs的位置是/sdcard/Android/data/com.company.product\shared_prefs\com.company.product.xml
shared_prefs是SharedPreferences的縮寫,是Android平臺(tái)上一個(gè)輕量級(jí)的存儲(chǔ)類,用來保存應(yīng)用的一些常用配置,比如Activity狀態(tài),Activity暫停時(shí),將此activity的狀態(tài)保存到SharedPereferences中;
當(dāng)Activity重載,系統(tǒng)回調(diào)方法onSaveInstanceState時(shí),再從SharedPreferences中將值取出。SharedPreferences 可以用來進(jìn)行數(shù)據(jù)的共享,包括應(yīng)用程序之間,或者同一個(gè)應(yīng)用程序中的不同組件。
比如兩個(gè)activity除了通過Intent傳遞數(shù)據(jù)之外,也可以通過ShreadPreferences來共享數(shù)據(jù).Unity中通過PlayerPref來存儲(chǔ)游戲的一些數(shù)據(jù),特別是單機(jī)游戲。在android平臺(tái)就是存儲(chǔ)到上述位置。
另外,是否安裝到sd卡可在PlayerSetting->Other Settings->Install Location 設(shè)置。
- Mac
在Mac OS X上PlayerPrefs存儲(chǔ)在~/Library/PlayerPrefs文件夾,名為unity.[company name].[product name].plist,這里company和product名是在Project Setting中設(shè)置的,相同的plist用于在編輯器中運(yùn)行的工程和獨(dú)立模式.On iOS, the PlayerPrefs can be found in your app's plist file. It's located at:/Apps/ your app's folder /Library/Preferences/ your app's .plist
在Windows獨(dú)立模式下,PlayerPrefs被存儲(chǔ)在注冊(cè)表的 HKCU\Software[company name][product name]鍵下,這里company和product名是在Project Setting中設(shè)置的.在Windows編輯器模式下,PlayerPrefs被存儲(chǔ)在注冊(cè)表的 HKCU\Software\Unity\UnityEditor[company name][product name]鍵下,這里company和product名是在Project Setting中設(shè)置的。



