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

Unity 從服務(wù)器加載AssetBundle資源寫入本地內(nèi)存,并將下載保存的AB資源從本地內(nèi)存加載至場景

這篇具有很好參考價值的文章主要介紹了Unity 從服務(wù)器加載AssetBundle資源寫入本地內(nèi)存,并將下載保存的AB資源從本地內(nèi)存加載至場景。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

從服務(wù)器加載資源:

AB資源打包后有一個【目錄文件】AssetBundle,他保存了所有AB資源的路徑與名稱,

通過aLLAssetBundleURL鏈接路徑 組拼 從【目錄文件】獲得的AB資源的名字,然后再協(xié)程方法內(nèi)編寫相關(guān)代碼,從而實現(xiàn)從服務(wù)器加載資源的功能。詳細見代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-540417.html

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System.IO;

public class DownLoadAssetBundle : MonoBehaviour
{
    //AB資源文件保存在服務(wù)器中的位置(我的服務(wù)器寄了,加載不到了)
    private string mainAssetBundleURL = @"http://120.24.90.173/Luademo/AssetBundles/AssetBundles";
    private string aLLAssetBundleURL = @"http://120.24.90.173/Luademo/AssetBundles/";
    
    void Start()
    {
        StartCoroutine("DownLoadMainAssetBundle");
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            LoadAssetBundle();
        }
    }
    
    /// <summary>
    /// 下載主[目錄]AssetBundle文件
    /// </summary>
    IEnumerator DownLoadMainAssetBundle()
    {
        //創(chuàng)建一個獲取 AssetBundle 文件的 web 請求.
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(mainAssetBundleURL);

        //發(fā)送這個 web 請求.
        yield return request.SendWebRequest();

        //從 web 請求中獲取內(nèi)容,會返回一個 AssetBundle 類型的數(shù)據(jù).
        AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);

        if (ab == null)
        {
            Debug.Log("not ab");
        }

        //從這個“目錄文件 AssetBundle”中獲取 manifest 數(shù)據(jù).
        AssetBundleManifest manifest = ab.LoadAsset<AssetBundleManifest>("AssetBundleManifest");

        //獲取這個 manifest 文件中所有的 AssetBundle 的名稱信息.
        string[] names = manifest.GetAllAssetBundles();
        for (int i = 0; i < names.Length; i++)
        {
            //組拼出下載的路徑鏈接.
            Debug.Log(aLLAssetBundleURL + names[i]);

            //下載單個AssetBundle文件加載到場景中.
            //StartCoroutine(DownLoadSingleAssetBundle(aLLAssetBundleURL + names[i]));
            
            //下載AssetBundle并保存到本地.
            StartCoroutine(DownLoadAssetBundleAndSave(aLLAssetBundleURL + names[i]));
        }

    }

    /// <summary>
    /// 下載單個AssetBundle文件加載到場景中
    /// </summary>
    IEnumerator DownLoadSingleAssetBundle(string url)
    {
        UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(url);
        yield return request.SendWebRequest();
        AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);

        //通過獲取到的 AssetBundle 對象獲取內(nèi)部所有的資源的名稱(路徑),返回一個數(shù)組.
        string[] names = ab.GetAllAssetNames();
        for (int i = 0; i < names.Length; i++)
        {
            //Debug.Log(names[i]);

            //截取路徑地址中的文件名,且無后綴名. 需要引入 System.IO 命名空間.
            string tempName = Path.GetFileNameWithoutExtension(names[i]);
            Debug.Log(tempName);

            //實例化.
            GameObject obj = ab.LoadAsset<GameObject>(tempName);
            GameObject.Instantiate<GameObject>(obj);
        }
    }

    /// <summary>
    /// 下載AssetBundle并保存到本地
    /// </summary>
    IEnumerator DownLoadAssetBundleAndSave(string url)
    {
        //UnityWebRequestAssetBundle.GetAssetBundle(string uri)使用這個API下載回來的資源它是不支持原始數(shù)據(jù)訪問的.
        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        //表示下載狀態(tài)是否完畢.
        if (request.isDone)
        {
            //使用 IO 技術(shù)把這個 request 對象存儲到本地.(需要后綴)
            //SaveAssetBundle(Path.GetFileName(url), request.downloadHandler.data, request.downloadHandler.data.Length);
            SaveAssetBundle2(Path.GetFileName(url), request);
        }
    }

    /// <summary>
    /// 方法1
    /// 存儲AssetBundle為本地文件
    /// </summary>
    private void SaveAssetBundle(string fileName, byte[] bytes, int count)
    {
        //創(chuàng)建一個文件信息對象.
        FileInfo fileInfo = new FileInfo(Application.streamingAssetsPath + "http://" + fileName);

        //通過文件信息對象的“創(chuàng)建”方法,得到一個文件流對象.
        FileStream fs = fileInfo.Create();

        //通過文件流對象,往這個文件內(nèi)寫入信息.
        //fs.Write(字節(jié)數(shù)組, 開始位置, 數(shù)據(jù)長度);
        fs.Write(bytes, 0, count);

        //文件寫入存儲到硬盤,關(guān)閉文件流對象,銷毀文件對象.
        fs.Flush();
        fs.Close();
        fs.Dispose();

        Debug.Log(fileName + "下載完畢");
    }

    /// <summary>
    /// 方法2
    /// 存儲AssetBundle為本地文件
    /// </summary>
    private void SaveAssetBundle2(string fileName, UnityWebRequest request)
    {
        //構(gòu)造文件流.
        FileStream fs = File.Create(Application.streamingAssetsPath + "http://" + fileName);

        //將字節(jié)流寫入文件里,request.downloadHandler.data可以獲取到下載資源的字節(jié)流.
        fs.Write(request.downloadHandler.data, 0, request.downloadHandler.data.Length);

        //文件寫入存儲到硬盤,關(guān)閉文件流對象,銷毀文件對象.
        fs.Flush();
        fs.Close();
        fs.Dispose();

        Debug.Log(fileName + "下載完畢");
    }

    /// <summary>
    /// 從本地加載 AB 資源并實例化
    /// </summary>
    private void LoadAssetBundle()
    {
        //從本地加載 AB 資源到內(nèi)存.
        AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/player1.ab");

        //從 AB 資源中獲取資源.
        GameObject player = assetBundle.LoadAsset<GameObject>("Necromancer");

        GameObject.Instantiate<GameObject>(player, Vector3.zero, Quaternion.identity);
    }
}

到了這里,關(guān)于Unity 從服務(wù)器加載AssetBundle資源寫入本地內(nèi)存,并將下載保存的AB資源從本地內(nèi)存加載至場景的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Springboot 使用thymeleaf 服務(wù)器無法加載resources中的靜態(tài)資源異常處理

    Springboot 使用thymeleaf 服務(wù)器無法加載resources中的靜態(tài)資源異常處理

    Springboot使用thymeleaf,并 連接遠程數(shù)據(jù)庫 啟動時,無法加載resources中的靜態(tài)資源 瀏覽器報錯 后端啟動時報錯 前端打開頁面時后端報錯 打包編譯項目,顯示找不到j(luò)s、css、html等靜態(tài)資源,但本地路徑并沒有寫錯,于是我去找編譯文件,查看是不是靜態(tài)資源沒有編譯到,打開項

    2024年02月04日
    瀏覽(23)
  • unity unityWebRequest 通過http下載服務(wù)器資源

    直接下載不顯示進度 顯示下載進度 //注冊事件的方法 private void OnDownloadAssets()//下載資源 { GameController.Instance.StartCoroutine(DownloadFormServer_IE(url, savePath)); }

    2024年02月21日
    瀏覽(25)
  • Unity動態(tài)加載外部服務(wù)器上的FBX模型

    Unity動態(tài)加載外部服務(wù)器上的FBX模型

    去年某項目需要從后端服務(wù)器上加載FBX模型,但是整個項目中只有很少的地方需要用到動態(tài)模型替換,并且項目交付后需要外行人員也能輕松上手更換需要動態(tài)加載的模型,所以需要實現(xiàn)一個簡單的模型打包和動態(tài)模型加載功能。 1.創(chuàng)建一個新的腳本,編寫如下代碼 2.回到

    2024年02月11日
    瀏覽(32)
  • 【Unity】AssetBundle加載與卸載

    【Unity】AssetBundle加載與卸載

    需要注意的是同一個ab包一次只能加載一個,不可以同時加載, 報錯: The AssetBundle \\\'xxxxx\\\' can\\\'t be loaded because another AssetBundle with the same files is already loaded. 如果AB包已經(jīng)加載過則先進行卸載: 1、卸載全部的目前沒有使用的資源: Resources.UnloadUnusedAssets() 2、卸載 AssetBundle 釋放其

    2024年04月25日
    瀏覽(17)
  • Unity AssetBundle資源熱更插件

    Unity AssetBundle資源熱更插件

    取消 IsEditorMode 勾選: 采用AssetBundle的方式加載游戲內(nèi)的資源 激活 IsEditorMode 勾選: 使用AssetDatabase.LoadAssetAtPath的方式加載 僅Editor 溫馨提示: IsEditorMode 受到宏限制 如果你非 UNITY_EDITOR模式下 ( 當年在真機的時候 ) IsEditorMode強制為False 避免用戶打包后忘記關(guān)了 新建一個AssetBundl

    2024年02月11日
    瀏覽(27)
  • Unity-AssetBundle Browser 打包和加載

    Unity-AssetBundle Browser 打包和加載

    進入unity手冊中,搜素 Unity Asset Bundle Browser 工具,選擇你使用的版本號,根據(jù)顯示出的操作進行資源導(dǎo)入即可。 注:有的版本可能沒有資源鏈接,可以百度一下有很多。 1、制作預(yù)制體(省略)? 2、選擇一個預(yù)制體,在Inspector窗口下方,設(shè)置預(yù)制體的ab包名(包名只能為小寫字

    2024年04月13日
    瀏覽(23)
  • Unity的AssetBundle系統(tǒng)來動態(tài)加載FBX模型

    在Unity中,可以使用C#腳本和Unity的AssetBundle系統(tǒng)來動態(tài)加載FBX模型。以下是一個簡單的示例,演示如何動態(tài)加載FBX模型: 準備FBX模型 首先,準備一個或多個FBX模型,并將它們導(dǎo)入到Unity項目中。確保每個FBX模型都有一個獨立的游戲?qū)ο?,并且已?jīng)被正確地設(shè)置為“Static”或“

    2024年02月06日
    瀏覽(25)
  • Unity AssetBundle批量打包、加載(場景、Prefab)完整流程

    Unity AssetBundle批量打包、加載(場景、Prefab)完整流程

    1、文章介紹 2、具體思路和寫法 ????????(1)AB包的打包 ????????(2)AB包的加載 ????????(3)AB包卸載 3、結(jié)語 本篇博客主要起記錄和學(xué)習(xí)作用,簡單的介紹一下AB包批量的打包和加載AB包的方式,若各位同學(xué)有幸看到本篇博客,希望能夠?qū)δ阌兴鶐椭?(1)

    2024年02月04日
    瀏覽(26)
  • Unity的AssetBundle資源運行內(nèi)存管理的再次深入思考

    Unity的AssetBundle資源運行內(nèi)存管理的再次深入思考

    ??大家好,我是阿趙。 ??這篇文章我想寫了很久,是關(guān)于Unity項目使用AssetBundle加載資源時的內(nèi)存管理的。這篇文章不會分享代碼,只是分享思路,思路不一定正確,歡迎討論。 ??對于Unity引擎的資源內(nèi)存管理,我猜很多朋友都存在一定的疑惑。疑惑的點有非常多,包

    2024年03月22日
    瀏覽(28)
  • Unity中使用AssetBundle打包與加載的注意事項

    Unity中使用AssetBundle打包與加載的注意事項

    一、使用AssetBundle進行打包與加載 個人覺得可以參考以下兩篇博客,這個網(wǎng)上相關(guān)教程很多,還不明白的可以去百度,或者給我留言。 Unity 打包與加載AssetBundle(加載對應(yīng)的依賴) Unity中的AssetBundle 二、使用AssetBundle進行加載的時候注意事項: 注意事項一:AssetBundle名字和設(shè)置

    2024年02月11日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包