轉載請標明出處: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在加載的時候,會找不到這些腳本文件,在這兒的
問題就是找不到這些腳本對應的數據。