日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity3d 各个目录的意思

發(fā)布時(shí)間:2023/11/30 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity3d 各个目录的意思 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.首先,你得理解Unity中各個(gè)目錄的意思?

我這里說的是移動(dòng)平臺(tái)(安卓舉例),讀,寫。所謂讀,就是你出大版本的包之后,這個(gè)只讀的話,就一輩子就這些東西了,不會(huì)改變了,不會(huì)有其他資源來覆蓋或者增加啦。

可寫,就是可以加?xùn)|西進(jìn)去唄。可能是自己太笨,一開始沒怎么注意這意思。竟然往StreamingAssets去實(shí)現(xiàn)資源更新(天啦擼)。

?

Application.StreamingAssetsPath,

StreamingAssets目錄必須在Assets根目錄下,該目錄下所有資源也會(huì)被打包到游戲里,不同于Resources目錄,該目錄下的資源不會(huì)進(jìn)行壓縮,同樣是只讀不可寫的。
這里的只可讀,不可寫,就是除了出大版本的包(重新下載),這里面的東西永遠(yuǎn)不會(huì)變。

  各平臺(tái)StreamingAssets路徑打印:?
  Win:E:/myProj/Assets/StreamingAssets?
  Mac : /myProj/Assets/StreamingAssets?
  Andorid:jar:file:///data/app/com.myCompany.myProj-1/base.apk!/assets?
  iOS: /var/containers/Application/E5543D66-83F3-476D-8A8F-49D5332B3763/myProj.app/Data/Raw

Application.PersistentDataPath

  ?應(yīng)用程序安裝后才會(huì)出現(xiàn)。該目錄獨(dú)特之處在于是可讀,可寫的,所以我們一般將下載的AssetBundle存放于此。
  各平臺(tái)PersistentDataPath路徑打印:?
  Win:C:/Users/lodypig/Appdata/LocalLow/myCompany/myProj?
  Mac : /Users/lodypig/Library/Application Support/myCompany/myProj?
  Andorid:/data/data/com.myCompany.myProj/files?
  iOS: /var/mobile/Containers/Data/Appliction/A112252D-6B0E-459Z-9D49-CD3EAC6D47D/Documents

Application.DataPath

  應(yīng)用程序目錄,即Assets目錄。使用Appliction.dataPath訪問。只讀不可寫
  各平臺(tái)DataPath路徑:?
  Win:E:/myProj/Assets?
  Mac : /myProj/Assets/?
  Andorid:/data/app/com.myCompany.myProj-1/base.apk!?
  iOS: /var/containers/Application/E5543D66-83F3-476D-8A8F-49D5332B3763/myProj.app/Data

綜上,也就是說,要實(shí)現(xiàn)資源更新,你只有把資源下載到Application.PersistentDataPath目錄下才可實(shí)現(xiàn)資源更新(增加或者替換),其他目錄不可能實(shí)現(xiàn)。

?

2.理解上面三種目錄的關(guān)系,Unity游戲加載的資源是如何分配的?(彼此的關(guān)系)

首先你得有一個(gè)資源服務(wù)器(FTP為例),因?yàn)镾treamingAssets目錄是只讀的,我們想要實(shí)現(xiàn)熱更新,StreamingAssets

目錄里面的東西一旦第一個(gè)版本打出APK的包之后,這里的東西將永遠(yuǎn)不會(huì)變(只讀)。由于PersistentDataPath目錄是可讀可寫的,

所以游戲下載資源都會(huì)下載到這里面。這樣就實(shí)現(xiàn)了資源的熱更新。

?

注解:綠色的代表流動(dòng),可以不斷可以改變的資源。紅色線代表,讀取persistent目錄沒有的情況下,讀StreamingAssets目錄,所以,是永遠(yuǎn)不變的資源。(除非你去重新下載一個(gè)apk的包,就不是熱更了)

3.如何加載本地的資源?

?首先優(yōu)先判斷PersistentDataPath目錄下的資源是否存在,因?yàn)榉?wù)器上的資源都是下載到這里的,最新的資源通過下載到這里并且覆蓋,這里的資源

能保持跟服務(wù)器一致。(雨松之前講的UnityAssetBundle例子就是通過加載服務(wù)器上的,那個(gè)只是一個(gè)小案例,不能每次用哪下載到哪,每次都要下載,

這種方式是很不好用的,就第一次用的時(shí)候如果資源與服務(wù)器不一致,就下載到本地中,即PersistentDataPath目錄。)

因?yàn)槊總€(gè)游戲一開始出大版本的時(shí)候,都會(huì)附帶大量資源,就是放在StreamingAssets目錄,所以,這里存放大量資源。這樣減少下載的次數(shù)。

其實(shí),換一種說法,PersistentDataPath完全是給StreamingAssets的補(bǔ)丁目錄,我是這樣理解的。當(dāng)然,在項(xiàng)目運(yùn)用中,都需要優(yōu)先最先資源判斷。

?4.遇到的那些神神神.....坑?

???(1) 不要以為在PC端可以加載的路徑,安卓也可以用。

  我這邊因?yàn)樯婕暗絎WW加載,貼出我的。

  這里主要是通過www 如何加載PersistentDataPath和StreamingAssets這兩個(gè)目錄。

  Application.PersistentDataPath:

    

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 /// <summary> ???/// 天吶,一個(gè)Per目錄,還兩種方法加載。這真的是最后我找出來最完美的,可以加載的,之前還有N種版本,就不提了,網(wǎng)上有,我是經(jīng)過實(shí)測,Unity5.3.4版本 ???/// 加載PC上安卓平臺(tái),加載PC上Standalone,加載安卓真機(jī)(APK包),這三個(gè),都是可以加載的(WWW加載), ???/// </summary> ???public?static?string?PERSISTENT_PATH_DATABASE?//= LGameConfig.LOCAL_URL_PREFIX + Application.persistentDataPath + "/DataBase/"; ???{ ???????get ???????{ ???????????#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN ???????????????????return???"file:///"+ Application.persistentDataPath +?"/Test/"; ???????????#else ?????????????????????????return???"file://"+ Application.persistentDataPath +?"/Test/"; ???????????#endif ???????} ???}

  Application.StreamingAssets:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public?static?string?STREAMING_PATH_DATABASE ????{ ????????//這樣寫,因?yàn)榘沧縐nity平臺(tái)是Application.isMobilePlatform==false, 而宏定義中又? ==UNITY_ANDROID。 ?????????//因?yàn)槲覀冺?xiàng)目中是需要同時(shí)在PC下安卓平臺(tái)和PC下 Standard平臺(tái),哈哈 ????????get ????????{ ????????????if?(!Application.isMobilePlatform) ????????????{ ????????????????return?"file://"?+ Application.dataPath +?"/StreamingAssets"?+?"/DataBase/"; ????????????} ????????????else ????????????{ ????????????????return #if UNITY_ANDROID ????????Application.streamingAssetsPath+??"/DataBase/"; #else ??????"file://"?+ Application.dataPath +?"/StreamingAssets"?+?"/DataBase/"; #endif ????????????} ????????}

  這個(gè)加載地址,真的是精華,可能自己太笨,就是搞這個(gè)WWW加載安卓StreamingAssets目錄,花了大把時(shí)間,因?yàn)榫W(wǎng)上,加載方式真的是尼瑪一萬種,要噴一下,這些人,不實(shí)際打到APK測一下,我MDGB呀,坑的我好慘。

?

 (2)不要以為在PC端可以用的方法,在安卓也可以用。

   

      安卓上跟其他平臺(tái)不一樣,安裝后,這些文件實(shí)際上是在一個(gè)Jar壓縮包里,所以不能直接用讀取文件的函數(shù)去讀,而要用WWW方式
      讀取的代碼(假設(shè)名為"文件.txt")?

 (3) 安卓資源路徑加載,下載問題,真的是這次做AssetBundle最大的障礙。

(4)通過FTP和CDN下載資源的時(shí)候?qū)?yīng)的 后綴是不同的。

? FTP下載 后面用 ? "/" ?,即可。

? CDN下載 后面用 ?"//" ,即可。

(5)不同的加載方式,加載的路徑也是不同的。

具體我就不說了。

(6)記得加 加載文件的后綴名

安卓上跟其他平臺(tái)不一樣,安裝后,這些文件實(shí)際上是在一個(gè)Jar壓縮包里,所以不能直接用讀取文件的函數(shù)去讀,而要用WWW方式
1.讀取的代碼(假設(shè)名為"文件.txt")?

(7)加載方式,First In PersistentDataPath,Then StreamingAssets

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 IEnumerator LoadAnouncementText() ????{ ????????string?strUrl = GetTxtPerststentUrl(anouncementText); ????????WWW www =?new?WWW(strUrl); ????????yield?return?www; ????????if?(www.error ==?null) ????????{ ????????????mAnoucementText = ConvertByteToString(www.bytes); ????????} ????????else?if?(www.isDone) ????????{ ????????????string?strPerUrl = GetTxtStreamUrl(anouncementText); ????????????www =?new?WWW(strPerUrl); ????????????yield?return?www; ????????????if?(www.error ==?null) ????????????{ ????????????????mAnoucementText = ConvertByteToString(www.bytes); ????????????} ????????????else?if?(www.isDone) ????????????{ ????????????????Debug.LogError("下載當(dāng)前表出錯(cuò)"??+ www.error.ToString()); ????????????} ????????} ????} string?GetTxtStreamUrl(string?name) ????{ ????????return?STREAMING_PATH_DATABASE + name +?".txt"; ????} ????string?GetTxtPerststentUrl(string?name) ????{ ????????return?PERSISTENT_PATH_DATABASE + name +?".txt"; ????}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!補(bǔ)充!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!補(bǔ)充:對于上面的路徑問題大家可能有些困惑。貼出最詳細(xì)全面的路徑問題,經(jīng)過測試,完全沒問題(安卓,PC都可以用,實(shí)際項(xiàng)目中使用)
string GetScenePath(string fileName){string path =DataUrl.GetFilePersistentUrl(fileName)+".unity3d";// string path= DataUrl.LOCAL_URL_PREFIX + Application.dataPath + "/StreamingAssets/" + "Scene_Main" + ".unity3d";//讀取Per目錄的時(shí)候不需要加prefix,但是讀取Streaming目錄時(shí)候需加上prefixbool isPersistentDataPath = System.IO.File.Exists(path);if (!isPersistentDataPath){path = DataUrl.GetFileStreamingUrl(fileName)+ ".unity3d";if (!System.IO.File.Exists(path)){Debug.LogError("Per,Stream目錄 scene bundle都不存在");return null;}}return DataUrl.LOCAL_URL_PREFIX+ path;}DataUrl.cs public static string GetFilePersistentUrl(string path){return Application.persistentDataPath+"/" + path;}public static string GetFileStreamingUrl(string path){return Application.streamingAssetsPath+"/" + path;} #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WINpublic static readonly string LOCAL_URL_PREFIX = "file:///"; #elsepublic static readonly string LOCAL_URL_PREFIX="file://"; #endif

?

總結(jié)

以上是生活随笔為你收集整理的unity3d 各个目录的意思的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。