unity中ScriptableObject在assetbundle中的加載

 

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

之前都是寫一些我的的調研博客,從今天開始,也寫一些我的在開發中遇到的一些能夠分享的趟坑博客,爲後續的開發人員提供一些綿薄之力的幫助吧。app

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

1、ScriptableObject在assetbundle中的使用this

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

    public class AppearanceData : ScriptableObject
    {

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

而後基於該類建立一些實例資源:3d

而後構建一個類存儲全部這些資源:code

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

 

2、將ScriptableObject打成assetbundle 包blog

利用打包接口,打成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);
    }

運行結果:

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

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

 

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

首先,測試一下其餘的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!

 

4、總結

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

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

相關文章
相關標籤/搜索