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

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

這篇具有很好參考價值的文章主要介紹了Unity中使用AssetBundle打包與加載的注意事項。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、使用AssetBundle進行打包與加載
個人覺得可以參考以下兩篇博客,這個網上相關教程很多,還不明白的可以去百度,或者給我留言。
Unity 打包與加載AssetBundle(加載對應的依賴)
Unity中的AssetBundle
二、使用AssetBundle進行加載的時候注意事項:
注意事項一:AssetBundle名字和設置AssetBundle名字的預制體這兩個名字都要和C#代碼方法中的參數(shù)一一對應。
如果不對應的話,在Unity的控制臺會報這個錯誤:ArgumentException: The Object you want to instantiate is null.
Unity中使用AssetBundle打包與加載的注意事項

1、這是我要打包的預制體。
Unity中使用AssetBundle打包與加載的注意事項
可以看出TestCapsule這個預制體對應的AssetBundle名字我設置成為test_1
2、我是采用Unity官方提供的AB包管理插件AssetBundle Browser 進行打包。讀者可以采用自定義腳本的方式進行打包,個人只是覺得插件打包的這種方式很好用。
Unity中使用AssetBundle打包與加載的注意事項
點擊Build按鈕后,會在項目Assets文件夾下生成一個StreamingAssets文件夾,這個StreamingAssets文件夾里面就是打出來的AssetBundle文件。
Unity中使用AssetBundle打包與加載的注意事項
Unity中使用AssetBundle打包與加載的注意事項

點擊Build按鈕后,在項目Assets文件夾同級目錄還有一個AssetBundles文件夾,這個AssetBundles文件夾里面也是打出來的AssetBundle文件。
Unity中使用AssetBundle打包與加載的注意事項

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

注意:StreamingAssets文件夾和AssetBundles文件夾里面的AssetBundle文件內容都是一樣的。

3、利用C#代碼加載AssetBundle資源包(本地相對路徑加載)。

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

public class TestABLoad : MonoBehaviour
{
    void Start()
    {
        AssetBundle ab = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "test_1"));
        GameObject cube = ab.LoadAsset("TestCapsule") as GameObject;//LoadAsset方法中參數(shù)為導出前Prefab名字
        Instantiate(cube);//生成
    }
}

這里需要注意的是AssetBundle.LoadFromFile方法中的參數(shù)為打出來的AssetBundle文件路徑。
Unity中使用AssetBundle打包與加載的注意事項
也就是Assets目錄下StreamingAssets目錄中,也就是test_1這個文件的全名(有后綴名的話要包括后綴名,沒有后綴名可以不包括)。
Unity中使用AssetBundle打包與加載的注意事項
還有下圖中LoadAsset方法中的參數(shù)是要和設置test_1這個AssetBundle文件名的預制體名字保持一致。
Unity中使用AssetBundle打包與加載的注意事項
Unity中使用AssetBundle打包與加載的注意事項
4、保存腳本后,回到Unity中,把這個TestABLoad腳本掛載到游戲中任意一個游戲物體上面,運行游戲之后,可以看到test_1這個資源包對應的游戲資源就被加載出來了。
Unity中使用AssetBundle打包與加載的注意事項
注意事項二:利用C#代碼加載本地絕對路徑AssetBundle資源包
1、上面也提到過,項目Assets文件夾同級目錄還有一個AssetBundles文件夾,這個AssetBundles文件夾里面也是打出來的AssetBundle文件。StreamingAssets文件夾和AssetBundles文件夾里面的AssetBundle文件內容都是一樣的。所以也可以使用AssetBundles文件夾里面的AssetBundles文件進行加載。
Unity中使用AssetBundle打包與加載的注意事項
可以看出來這個文件夾不在項目Assets目錄下,所以要使用絕對路徑進行加載。

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

public class TestABLoad : MonoBehaviour
{
    void Start()
    {
        var myLoadedAssetBundle = AssetBundle.LoadFromFile("G:\\C++ Open Sources Project\\NoahGameFrameClient\\UnityDemo\\AssetBundles\\StreamingAssets\\test_1");
        if (myLoadedAssetBundle == null)
        {
            Debug.Log("Failed to load AssetBundle!");
            return;
        }
        var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("TestCapsule");
        Instantiate(prefab);
    }
}

2、保存腳本后,回到Unity中,把這個TestABLoad腳本掛載到游戲中任意一個游戲物體上面,運行游戲之后,可以看到test_1這個資源包對應的游戲資源就被加載出來了。
Unity中使用AssetBundle打包與加載的注意事項
3、但我這做了一個小測試,把這個TestABLoad腳本掛載到我本地的另一個Unity項目場景中的一個游戲物體上,游戲運行后,對應的資源并沒有加載出來,并且會報錯。所以由此可知,X項目打出來的AssetBundles文件就只能X項目進行使用,其他項目并不能進行使用。
Unity中使用AssetBundle打包與加載的注意事項
Unity中使用AssetBundle打包與加載的注意事項
注意事項三:三種壓縮方式的比較:
NoCompression:不壓縮,解壓快,包較大,不建議使用。
LZMA: 壓縮最小,解壓慢,用一個資源要解壓包下所有資源。
LZ4: 壓縮稍大,解壓快,用什么解壓什么,內存占用低,一般建議使用這種。

1、就拿我要打包的這個預制體為例,可以看出這個預制體文件占用為3KB。
Unity中使用AssetBundle打包與加載的注意事項

Unity中使用AssetBundle打包與加載的注意事項
2、當我選擇NoCompression不壓縮,解壓快,包較大,不建議使用的這種方式,進行打包,可以看出,打包出來的文件占用為138KB
Unity中使用AssetBundle打包與加載的注意事項

Unity中使用AssetBundle打包與加載的注意事項
3、當我選擇LZMA:壓縮最小,解壓慢,用一個資源要解壓包下所有資源的這種方式,進行打包,可以看出,打包出來的文件占用為28KB
Unity中使用AssetBundle打包與加載的注意事項
Unity中使用AssetBundle打包與加載的注意事項
4、當我選擇LZ4: 壓縮稍大,解壓快,用什么解壓什么,內存占用低,一般建議使用這種的這種方式,進行打包,可以看出,打包出來的文件占用為45KB
Unity中使用AssetBundle打包與加載的注意事項
Unity中使用AssetBundle打包與加載的注意事項
注意事項四:刪除test_1這個AssetBundle資源包對應的TestCapsule預制體,項目運行后還能正常加載出來TestCapsule預制體。
1、這是test_1這個AssetBundle資源包對應的TestCapsule預制體。
Unity中使用AssetBundle打包與加載的注意事項
2、把這個TestCapsule預制體從當前項目中刪除掉。
Unity中使用AssetBundle打包與加載的注意事項
3、把上面相對路徑或者絕對路徑TestABLoad腳本掛載到場景中的某一個游戲物體上面,運行游戲之后,可以看到test_1這個資源包對應的游戲資源就被加載出來了。

Unity中使用AssetBundle打包與加載的注意事項
這是使用本地絕對路徑進行加載。

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

public class TestABLoad : MonoBehaviour
{
    void Start()
    {
        var myLoadedAssetBundle = AssetBundle.LoadFromFile("G:\\C++ Open Sources Project\\NoahGameFrameClient\\UnityDemo\\AssetBundles\\StreamingAssets\\test_1");
        if (myLoadedAssetBundle == null)
        {
            Debug.Log("Failed to load AssetBundle!");
            return;
        }
        var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("TestCapsule");
        Instantiate(prefab);
    }
}

接下來,我們使用本地相對路徑進行加載,運行游戲之后,可以看到test_1這個資源包對應的游戲資源就被加載出來了。
Unity中使用AssetBundle打包與加載的注意事項

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

public class TestABLoad : MonoBehaviour
{
    void Start()
    {
        AssetBundle ab = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "test_1"));
        GameObject cube = ab.LoadAsset("TestCapsule") as GameObject;//LoadAsset方法中參數(shù)為導出前Prefab名字
        Instantiate(cube);//生成
    }
}

由以上可知,資源的加載并不是依賴于test_1這個AssetBundle資源包對應的預制體TestCapsule,而是依賴于對應的test_1這個AssetBundle資源包。文章來源地址http://www.zghlxwxcb.cn/news/detail-501522.html

到了這里,關于Unity中使用AssetBundle打包與加載的注意事項的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包