unity3d 各個目錄的意思

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

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

可寫,就是可以加東西進去唄。可能是自己太笨,一開始沒怎么注意這意思。竟然往StreamingAssets去實現資源更新(天啦擼)。

?

Application.StreamingAssetsPath,

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

  各平臺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

  ?應用程序安裝后才會出現。該目錄獨特之處在于是可讀,可寫的,所以我們一般將下載的AssetBundle存放于此。
  各平臺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

  應用程序目錄,即Assets目錄。使用Appliction.dataPath訪問。只讀不可寫
  各平臺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

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

?

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

首先你得有一個資源服務器(FTP為例),因為StreamingAssets目錄是只讀的,我們想要實現熱更新,StreamingAssets

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

所以游戲下載資源都會下載到這里面。這樣就實現了資源的熱更新。

?

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

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

?首先優先判斷PersistentDataPath目錄下的資源是否存在,因為服務器上的資源都是下載到這里的,最新的資源通過下載到這里并且覆蓋,這里的資源

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

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

因為每個游戲一開始出大版本的時候,都會附帶大量資源,就是放在StreamingAssets目錄,所以,這里存放大量資源。這樣減少下載的次數。

其實,換一種說法,PersistentDataPath完全是給StreamingAssets的補丁目錄,我是這樣理解的。當然,在項目運用中,都需要優先最先資源判斷。

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

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

  我這邊因為涉及到WWW加載,貼出我的。

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

  Application.PersistentDataPath:

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
???/// 天吶,一個Per目錄,還兩種方法加載。這真的是最后我找出來最完美的,可以加載的,之前還有N種版本,就不提了,網上有,我是經過實測,Unity5.3.4版本
???/// 加載PC上安卓平臺,加載PC上Standalone,加載安卓真機(APK包),這三個,都是可以加載的(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
????{
????????//這樣寫,因為安卓Unity平臺是Application.isMobilePlatform==false, 而宏定義中又? ==UNITY_ANDROID。
?????????//因為我們項目中是需要同時在PC下安卓平臺和PC下 Standard平臺,哈哈
????????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
????????????}
????????}

  這個加載地址,真的是精華,可能自己太笨,就是搞這個WWW加載安卓StreamingAssets目錄,花了大把時間,因為網上,加載方式真的是尼瑪一萬種,要噴一下,這些人,不實際打到APK測一下,我MDGB呀,坑的我好慘。

?

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

   

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

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

(4)通過FTP和CDN下載資源的時候對應的 后綴是不同的。

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

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

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

具體我就不說了。

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

安卓上跟其他平臺不一樣,安裝后,這些文件實際上是在一個Jar壓縮包里,所以不能直接用讀取文件的函數去讀,而要用WWW方式
1.讀取的代碼(假設名為"文件.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("下載當前表出錯"??+ www.error.ToString());
????????????}
????????}
????}
string?GetTxtStreamUrl(string?name)
????{
????????return?STREAMING_PATH_DATABASE + name +?".txt";
????}
????string?GetTxtPerststentUrl(string?name)
????{
????????return?PERSISTENT_PATH_DATABASE + name +?".txt";
????}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!補充!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!補充:對于上面的路徑問題大家可能有些困惑。貼出最詳細全面的路徑問題,經過測試,完全沒問題(安卓,PC都可以用,實際項目中使用)
復制代碼
 string GetScenePath(string fileName){string path =DataUrl.GetFilePersistentUrl(fileName)+".unity3d";// string path= DataUrl.LOCAL_URL_PREFIX + Application.dataPath + "/StreamingAssets/" + "Scene_Main" + ".unity3d";//讀取Per目錄的時候不需要加prefix,但是讀取Streaming目錄時候需加上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
復制代碼

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WordPress Option API(數據庫儲存 API)

WordPress Option API 是提供給開發者的數據庫存儲機制&#xff0c;通過調用函數&#xff0c;可以快速、安全的把數據存儲到數據庫里&#xff08;都在 wp_options 表&#xff09;。 每個設置的模式是 key – value&#xff0c;利于擴展。Option API 不僅僅給主題和插件開發者用…

asp.net core根據用戶權限控制頁面元素的顯示

asp.net core根據用戶權限控制頁面元素的顯示 Intro 在 web 應用中我們經常需要根據用戶的不同允許用戶訪問不同的資源&#xff0c;顯示不同的內容&#xff0c;之前做了一個 AccessControlHelper 的項目&#xff0c;就是解決這個問題的。 asp.net core 支持 TagHelper 和 基于 …

Please let us know in case of any issues

Please let us know in case of any issues轉載于:https://www.cnblogs.com/zhangchenliang/archive/2010/05/18/1738117.html

Java面向對象(二)

source:http://blog.java1234.com/index.html?typeId1 Java類的繼承 1&#xff0c;繼承定義以及基本使用 定義&#xff1a;子類能夠繼承父類的屬性和方法&#xff1b; 注意點&#xff1a;Java中只支持單繼承&#xff1b; 私有方法不能繼承&#xff1b; 2&#xff0c;方法重寫 …

游戲通訊方式

農藥自從上線以來&#xff0c;依靠著強大的產品力以及騰訊的運營能力&#xff0c;在游戲市場上表現可謂是風生水起&#xff0c;根據第三方的調研數據顯示&#xff0c;《王者榮耀》滲透率達到22.3%&#xff0c;用戶規模達到2.01億人&#xff0c;每日的日活躍用戶&#xff08;DAU…

小小c#算法題 - 3 - 字符串語句反轉

題目&#xff1a;反轉語句。 如I love Beijing! 反轉后輸出 !Beijing love I 特點是指反轉單詞的順序&#xff0c;其他字符&#xff08;這個可以自己指定&#xff09;不反轉。且不能用內置函數&#xff0c;如Split和Substring。 分析&#xff1a;我們需要保證一個單詞的字…

unity5.4.3p2里面的AssetBundle打包流程

unity5.4.3p2里面的AssetBundle打包流程&#xff0c;相比之前unity4.x的打包簡單了許多&#xff0c;Unity4.X中打包的時候需要自己去管理依賴關系&#xff0c;各種BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies()&#xff0c;一不小心手一抖&…

靜態查找表的實現

#ifndef SSTABLE_H #define SSTABLE_H#include <iostream> using namespace std;/************************************************************* SSTable&#xff1a;stastic search table 靜態查找表的模板類實現 順序存儲結構 ************************************…

(轉)javascript匿名函數

文章來源: http://hi.baidu.com/koen_li/blog/item/4b14e4fc0c9b140c08244d8c.html 匿名函數的寫法 顧名思義&#xff0c;就是沒有名字的函數&#xff08;⊙﹏⊙b汗&#xff09;。匿名函數通常用于javascript作用域的控制&#xff0c;可以有效的避免對全局變量的污染。常見的匿…

BZOJ3307 雨天的尾巴

題目鏈接&#xff1a;戳我 樹上鏈修改->差分 每一個節點都開一個權值線段樹&#xff0c;最后從下往上合并qwq 代碼如下&#xff1a; #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> #define MA…

主成分分析(PCA)原理詳解 2016/12/17 · IT技術 · 主成分分析, 數學 分享到: 21 原文出處: 中科春哥 一、PCA簡介 1. 相關背景 主成分分析(Principa

主成分分析&#xff08;PCA&#xff09;原理詳解 2016/12/17 IT技術 主成分分析, 數學 分享到&#xff1a;21原文出處&#xff1a; 中科春哥 一、PCA簡介 1. 相關背景 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;&#xff0c; 是一種統…

1 Hadoop簡介

1.1 什么是Hadoop 分布式計算平臺 優點&#xff1a; 高可靠性 高擴展性 高效性 在各節點之間動態地移動數據&#xff0c;保證各個節點的動態平衡 高容錯性 數據多副本&#xff1b;重新啟動失敗任務 Hadoop應用&#xff1a; Yahoo 廣告系統Web搜索研究 Facebook 數據分…

Google Xpath Helper

Google Xpath Helper 下載方法&#xff1a; 1. 訪問http://chrome-extension-downloader.com/ 2. 把https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl拷貝到文本框里面&#xff0c;然后點擊“Download Extention”按鈕。 使用方法&am…

【Tensorflow】 Object_detection之訓練PASCAL VOC數據集

參考&#xff1a;Running Locally 1、檢查數據、config文件是否配置好 可參考之前博客&#xff1a; Tensorflow Object_detection之配置Training Pipeline Tensorflow Object_detection之準備數據生成TFRecord 2、訓練模型 PIPELINE_CONFIG_PATH/data/zxx/models/research/date…

2 Hadoop的安裝與配置

需要JDK、SSH 對于偽分布式&#xff0c;Hadoop會采取與集群相同的處理方式&#xff1a;按次序啟動文件conf/slaves中記載的主機上的進程&#xff0c;只不過在偽分布式中Slave為localhost&#xff08;自身&#xff09;。 Hadoop從三個角度將主機劃分為兩種角色&#xff1a; 最…

局域網訪問控制

訪問局域網內其他機器可用如下方式&#xff1a; \\PC-name\d$\dir 或者 \\192.168.xxx.xxx\d$\dir d代表d盤 但前提是對方機器已經把本機用戶設置為管理員賬戶轉載于:https://www.cnblogs.com/jimmy-c/p/4116804.html

Unity3d 插值同步

文中大體的思路&#xff1a; A玩家 移動時&#xff0c;本機自行移動&#xff0c;并發送移動指令給服務端&#xff0c;假設移動是成功的&#xff0c;服務端同步其他客戶端 B玩家&#xff0c;B玩家 中用一個隊列 Queue 來裝服務端來的移動指令&#xff0c;然后客戶端在updata中做…

laravel數據庫相關操作說明

輸出原生sql: DB::table(users)->where([[name,,張三]])->toSql(); //輸出sql為&#xff1a;select * from users where name?; DB::table(users)->where([[name,,張三]])->getQuery(); //輸出sql為&#xff1a;select * from users where name張三; 運行原生sql查…

1 數據挖掘基礎

1.1 什么是數據挖掘 從大量數據中挖掘出隱含的、未知的、對決策有潛在價值的關系、模式和趨勢&#xff0c;并用這些知識和規則建立用于決策支持的模型&#xff0c;提供預測性決策支持的方法、工具和過程&#xff0c;這就是數據挖掘。 是統計學、數據庫技術、人工智能技術的結…

R文件報錯的原因

一般R文件報錯&#xff0c;無非是資源文件錯誤&#xff0c;圖片命名錯誤&#xff0c;但是編譯都會報錯&#xff0c;可以很快解決。但是前幾天&#xff0c;引入一個第三方aar包后&#xff0c;項目編譯正確&#xff0c;但是就是R文件報錯&#xff0c;找不到R文件&#xff0c;整個…