国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Unity】數(shù)據(jù)持久化路徑Application.persistentDataPath

這篇具有很好參考價值的文章主要介紹了【Unity】數(shù)據(jù)持久化路徑Application.persistentDataPath。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

今天突然想到這個路徑Application.persistentDataPath,熱更的重要路徑,該文件夾可讀可寫,在移動端唯一一個可讀寫操作的文件夾。

移動端可以將本地的資源(資源MD5值配置表)等一些文件放到StreamingAssets文件夾下,通過Copy到persistentDataPath下與服務(wù)器的版本文件配置表作比對,完成資源的熱更。

為什么不在StreamingAsset文件夾下直接操作?因為該文件夾只讀,不可寫,資源無法更新進(jìn)去。

為什么不在persistentDataPath文件夾操作,因為該文件夾是apk安裝以后,才會形成的一個文件夾,無法提前創(chuàng)建。

本來以為,persistentDataPath文件夾,是每次打開游戲,形成的,里面的數(shù)據(jù)是只在打開游戲期間臨時保存,關(guān)閉游戲就會消除,今天做個小測試,原來該文件夾是安裝完apk以后形成,里面的數(shù)據(jù)持久存在。

public Text ShowText;
    public Button WriteBtn, ReadBtn, QuitBBtn;
 
    private void Start()
    {
        WriteBtn.onClick.AddListener(WriteEvent);
        ReadBtn.onClick.AddListener(ReadEvent);
        QuitBBtn.onClick.AddListener(QuitEvent);
    }
 
    private void WriteEvent()
    {
        StreamWriter st = File.CreateText(Application.persistentDataPath + "Test.txt");
        st.Write("測試一下");
        st.Close();
    }
    private void ReadEvent()
    {
        ShowText.text = File.ReadAllText(Application.persistentDataPath + "Test.txt");
    }
 
    private void QuitEvent()
    {
        Application.Quit();
    }
【Unity】數(shù)據(jù)持久化路徑Application.persistentDataPath

先寫入該文件夾一些內(nèi)容,退出游戲,再次打開,從該文件夾讀取,顯示出來。

【Unity】數(shù)據(jù)持久化路徑Application.persistentDataPath

事實證明該文件夾數(shù)據(jù)一直存在。

Unity3D各平臺Application.xxxPath的路徑

前幾天我們游戲在一個同事的Android手機(jī)上啟動時無法正常進(jìn)入,經(jīng)查發(fā)現(xiàn)Application.temporaryCachePath和Application.persistentDataPath返回空字符串。便花時間認(rèn)真研究了一下Unity3D的路徑問題。我們常用的是以下四個路徑:

Application.dataPath

Application.streamingAssetsPath

Application.persistentDataPath

Application.temporaryCachePath

根據(jù)測試,詳細(xì)情況如下:

————————————————文章來源地址http://www.zghlxwxcb.cn/news/detail-409076.html

iOS:

Application.dataPath????????????/var/containers/Bundle/Application/app sandbox/xxx.app/Data

Application.streamingAssetsPath /var/containers/Bundle/Application/app sandbox/test.app/Data/Raw

Application.temporaryCachePath /var/mobile/Containers/Data/Application/app sandbox/Library/Caches

Application.persistentDataPath??/var/mobile/Containers/Data/Application/app sandbox/Documents

iOS和Mac OS X不同于Windows,app都是在一個沙盒空間中運(yùn)行,每個app也有一個獨(dú)立的數(shù)據(jù)存儲空間,各app彼此不能互相訪問、打擾。

dataPath是app程序包安裝路徑,app本身就在這里,此目錄是只讀的。streamingAssetsPath是dataPath下的Raw目錄。

app的獨(dú)立數(shù)據(jù)存儲目錄下有三個文件夾:Documents,Library和tmp。

Documents目錄,這個目錄用于存儲需要長期保存的數(shù)據(jù),比如我們的熱更新內(nèi)容就寫在這里。需要注意的是,iCloud會自動備份此目錄,如果此目錄下寫入的內(nèi)容較多,審核的可能會被蘋果拒掉。

Library目錄,這個目錄下有兩個子目錄,Caches和Preferences。

????Caches是一個相對臨時的目錄,適合存放下載緩存的臨時文件,空間不足時可能會被系統(tǒng)清除,Application.temporaryCachePath返回的就是此路徑。我把熱更新的臨時文件寫在這里,等一個版本的所有內(nèi)容更新完全后,再把內(nèi)容轉(zhuǎn)移到Documents目錄。

????Preferences用于應(yīng)用存儲偏好設(shè)置,用NSUserDefaults讀取或設(shè)置。

tmp目錄,臨時目錄,存放應(yīng)用運(yùn)行時臨時使用的數(shù)據(jù)。

需要注意的是,以上無論臨時、緩存或者普通目錄,如果不需要的數(shù)據(jù),都請刪除。不要占用用戶的存儲空間,像微信就是壞榜樣。

下面是各路徑對應(yīng)的OC訪問方法

app安裝路徑: [[NSBundle mainBundle] resourcePath]

app數(shù)據(jù)沙盒存儲根目錄: NSHomeDirectory()

Documents: NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)

Library:?????NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)

Caches:?????NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)

tmp:????????NSTemporaryDirectory()

Android:

Application.dataPath??????????? /data/app/package name-1/base.apk

Application.streamingAssetsPath jar:file:///data/app/package name-1/base.apk!/assets

Application.temporaryCachePath /storage/emulated/0/Android/data/package name/cache

Application.persistentDataPath?? /storage/emulated/0/Android/data/package name/files

看Android上的路徑,跟iOS有點(diǎn)類似,簡單說一下。Android的幾個目錄是apk程序包、內(nèi)存存儲(InternalStorage)和外部存儲(ExternalStorage)目錄。

apk程序包目錄: apk的安裝路徑,/data/app/package name-n/base.apk,dataPath就是返回此目錄。

內(nèi)部存儲目錄: /data/data/package name-n/,用戶自己或其它app都不能訪問該目錄。打開會發(fā)現(xiàn)里面有4個目錄(需要root)

????cache 緩存目錄,類似于iOS的Cache目錄

????databases 數(shù)據(jù)庫文件目錄

????files 類似于iOS的Documents目錄

????shared_prefs 類似于iOS的Preferences目錄,用于存放常用設(shè)置,比如Unity3D的PlayerPrefs就存放于此

外部存儲目錄: 在內(nèi)置或外插的sd上,用戶或其它app都可以訪問,外部存儲目錄又分私有和公有目錄。

????公有目錄是像DCIM、Music、Movies、Download這樣系統(tǒng)創(chuàng)建的公共目錄,當(dāng)然你也可以像微信那樣直接在sd卡根目錄創(chuàng)建一個文件夾。好處嘛,就是卸載app數(shù)據(jù)依舊存在。

????私有目錄在/storage/emulated/n/Android/data/package name/,打開可以看到里面有兩個文件夾cache和files。為什么跟內(nèi)部存儲目錄重復(fù)了?這是為了更大的存儲空間,以防內(nèi)存存儲空間較小。推薦把不需要隱私的、較大的數(shù)據(jù)存在這里,而需要隱私的或較小的數(shù)據(jù)存在內(nèi)部存儲空間。

下面是各路徑對應(yīng)的Java訪問方法:

apk包內(nèi): AssetManager.open(String filename)

內(nèi)部存儲: context.getFilesDir().getPath() or context.getCacheDir().getPath()

外部存儲: context.getExternalFilesDir(null).getPath() or context.getExternalCacheDir().getPath()

理解了Android存儲的原理,最后來說說開頭提到的bug,Application.temporaryCachePath/persistentDataPath返回空字符串。這其實因為權(quán)限的原因,app沒有聲明訪問外部存儲空間的權(quán)限,但是Application.temporaryCachePath/ ApplicationpersistentDataPath卻想返回外部存儲的路徑。這是Unity3D的bug,沒有權(quán)限本應(yīng)該拋出一個異?;蛘咤e誤,讓開發(fā)者知道原因。

經(jīng)反復(fù)測試發(fā)現(xiàn),有【外置SD卡】的設(shè)備上,如果聲明讀/寫外部存儲設(shè)備的權(quán)限,會返回外部存儲路徑,不聲明則會返回內(nèi)部存儲路徑,這樣不會有問題。而在【無外置SD卡】的設(shè)備上,不管是否聲明讀/寫外部存儲設(shè)備的權(quán)限,Application.temporaryCachePath/persistentDataPath都返回外部存儲路徑,但是又沒有權(quán)限,就可能會導(dǎo)致返回null了,之所以說可能是因為這個bug不是必現(xiàn),如果出現(xiàn)了設(shè)備重啟之后就好了,懷疑是linux設(shè)備mount問題。但是出了問題,我們不能跟用戶說你重啟一下手機(jī)就好了。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

1

Windows:

Application.dataPath:????????????應(yīng)用的appname_Data/

Application.streamingAssetsPath: 應(yīng)用的appname_Data/StreamingAssets

Application.temporaryCachePath: C:\Users\username\AppData\Local\Temp\company name\product name

Application.persistentDataPath:?? C:\Users\username\AppData\LocalLow\company name\product name

PlayerPrefs路徑(補(bǔ)充)

Android: /data/data/pkg-name/shared_prefs/pkg-name.v2.playerprefs.xml

iOS:/Library/Preferences/[bundle identifier].plist

Windows:HKEY_CURRENT_USER/Software/CompanyName/ProductName

Mac:~/Library/Preferences/com.CompanyName.ProductName.plist

————————————————

到了這里,關(guān)于【Unity】數(shù)據(jù)持久化路徑Application.persistentDataPath的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Unity PlayerPrefs 持久化數(shù)據(jù)存在哪

    Unity PlayerPrefs 持久化數(shù)據(jù)存在哪

    在游戲開發(fā)的過程中,我們經(jīng)常需要存檔相關(guān)的東西,稱為數(shù)據(jù)的持久化。PlayerPrefs 就是Unity提供的用于本地數(shù)據(jù)持久化保存與讀取的類。 PlayerPrefs會以鍵值對的方式存儲在本地的注冊表中。 1.存儲數(shù)據(jù) 2.獲取數(shù)據(jù) 3.刪除數(shù)據(jù) 這些數(shù)據(jù)會存儲在注冊表中,打開注冊表就能查看

    2024年02月16日
    瀏覽(25)
  • 【unity之?dāng)?shù)據(jù)持久化】-Unity公共類PlayerPrefs

    【unity之?dāng)?shù)據(jù)持久化】-Unity公共類PlayerPrefs

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity數(shù)據(jù)存儲 API大全圖解 windows平臺存儲路徑 HKCUSoftware[公司名稱][產(chǎn)品名稱] 項下的注冊表中 公司和產(chǎn)品名稱是 在“Project Settings”中設(shè)

    2024年02月04日
    瀏覽(58)
  • Unity筆記:數(shù)據(jù)持久化的幾種方式

    主要方法: ScriptableObject PlayerPrefs JSON XML 數(shù)據(jù)庫(如Sqlite) PlayerPrefs 存儲的數(shù)據(jù)是 全局共享 的,它們存儲在用戶設(shè)備的本地存儲中,并且可以被應(yīng)用程序的所有部分訪問。這意味著,無論在哪個場景、哪個腳本中,只要是同一個應(yīng)用程序中的代碼,都可以讀取和修改 Playe

    2024年02月19日
    瀏覽(23)
  • Unity學(xué)習(xí)筆記--數(shù)據(jù)持久化XML文件(1)

    Unity學(xué)習(xí)筆記--數(shù)據(jù)持久化XML文件(1)

    Xml是可拓展標(biāo)記語言,一種文件格式。我們使用xml來完成對數(shù)據(jù)持久化的存儲。等待我們有一程序運(yùn)行結(jié)束之后,將內(nèi)存中的數(shù)據(jù)進(jìn)行保存,(保存在硬盤/服務(wù)器)實現(xiàn)對數(shù)據(jù)的持久化存儲。 xml文件的讀取和保存以及修改 要點(diǎn): XMl文件的加載 XML文件節(jié)點(diǎn)的查找訪問 XML文件

    2024年02月05日
    瀏覽(26)
  • Unity學(xué)習(xí)筆記--數(shù)據(jù)持久化之PlayerPrefs的使用

    PlayerPrefs是Unity游戲引擎中的一個類,用于在游戲中存儲和訪問玩家的偏好設(shè)置和數(shù)據(jù)。它可以用來保存玩家的游戲進(jìn)度、設(shè)置選項、最高分?jǐn)?shù)等信息。PlayerPrefs將數(shù)據(jù)存儲在本地文件中,因此可以在游戲重新啟動時保持?jǐn)?shù)據(jù)的持久性。 PlayerPrefs中存儲的數(shù)據(jù)存儲在哪里? PC端

    2024年02月05日
    瀏覽(20)
  • 【unity數(shù)據(jù)持久化】XML數(shù)據(jù)管理器知識點(diǎn)

    【unity數(shù)據(jù)持久化】XML數(shù)據(jù)管理器知識點(diǎn)

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 :Unity基礎(chǔ)實戰(zhàn) XML是什么 XML(Extensible Markup Language)是一種類似于 HTML,但是沒有使用預(yù)定義標(biāo)記的語言。因此,可以根據(jù)自己的設(shè)計需求

    2024年02月11日
    瀏覽(56)
  • 【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs封裝包

    【unity數(shù)據(jù)持久化】數(shù)據(jù)管理類_PlayerPrfs封裝包

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點(diǎn)贊?? 收藏? 留言?? 加關(guān)注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 : unity數(shù)據(jù)存儲 ?? PlayerPrefs—存儲主方法 ?? PlayerPrefs—普通數(shù)據(jù)類型的反射存儲 ?? PlayerPrefs—泛型List的反射存儲 ?? PlayerPrefs—泛型

    2024年02月12日
    瀏覽(18)
  • Unity3D學(xué)習(xí)之?dāng)?shù)據(jù)持久化——PlayerPrefs

    Unity3D學(xué)習(xí)之?dāng)?shù)據(jù)持久化——PlayerPrefs

    就是保存存檔和讀取存檔。 分為兩部分,存儲和讀取,先看存儲在看讀取 PlayerPrefs 是unity提供可以存儲和讀取玩家數(shù)據(jù)的公共類 上面定義過 PlayerPrefs.SetInt(“myAge”,18) 后面再定義PlayerPrefs.SetFloat(“myAge”,20.2f) 后面進(jìn)行讀取int型 myAge時,會變成默認(rèn)值0 打印結(jié)果 0 和 100 1)父

    2024年01月18日
    瀏覽(53)
  • Unity3D學(xué)習(xí)之?dāng)?shù)據(jù)持久化——XML

    Unity3D學(xué)習(xí)之?dāng)?shù)據(jù)持久化——XML

    最終達(dá)到的效果 樹形結(jié)構(gòu) 屬性通過空格隔開 屬性名 = 引導(dǎo)包裹的內(nèi)容 這兩個代表的東西是一樣的 可以在菜鳥上使用xml驗證器 xml驗證器 在Resources文件夾創(chuàng)建一個xml文件 把文件再復(fù)制到streamingAsserts 3.2.1 通過Resources文件進(jìn)行讀取 3.2.2 通過xml文件進(jìn)行加載 獲取根節(jié)點(diǎn) 遍歷同名

    2024年01月23日
    瀏覽(18)
  • 微信小程序上傳頭像的臨時路徑,持久化保存到服務(wù)器與數(shù)據(jù)庫(nodejs后臺開發(fā))

    微信小程序上傳頭像的臨時路徑,持久化保存到服務(wù)器與數(shù)據(jù)庫(nodejs后臺開發(fā))

    從微信小程序中返回的用戶頭像臨時地址 http://tmp/H0GP7BW5HTQs846c0d9deef32d42f2203340efc4a5c3.jpeg 會失效,且只能一段時間內(nèi)在微信訪問,并且無法在公網(wǎng)訪問用戶頭像臨時地址avatarUrl。 所以需要將臨時地址avatarUrl轉(zhuǎn)成實際可用的地址保存到mysql數(shù)據(jù)庫的wxusers表的avatarUrl列中,同時將

    2024年02月14日
    瀏覽(104)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包