Unity中專屬資料夾介紹

大聖喲發表於2019-05-21

 

   為什麼突然會想起來寫這篇文章呢,實在是因為在開發過程中遇到了一個很容易規避掉的問題卻因為積累的少而被纏繞了近一個月.那就是因為Unity中特殊資料夾存放以及使用的問題.當時遇到這個問題的時候也花費了兩三天在解決,無疾而終,今天突然在來公司的地鐵上想到是不是因為資料夾的問題,來了之後就趕緊試一下,結果真的解決啦.所以立馬要把這個問題給記錄下來,同時也給其他可能會遇到同樣問題的同學提供一些幫助.好啦,不多說啦,開始我們的介紹吧.

1.隱藏資料夾
    以 . 開頭的資料夾會被Unity忽略.在這種資料夾中的資源是不會被匯入的,且指令碼不會被編譯.也不會出現在Project檢視中.這種資料夾我們可以在資源瀏覽器中找到這些檔案.
    
2.Standard Assets
    在這個資料夾中的指令碼最先被編譯.一般是放一些Unity內建的資源.在這個資料夾中的指令碼會被匯出到Assembly-CSharp-firstpass/Assembly-UnityScript-firstpass/Assembly-Boo-firstpass專案中.依語言而定.在這個資料夾中的指令碼比其他指令碼都要先編譯.將指令碼放在這個資料夾裡就可以用C#指令碼訪問其他語言的指令碼

3.Pro Standard Assets
    和StandardAssets相同,只不過裡面的檔案是給Pro版本的Unity使用的,當然他的功能更為豐富,例如一些高階內建的shader檔案,只有在Pro版才能起作用.
    
4.Editor
    以Editor命名的資料夾允許其中的指令碼訪問UnityEditor的API,如果指令碼中使用了在UnityEditor名稱空間中的類或方法,他必須被放在名為Editor的資料夾中,Editor資料夾的指令碼不會再build時被包含.在專案中可以有多個Editor資料夾.需要注意的是如果在普通的資料夾下,Editor資料夾可以出於目錄的任何層級.如果在特殊資料夾下,那Editor資料夾必須為特殊資料夾的直接子目錄.
    
5.Editor Default Resources
    你可以把編輯器用到的一些資源放在這裡,比如圖片,文字檔案等等.他和Editor資料夾一樣都不會被打到最終釋出報裡,僅僅用於開發時使用.你可以直接通過EditorGUIUtility.Load去讀取改資料夾下的資源,例如:
    TextAsset text = EditorGUIUtility.Load("Guide.txt") as TextAsset;

6.Plugins
    Plugins資料夾用來放native外掛.他們會被自動包含進build中去,注意這個資料夾只能是Assets資料夾的直接子目錄.例如:
    Windows:  dll檔案;
    Mac OS X: bundle檔案
    Linux下: .so檔案
    和StandardAssets一樣,這裡的指令碼會更早編譯,並且允許他們唄之外的指令碼訪問.
    
    (1).Plugins/x86||x86_64(一般PC平臺)
        如果為32bit或64bit平臺建立遊戲,那麼這個檔案下的nativeplugin檔案會被自動的包含在遊戲build中.如果這個資料夾不存在,則Unity會查詢Plugins資料夾下的nativeplugins
        如果要建立universalbuild,建議你同時使用這兩個資料夾.然後將32bit和64bit的nativeplugins放進相應的資料夾中
    (2).Plugins/Android
        在這個資料夾裡放入Java.jar檔案,用於Java語言的plugins.  
        .so檔案也會被包含進來
        官方文件:https://docs.unity3d.com/Manual/PluginsForAndroid.html
    (3).Plugins/IOS
        在這個資料夾放入 .o、.m、.mm、.c、.cpp等檔案,一般在IOS平臺匯出對應的檔案
        官方文件:https://docs.unity3d.com/Manual/PluginsForIOS.html
        
7.Resources    
    Resources資料夾允許你在指令碼中通過檔案路徑和名稱來訪問資源.放在這一資料夾的資源永遠被包含今build中,即便它沒有被呼叫.因為Unity無法判斷指令碼中有沒有訪問了其中的資源.專案中可以有多個Resources資料夾,因此不建議在多個資料夾中放同名的資源,一旦build遊戲,Resources資料夾中的所有資源都被打包進遊戲存放資源的archive中.這樣在遊戲的build中就不存在Resources資料夾啦.即便指令碼中仍然使用了資源在專案中的路徑
    官方文件:https://docs.unity3d.com/Manual/LoadingResourcesatRuntime.html
    注意:當資源作為指令碼變數被訪問時,這些資源在指令碼被例項化後就被載入進記憶體.如果資源太大,你可能不希望他被這樣載入.那麼你可以將這些大資源放進Resources資料夾中.通過Resources.Load來載入.當不再使用這些資源啦,可以通過Destroy物體,在呼叫Resources.UnloadUnusedAssets來釋放記憶體.
    特點:
    (1).資料夾內資源打包整合.asset檔案裡面.例如一些shader/material/prefab等資原始檔;
    (2).裡面的資源只能是隻讀,不能動態修改,一般動態的更細的資源不存放在這個資料夾內;
    (3).通過主執行緒載入;
    (4).Resources.Load();載入資源
        Resources.LoadAll();載入所有資源
        Resources.LoadAsync();非同步載入資源
        
8.Gizmos
    Gizmos資料夾存放用Gizmos.DrawIcon方法使用的貼圖、圖示資源.放在Gizmos資料夾中的貼圖資源可以直接通過使用名稱使用,可以被Editor作為gizmo畫在螢幕上.這裡還是要說說OnDrawGizmos()方法.只要指令碼繼承了MonoBehaviour後,並且在編輯模式下就會每一幀都執行它,釋出的遊戲肯定就不會執行啦,他只能用於scene檢視中繪製一些小物件.比如要做攝像機軌跡.那麼肯定是要在Scene檢視中做一個預覽的線,那麼用Gizmos.DrawLine和Gizmos.DrawFrustum就再好不過啦

9.WebPlayerTemplates
    用來替換webbuild的預設網頁.這個資料夾中的指令碼都不會被編譯.這個資料夾必須作為Asstes資料夾的直接子目錄
    
10.StreamingAssets
    這裡的檔案會被拷貝到build檔案中,不會修改(移動和網頁版不同,他們會被嵌入到最終的build檔案中).他們的路徑會因平臺而有差異,但都可以通過Application.streamingAssetPath來訪問.
    例如:有些遊戲為了讓所有的資源全部使用AssetBundle,會把一下初始的assetbundle放在StreamingAssets目錄下,StreamingAsset目錄下的資源都是不壓縮的,而且他比較大,會佔空間

相關文章