1. Resources
- 你可以將多個Resources文件夾放在Assets目錄下的任何位置痢士,但是不建議這樣做。
- 該文件夾下的所有資源將會被壓縮并轉(zhuǎn)化成二進(jìn)制文件鳞贷,然后再對其進(jìn)行加密坯汤,最終被打到發(fā)布包中,但是在發(fā)布包中Resources文件夾已經(jīng)不復(fù)存在悄晃,所以你只能通過Resources.Load來加載資源玫霎。
- Resources為只讀文件夾,即不能動態(tài)修改妈橄。所以不要將動態(tài)更新的資源放在這里。
- 該文件夾下不應(yīng)該放太多資源翁脆,因為它的大小與啟動速度有關(guān)系眷蚓。
- 如果該文件夾是Editor的子文件夾,那么其中的資源會在打包的時候從中剝離反番。
Resources.Load ():編輯器模式下和真機(jī)上都可以使用沙热。路徑為Resources文件夾下的相對路徑叉钥,忽略后綴名。
Resources.LoadAssetAtPath ():只能在編輯器模式下使用篙贸,但是可以讀取Assets目錄下任意文件夾中的資源投队。路徑形式為:Assets/xx/xx.xxx,并且要帶后綴爵川。
Resources.UnloadAsset ():卸載指定的資源敷鸦,不包括Prefab,CPU開銷星薰薄扒披;
Resources.UnloadUnusedAssets ():一次性卸載所有未被引用的資源,即使是通過AssetBundle加載的資源也可以被卸載圃泡,不包括Prefab碟案,CPU開銷大, 所以盡量避免在運(yùn)行中調(diào)用該接口颇蜡。
2. Editor
- 你可以在Assets文件夾下的任意位置放置多個名叫Editor的文件夾价说,既可以放置在Assets根目錄下,也可以放置在其他子目錄中风秤。
- 如果把Editor文件夾放置在特殊文件夾下的話則必須放在第一層目錄下鳖目,否則不會生效;如果是普通文件夾的話則可以放置在任意層級下唁情。
- 放置在Editor文件夾下的腳本會被視為編輯器腳本疑苔,而不是運(yùn)行時腳本,這些腳本主要用來擴(kuò)展編輯器的功能以方便我們進(jìn)行開發(fā)甸鸟,因此我們一般會把一些工具類的腳本放在這里惦费,或者是一些在編輯器模式下才會用到的DLL文件。
- Editor文件夾下的所有腳本與資源都不會被打到最終的發(fā)布包中抢韭。
- Editor文件夾下的腳本不允許繼承MonoBehaviour成為Gameobject對象的組件薪贫。
3. Editor Default Resources
- 該文件夾必須放在Assets根目錄下,且整個工程只能擁有一個刻恭。
- 它的作用與Resources文件夾類似瞧省,只不過這里面存放的資源只能在編輯器模式下使用,它與Editor文件夾一樣都不會被打到最終的發(fā)布包中鳍贾。
- 你可以用EditorGUIUtility.Load來加載資源鞍匾。同樣可以通過Destroy來刪除資源,再通過調(diào)用EditorUtility.UnloadUnusedAssetsImmediate來釋放加載資源所占用的內(nèi)存骑科。
Material mat = EditorGUIUtility.Load ("HandleMaterial.mat") as Material橡淑;
4. Plugins
- 該文件夾必須放在Assets根目錄下,且整個工程只能擁有一個咆爽。
- 你可以將插件放在Plugins文件夾中來擴(kuò)展Unity的特性梁棠,這些插件通常是由C/C++編寫的原生DLL文件置森。
- 在Android或iOS平臺,你可以把要接的一些第三方SDK依賴的庫文件(例如:.jar .so .a 文件)放在這里符糊;在Windows平臺凫海,插件為 .dll 類型文件;在Mac平臺男娄,插件為 .bundle 類型文件行贪;在Linux平臺,插件為 .so 類型文件沪伙。
- Plugins中的文件將會被自動打到最終的發(fā)布包中瓮顽。
- Plugins中的腳本總是會被更早的編譯,因此允許它們被其他文件夾中的腳本調(diào)用围橡。
5. Plugins/x86
- 當(dāng)你制作一個32位或者通用(32位和64位)平臺版本的時候暖混,如果這個子文件夾存在,那么在這個子文件夾里的插件將會被自動打包到發(fā)布包中翁授,如果這個子文件夾不存在拣播,那么Unity將會轉(zhuǎn)而到父文件夾Plugins中去查找插件。
6. Plugins/x86_64
- 當(dāng)你制作一個64位或者通用(32位和64位)平臺版本的時候收擦,如果這個子文件夾存在贮配,那么在這個子文件夾里面的插件將會被自動打包到發(fā)布包中,如果這個子文件夾不存在塞赂,那么Unity將會轉(zhuǎn)而到父文件夾Plugins中去查找插件泪勒。
- 如果你在制作一個通用平臺的版本,那么建議你同時創(chuàng)建x86和x86_64這兩個文件夾宴猾,并且在這里面放入相應(yīng)32位和64位版本的插件圆存。
7. Plugins/Android
- 在該文件夾中放入任何需要被Android工程包含的.jar文件(Java插件使用)或者.so文件(Android NDK插件使用),更多內(nèi)容可以參考:PluginsForAndroid (例如:讀取通訊錄仇哆、微信分享等需要調(diào)用原生Java功能接口的jar包編譯后放在此文件夾下)
8. Plugins/iOS
一個受限制的可自動添加(作為符號鏈接)任何.a沦辙、.m、.mm讹剔、.c 或者 .cpp 文件到生成的Xcode工程里面的方法油讯。更多內(nèi)容可以參考:PluginsForIOS
如果你想要在自動添加文件到Xcode工程的這個過程中有有更多的可控性的話,你可以使用PostprocessBuildPlayer這個功能延欠,而且使用這個功能也并不要求你將相應(yīng)的處理文件放入到 Plugins/iOS文件夾中陌兑。更多可以參考:BuildPlayerPipeline
9. StreamingAssets
- 你只能擁有一個StreamingAssets文件夾,且它必須放在Assets根目錄下由捎。
- 它是一個只讀文件夾诀紊,不會被壓縮,主要用來存放二進(jìn)制文件隅俘。
- 該文件夾中的內(nèi)容會被原封不動的拷貝到發(fā)布包中的同名文件夾下(移動平臺與網(wǎng)頁版除外邻奠,它會被嵌入到最終的發(fā)布包中),它的路徑在不同平臺上會有所差異为居,但是都可以統(tǒng)一用Application.streamingAssetsPath(請看下面)來獲取它們碌宴。
Win: D:/Project目錄/Assets/StreamingAssets
Mac: /Users/用戶名/Desktop/Project目錄/Assets/StreamingAssets
Android: jar:file:///data/app/com.Company.ProductName-1/base.apk!/assets
iOS:/var/mobile/containers/Bundle/Application/xx-xx-xx-xxx/xx.app/Data/Raw
- 不同的加載方式又會導(dǎo)致在各個平臺上的路徑有所不同。
沒有前綴蒙畴,使用類似AssetBundle.LoadFromFile這種本地加載的方式:
安卓平臺:string path = Application.dataPath + "/assets";
其他平臺:string path = Application.streamingAssetsPath;必須要加前綴贰镣,使用類似WWW這種網(wǎng)絡(luò)加載的方式:
安卓平臺:string path = Application.streamingAssetsPath;
其他平臺:string path = "file://" + Application.streamingAssetsPath;
- 有些項目為了讓所有的資源都使用AssetBundle,會把一些初始的AssetBundle文件放到該文件夾下膳凝,然后運(yùn)行的時候再把這些AssetBundle文件拷貝到沙盒目錄下碑隆,如果這些AssetBundle文件有更新的話,再把沙盒目錄中的這些文件覆蓋掉蹬音。
10. PersistentDataPath
- 該目錄是應(yīng)用程序的沙盒目錄上煤,只有在應(yīng)用程序安裝后才會出現(xiàn)。但是在Android平臺既可以是應(yīng)用程序的沙盒目錄著淆,也可以是SD卡劫狠。在打Android包的時候,PlayerSettings下的Other Settings選項卡中有一個叫Write Access的選項永部,可以設(shè)置它的路徑是沙盒目錄還是SD卡独泞。
- 該目錄雖然支持讀寫,但是只有在應(yīng)用程序運(yùn)行時才能對其進(jìn)行操作苔埋。因此你要是想提前將數(shù)據(jù)放入這個目錄中是不可行的。
- 該目錄可以在電腦上進(jìn)行查看组橄、修改、清理晨炕,從而方便我們進(jìn)行調(diào)試。
- 該目錄適合存放一些可持久化的數(shù)據(jù)文件瓮栗,例如從網(wǎng)絡(luò)上下載的AssetBundle文件可以存放在這里削罩。下面是該目錄在各平臺上的路徑。
Win:C:\Users\用戶名\AppData\LocalLow\company name\product name
Mac:/Users/用戶名/Library/Application Support/company name/Project目錄
Android:/data/data/com.Company.ProductName/files
iOS:/var/mobile/Containers/Data/Application/xx-xx-xx-xx-xxx/Documents
11. DataPath
- 應(yīng)用程序存放數(shù)據(jù)文件所在的文件夾的路徑弥激,只讀愿阐。
Win:D:/Project目錄/Assets
Mac:/Users/用戶名/Desktop/Project目錄/Assets
Android:/data/app/com.Company.ProductName-1/base.apk!
iOS:/var/mobile/Containers/Bundle/Application/xx-xx-xx-xx-xxx/xx.app/Data
12. TemporaryCachePath
- 臨時數(shù)據(jù)的緩沖目錄微服,只讀。對于同一平臺缨历,在不同程序中調(diào)用此屬性時以蕴,其返回值是相同的,但是在不同的運(yùn)行平臺下丛肮,其返回值是不一樣的。
Win:C:/Users/用戶名/AppData/Local/Temp/company name/product name
Mac:/var/folders/xx/xxxxxxxxxx/T/company name/product name
Android:/storage/emulated/0/Android/data/com.Company.ProductName/cache(Android4.2版本之后添加了一種“新用戶”的特性焚廊,0代表當(dāng)前設(shè)備擁有者)
iOS:/var/mobile/Containers/Data/Application/xx-xx-xx-xx-xxx/Library/Caches
13. Gizmos
- 你只能擁有一個Gizmos文件夾习劫,而且它必須放在項目的Assets根目錄中。
- 在編輯器模式下你可以將圖標(biāo)或貼圖添加到場景視圖中诽里。
- 你可以傳遞一個Vector3坐標(biāo)與一個相對路徑名稱來繪制這些圖像。
void OnDrawGizmos ()
{
Gizmos.DrawIcon (transform.position, "Icon.png", true);
}
參考: