中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

從IIS網站上下載AssetBundle,并寫入到本地磁盤指

發布時間:2020-07-30 22:25:26 來源:網絡 閱讀:9529 作者:lreach 欄目:游戲開發

啊,長嘆一聲,弄了一晚上,加半個白天

先說說歷程吧,主要是踩的坑。

首先打包就不用說了。有.asseetbundle的,有.u3d的,還有就是生成md5列表

然后下載并保存就惡心了。

本來想的很好,思路其實也正確。

AssetBundle生成到StreamingAssets文件夾下
我在本機上(win10x64),IIS開了個站,開了FTP,用FileZilla把StreamingAssets文件夾上傳到站上。
這樣這些AssetBundle就有了url:“http://localhost:9999/StreamingAssets/a.assetbundle”

上傳后,把本地的StreamingAssets文件夾刪掉,程序中判斷如果沒有這個文件夾,則創建,下載md5列表文件,按文件中列出的文件列表把遠程服務器上的所有assetbundle下載到本地來。這個過程的代碼就不說了,不復雜,執行的也很順利。主要是從下面開始坑了。

用WWW,從遠程url地址下載,再用二進制寫入本地路徑文件

string localFilePath = "...";         //要保存到本地的文件全路徑
string savePath = "...";               //文件存儲的文件夾
string url = "http://...";                  //要下載的遠程文件地址

//判斷一下文件要存儲的文件夾是否存在,不存在則創建
if(!Directory.Exists(savePath))
{
        Directory.CreateDirectory(savePath);
}

//下載
using(WWW www = new WWW(url))
{
        yield return www;
        if(www.error == null && www.isDone)
        {
                //寫入本地文件
                File.WriteAllBytes(localFilePath, www.bytes);
        }
}

好的,到此為止,沒有任何錯誤,StreamingAssets文件夾里的所有東東都下載到本地了,看文件大小好像也沒有問題。

既然下載下來了,就得用啊,還是用WWW吧

string localFilePath="file:///..";             //本地要加載的AssetBundle文件路徑
using(WWW www = new WWW(localFilePath))
{
        yield return www;
        if(www.error ==null && www.isDone)
        {
                AssetBundle ab = www.assetBundle;
                GameObject go = ab.LoadAsset<GameObject>("go");
        }
}

就在這一步

AssetBundle ab = www.assetBundle;

報錯了:
Failed to decompress data for the AssetBundle 'Memory'`

但是請注意,用new WWW(localFilePath) 加載是沒有任何問題的。

百撕不得其姐,于是搜索引擎查唄

一種說法是FileZilla向網站上傳時要設置二進制

從IIS網站上下載AssetBundle,并寫入到本地磁盤指

好吧,設置了,刪掉重新上傳,還是這樣

于是把上傳的文件直接拷貝過來,而不是在程序中用WWW下載,可以用,加載包沒有問題

這就不好玩了,但是能確定的是問題是出在從遠程下載并保存到本地這個步驟

那就換一種下載方法

用UnityWebRequest

using (UnityWebRequest req = UnityWebRequest.Get(fileUrl))
                        {
                                                        string filePath = "...";
                            string savePath = "...";
                            if (!Directory.Exists(savePath))
                            {
                                Directory.CreateDirectory(savePath);
                            }

                            yield return req.SendWebRequest();
                            if (req.isNetworkError || req.isHttpError)
                            {
                                Debug.LogError(req.downloadHandler.text);
                            }
                            else
                            {
                                File.WriteAllBytes(filePath, req.downloadHandler.data);
                                Debug.Log(fileUrl + " downloaded");
                            }
                        }

這回更有趣,只下載了.manifest文件,而assetbundle還有.u3d這些包沒有下載

看了一下,報的錯是404 File Not Found

底下還提到了MIME映射

度娘查了一下,終于發現了真正的問題。

程序是沒問題的,思路是正確的,問題出在了IIS的設置上

具體的說就是MIME的設置

即IIS中需要對不同的文件類型進行MIME映射才能使其類型的文件能在網站端正常的被讀取下載,大概是這個意思。那就設置吧

win+R

輸入compmgmt.msc回車

從IIS網站上下載AssetBundle,并寫入到本地磁盤指

從IIS網站上下載AssetBundle,并寫入到本地磁盤指

點擊‘添加’

從IIS網站上下載AssetBundle,并寫入到本地磁盤指

如上圖
擴展名把你打包的擴展名填進去,如我是用的assetbundle和u3d
MIME類型中填寫:application/octet-stream

好了,重啟一下網站,再運行,OK了,正常下載和加載,出了一個小問題
就是文件夾下名為StreamingAssets的文件,即與文件夾同名,無擴展名的文件無法下載

再查一下

還是要設置MIME,無擴展名怎么辦

還是上圖,在文件擴展名一欄中填一個點"."
MIME一欄還是填:application/octet-stream

OK了

至于manifest文件,本身就在IIS的默認設置里有

也就是說,用IIS,一定要把你打包的assetbundle文件擴展類型設置MIME,比如你打的包是xxx.ab,那ab就要像這樣設置MIME映射

再回過頭來,還把UnityWebRequest換回WWW的加載方式,也OK了

即 ,此次問題就是出在IIS的設置上,思路和程序沒有問題。

總結:

  1. 上傳時用二制方式上傳,因為都是二進制文件
  2. IIS的MIME設置要搞好

問題解決,大滿足

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

江永县| 丘北县| 朝阳区| 常州市| 台中市| 秀山| 濉溪县| 桃园县| 淄博市| 托里县| 方正县| 兴宁市| 彩票| 乐安县| 万宁市| 万源市| 渝中区| 皮山县| 根河市| 汪清县| 敖汉旗| 紫云| 蒲城县| 资阳市| 利川市| 萝北县| 阿克苏市| 安塞县| 老河口市| 汝阳县| 双鸭山市| 湘西| 洞口县| 历史| 松滋市| 星座| 自贡市| 准格尔旗| 沾化县| 疏勒县| 彩票|