unity中ScriptableObject在assetbundle中的加載


 

轉載請標明出處:http://www.cnblogs.com/zblade/

以前都是寫一些個人的調研博客,從今天開始,也寫一些個人在開發中遇到的一些可以分享的趟坑博客,為后續的開發人員提供一些綿薄之力的幫助吧。

好的,今天就分享一個困擾了一個晚上的assetbundle中如何加載ScriptableObject的坑。

一、ScriptableObject在assetbundle中的使用

作為可以顯示配置的數據格式,ScriptableObject類型數據目前已經大量的使用在項目中,具體使用方法不做過多的解釋,查看相關文章即可。我在使用的時候,首先構造一個繼承的類:

    public class AppearanceData : ScriptableObject
    {

        [SerializeField]
        public AppearanceResourceData resourceData;
        [SerializeField]
        public string appearanceName;
    }

然后基於該類創建一些實例資源:

然后構建一個類存儲所有這些資源:

    /// <summary>
    /// 角色外觀數據庫文件
    /// </summary>
    public class AppearanceDataLib : ScriptableObject
    {
        public List<AppearanceData> appearanceList = new List<AppearanceData>();
    }

 

二、將ScriptableObject打成assetbundle 包

利用打包接口,打成AssetBundle的數據包,利用AssetStudio, 查看打包的數據:

所有的資源都被打成一個bundle,好的,讓我們接下來測試加載:

    private static  IEnumerator GetAsset(string path)
    {
        AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
        yield return request;

        string[] names = request.assetBundle.GetAllAssetNames();
        AssetBundle ab = request.assetBundle;
        Object[] objs = ab.LoadAllAssets();
        UnityEngine.Debug.Log("objs: " + objs.Length);
        foreach (var item in names)
        {
            UnityEngine.Debug.Log(item);
        }

        ab.Unload(true);
    }

運行結果:

輸出顯示有資源名字,但是沒有資源!!!

嘗試了各種加載接口,都沒有將資源加載出來,網上搜索了一下,同樣的加載接口,別人能加載出來,這兒都沒有成功,頭皮都撓破了。

 

三、如何分析定位以及解決問題

首先,測試一下其他的ab資源是否一樣加載不出資源,發現其他的ab資源沒問題,那么問題肯定出在當前這個ab包上

其次,如果當前這個AppearanceLib的數據加載不出來,那我單獨打一個AppearanceData類型的數據作為一個ab包,是否可以加載?測試發現可以!

最后,問題很清楚,就是這個AppearanceDataLib的數據有問題,回到項目查看:

提示AppearanceDataLib找不到?

 這是一個問題,在加載ab中資源的時候,也提示當前腳本missing

the referenced script on this behaviour is missing

 這個腳本是如何放置的?

我將這個類放在AppearanceData.cs文件中,並沒有單獨的列出一個文件存放,所以ab找不到該文件,好的,問題定位了,解決辦法就是單獨新建一個文件AppearanceDataLib,

用來存放該類:

重新打ab包,測試加載:

得到該scriptableobject數據, done!

 

四、總結

Unity中的assetbundle,會包含當前數據/資源對應的腳本,這些.cs腳本需要單獨一一的列成一個文件,不能寫在其他文件中,不然assetbundle在加載的時候,會找不到這些腳本文件,在這兒的

問題就是找不到這些腳本對應的數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM