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

Unity-AssetBundle Browser 打包和加載

這篇具有很好參考價值的文章主要介紹了Unity-AssetBundle Browser 打包和加載。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、AssetBundle Browser資源的導(dǎo)入

進(jìn)入unity手冊中,搜素 Unity Asset Bundle Browser 工具,選擇你使用的版本號,根據(jù)顯示出的操作進(jìn)行資源導(dǎo)入即可。

注:有的版本可能沒有資源鏈接,可以百度一下有很多。

assetbundle browser,unity,游戲引擎

二、AssetBundle Browser 打包

1、制作預(yù)制體(省略)?
2、選擇一個預(yù)制體,在Inspector窗口下方,設(shè)置預(yù)制體的ab包名(包名只能為小寫字母)

assetbundle browser,unity,游戲引擎

assetbundle browser,unity,游戲引擎

3、包體設(shè)置
在Window-AssetBundle Browser出現(xiàn)操作頁面。

assetbundle browser,unity,游戲引擎

這是剛才把兩個預(yù)制體設(shè)置為ab包,現(xiàn)在兩個包后面顯示黃色感嘆號,這是因?yàn)閮蓚€預(yù)制體里有相同的材質(zhì)和預(yù)制體。 如果直接打包這兩個包體存在相同的資源,包體會大,還會重復(fù)加載資源。我們這里把相同的資源存放到另外的包體中當(dāng)作依賴來加載。
4、處理依賴資源
在左側(cè)區(qū)域右鍵-Add new bundle命名為rackmat,把其中一個包體里帶有黃色感嘆號的資源拖到rackmat里。

assetbundle browser,unity,游戲引擎

5、輸出打包
在Build頁面,設(shè)置打包的配置,選擇要打包的平臺,勾選Clear Folders重新打包時會清除之前打包的文件。?點(diǎn)擊Build后,資源會打包的輸出路徑的位置,同時也會復(fù)制出一個StreamingAssets文件夾,里面也會有一份打包文件。

assetbundle browser,unity,游戲引擎

? ? ? ? ? ? ? ?

assetbundle browser,unity,游戲引擎assetbundle browser,unity,游戲引擎

????????????????????????輸出的文件? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 復(fù)制出的文件?

三、AssetBundle Browser 加載

    
    /// <summary>
    /// 緩存加載的AssetBundle,防止多次加載
    /// </summary>
    private Dictionary<string, AssetBundle> m_abDic = new Dictionary<string, AssetBundle>();

    /// <summary>
    /// 它保存了各個AssetBundle的依賴信息
    /// </summary>
    private AssetBundleManifest abMainfest = null;

     /// <summary>
    /// 主包
    /// </summary>
    private AssetBundle abMain = null;

    /// <summary>
    /// 打包成不同平臺對應(yīng)的路徑
    /// </summary>
    private string PathURL
    {
      get
        {

        #if UNITY_EDITOR || UNITY_STANDALONE
                return Application.dataPath + "/StreamingAssets/";
        #elif UNITY_IPHONE
                return Application.dataPath + "/Raw/";
        #elif UNITY_ANDROID
                return Application.dataPath + "!/assets/";
        #endif
        }
    }
     
    /// <summary>
    /// 打包成不同平臺對應(yīng)的主包名稱
    /// </summary>
    private string MainABName
    {
        get
        {
        #if UNITY_EDITOR || UNITY_STANDALONE
                return "StandaloneWindows";
        #elif UNITY_IPHONE
                return "IOS";
        #elif UNITY_ANDROID
                return "Android";
        #endif
        }
    }
1、先加載主包,就是包含所有依賴信息的包。
2、通過主包文件,就可以看到當(dāng)前一共有三個ab包分別是bigrack、smallrack和rackmat,和上文創(chuàng)建的ab包一致。在上文中,把bigrack和samllrack的材質(zhì)和其他共同資源放到了rackmat包里,所以rackmat是bigrack和smallrack的依賴包。

assetbundle browser,unity,游戲引擎

????????????????????????????????????????????????????????????????????????依賴包信息?

3、當(dāng)加載ab包時,先通過主包查看它是否有依賴,如果有就加載它加入到字典中,方便下次再次加載,然后再加載ab包。
    
    // 初始化,加載AssetBundleManifest,方便后面查找依賴

    public void Init(string abName)
    {
        //加載主包
        if (abMain == null)
        {
            abMain = AssetBundle.LoadFromFile(PathURL + MainABName);
            //獲取主包下的AssetBundleManifest資源文件(存有依賴信息)
            abMainfest = abMain.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
        }

        //加載依賴
        AssetBundle ab = null;
        string[] dependences = abMainfest.GetAllDependencies(abName);
        if (dependences.Length > 0)
        {
            for (int i = 0; i < dependences.Length; i++)
            {
                if (!m_abDic.ContainsKey(dependences[i]))
                {
                    ab = AssetBundle.LoadFromFile(PathURL + dependences[i]);
                    m_abDic.Add(dependences[i], ab);
                }
            }
        }
        //加載ab包
        if (!m_abDic.ContainsKey(abName))
        {
            ab = AssetBundle.LoadFromFile(PathURL + abName);
            m_abDic[abName] = ab;
        }
    }

4、同步加載?

    //====================同步加載方式=================

    /// <summary>
    /// 指定類型同步加載
    /// </summary>
    /// <param name="abName">ab包名</param>
    /// <param name="resName">包里資源的具體名(預(yù)制體)</param>
    /// <returns></returns>
    public Object LoadAssetBundle(string abName, string resName)
    {
        Init(abName);
        Object obj = m_abDic[abName].LoadAsset(resName);
        return obj;
    }

    //泛型
    public T LoadAssetBundle<T>(string abName, string resName) where T : Object
    {
        Init(abName);
        T obj = m_abDic[abName].LoadAsset<T>(resName);
        return obj;
    }

5、異步加載?

    //====================異步加載方式=================

    /// <summary>
    /// 指定類型異步加載
    /// </summary>
    /// <param name="abName">ab包名</param>
    /// <param name="resName">包里資源的具體名(預(yù)制體)</param>
    /// <param name="callBack">回調(diào)函數(shù)</param>
     public void LoadAssetAsync(string abName, string resName, UnityAction<Object> callBack)
    {
        StartCoroutine(ReallyLoadResAsync(abName, resName, callBack));
    }
    private IEnumerator ReallyLoadResAsync(string abName, string resName, UnityAction<Object> callBack)
    {
        Init(abName);
        AssetBundleRequest abRuqest = m_abDic[abName].LoadAssetAsync(resName);
        yield return abRuqest;
        callBack(abRuqest.asset);
    }


    //泛型
    public void LoadAssetAsync<T>(string abName, string resName, UnityAction<T> callBack) where T : Object
    {
        StartCoroutine(ReallyLoadResAsync<T>(abName, resName, callBack));
    }
    private IEnumerator ReallyLoadResAsync<T>(string abName, string resName, UnityAction<T> callBack) where T : Object
    {
        Init(abName);
        AssetBundleRequest abRuqest = m_abDic[abName].LoadAssetAsync<T>(resName);
        yield return abRuqest;
        callBack(abRuqest.asset as T);
    }

6、卸載ab包?
    //====================AB包的兩種卸載方式=================

    //單個包卸載
    public void UnLoad(string abName)
    {
        if (m_abDic.ContainsKey(abName))
        {
            m_abDic[abName].Unload(false);
            //注意緩存需一并移除
            m_abDic.Remove(abName);
        }
    }

    //所有包卸載
    public void UnLoadAll()
    {
        AssetBundle.UnloadAllAssetBundles(true);
        //注意清空緩存
        m_abDic.Clear();
        abMain = null;
        abMainfest = null;
    }

7、測試
  
    public Transform[] bigRackPos;
    public Transform[] smallRackPos;

    private void Start()
    {
        LoadRack();
        LoadRackAsync();
    }

    //同步加載 
    public void LoadRack()
    {
        GameObject prefab = AssetBundleLoaderMgr.Instance.LoadAssetBundle<GameObject>("smallrack", "SmallRack");
        for (int i = 0; i < smallRackPos.Length; i++)
        {
            //實(shí)例化預(yù)設(shè)
            Instantiate(prefab, smallRackPos[i].position, Quaternion.Euler(0, 90, 0));
        }
    }
    //異步加載
    public void LoadRackAsync()
    {
        AssetBundleLoaderMgr.Instance.LoadAssetRequest<GameObject>("bigrack", "BigRack", (obj) =>
         {
             for (int i = 0; i < bigRackPos.Length; i++)
             {
                 //實(shí)例化預(yù)設(shè)
                 Instantiate(obj, bigRackPos[i].position, Quaternion.identity);
             }
         });
    }

8、成功加載出ab包?

assetbundle browser,unity,游戲引擎

注:當(dāng)前這些方法適合PC、IOS、Android項(xiàng)目加載ab包資源,對于WebGL項(xiàng)目加載ab包資源就不適用了。由于WebGL的特殊性,我會專門寫一篇針對web的ab包加載。

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

到了這里,關(guān)于Unity-AssetBundle Browser 打包和加載的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(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ī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

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

相關(guān)文章

  • 【Unity】AssetBundle加載與卸載

    【Unity】AssetBundle加載與卸載

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

    2024年04月25日
    瀏覽(17)
  • [游戲開發(fā)][Unity]Assetbundle打包篇(1)打包流程介紹

    [游戲開發(fā)][Unity]Assetbundle打包篇(1)打包流程介紹

    打包與資源加載框架目錄 先捋一下打AB包的整體思路,首先,Unity4.6版本之后就使用了全新的打包接口 無論是全新打包還是增量打包都是使用這個API,所以一切的一切,都要圍繞這個API開始講起。 該API有四個參數(shù) string outputPath AssetBundleBuild[] builds BuildAssetBundleOptions assetBundle

    2024年02月10日
    瀏覽(29)
  • [游戲開發(fā)][Unity]Assetbundle打包篇(2)打包資源配置篇

    [游戲開發(fā)][Unity]Assetbundle打包篇(2)打包資源配置篇

    打包與資源加載框架目錄 可視化配置的方式有很多種,Json、XML、以及Unity內(nèi)置的ScriptableObject序列化 配置文件里要有哪些內(nèi)容呢,很顯然,最重要的就是目標(biāo)文件路徑,其次是權(quán)重類型,權(quán)重類型有:必要打包型、被引用打包型、忽略類型。為何會有忽略類型呢,是因?yàn)槲覀?/p>

    2024年02月09日
    瀏覽(52)
  • Unity引擎打包AssetBundle后模型網(wǎng)格數(shù)據(jù)丟失問題

    Unity引擎打包AssetBundle后模型網(wǎng)格數(shù)據(jù)丟失問題

    大家好,我是阿趙。 在項(xiàng)目里面,有時候會遇到這樣一個問題。在Unity編輯器里面編寫了一個shader,在編輯器看,效果都是沒有問題的。但如果把資源打包成AssetBundle后,會發(fā)現(xiàn)shader的表現(xiàn)不對了。遇到了這種問題的時候,一般人會各自的懷疑,懷疑是不是shader寫得不對,導(dǎo)

    2024年02月07日
    瀏覽(28)
  • Unity 解決SpriteAtlas圖集打包AssetBundle白圖問題

    Unity 解決SpriteAtlas圖集打包AssetBundle白圖問題

    之前文檔上說勾選了Include in build之后,就不需要自己增加一個Binding腳本,但是仍然會彈出警告,并且會出現(xiàn)白圖現(xiàn)象 Tight Packing 勾選之后當(dāng)Sprite有透明通道可能會出現(xiàn)錯位 不推薦勾選 選項(xiàng)取消勾選之后打包AssetBundle會報(bào)警告 并且出現(xiàn)白圖現(xiàn)象 那是因?yàn)闆]有進(jìn)行bing ?Sprite

    2024年02月11日
    瀏覽(93)
  • 【Unity】AssetBundle資源異步加載以及AB包卸載

    【Unity】AssetBundle資源異步加載以及AB包卸載

    以下代碼是基于上一篇文章《AssetBundle資源同步加載》的代碼新增了異步加載和AB包卸載功能,有興趣的同學(xué)可以去看看我的上一篇文章。 由于異步加載需要配合協(xié)程進(jìn)行功能開發(fā),所以我對之前封裝的AB包資源加載管理器進(jìn)行修改,改為繼承MonoBehaviour的單例模式。 主要修改

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

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

    2024年02月06日
    瀏覽(25)
  • Unity3D打包Assetbundle丟失Shader問題

    Unity3D打包Assetbundle丟失Shader問題

    詳情見:https://www.pianshen.com/article/5391338163/ 1、Unity3D在打包Assetbundle時,可能會遇到Shader丟失的問題,解決方法:打開 Edit-Project Settings-Graphics,在Always Included Shaders列表添加上所需的shader ,再打包即可。 2、參考 3、原文復(fù)制 Scriptable RenderLoop settings This is an experimental setting wh

    2023年04月22日
    瀏覽(97)
  • [游戲開發(fā)][Unity]Assetbundle打包篇(5)使用Manifest二次構(gòu)建資源索引

    [游戲開發(fā)][Unity]Assetbundle打包篇(5)使用Manifest二次構(gòu)建資源索引

    打包與資源加載框架目錄 正文開始前,先把打包代碼放過來,請注意,前面的代碼已省略,自己去對比前面的文章。本篇文章從第一次執(zhí)行打包代碼開始。 第一次調(diào)用BuildPipeline.BuildAssetBundles打包API后(詳見代碼第七行),會返回AssetBundleManifest的引用, 【疑問】: BuildPipe

    2024年02月03日
    瀏覽(24)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包