转载请标明出处: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在加载的时候,会找不到这些脚本文件,在这儿的

问题就是找不到这些脚本对应的数据。

unity中ScriptableObject在assetbundle中的加载的更多相关文章

  1. Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...

  2. VC++ 使用WebBrowser控件中html文件以资源形式加载

    . . . . //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID wchar_t self_path[MAX_PATH] = { }; GetModuleFileNa ...

  3. Android中使用WebView, WebChromeClient和WebViewClient加载网页 (能够执行js)

    Android中使用WebView, WebChromeClient和WebViewClient加载网页   在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android ...

  4. HTML5中script的async属性异步加载JS

    HTML5中script的async属性异步加载JS     HTML4.01为script标签定义了5个属性: charset 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer 可 ...

  5. getContext在谷歌浏览器中,使用时要先加载canvas对象,否则会提示'getContext is null'

    <body> <canvas id=" style="border:1px solid #c3c3c3;"> Your browser does ...

  6. 在Vue中的load或ready的加载时机

    在Vue中的load或ready的加载时机 1.我们来插入一段代码来分析: Js代码如下 <script type="text/javascript"> var app ...

  7. 此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库

    警告:此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库.要在没有运行时共享库的情况下进行编译,请将 -static-link-runtime-shared ...

  8. VC中使用GDI+实现为按钮加载Png图片

    http://blog.csdn.net/flyfish1986/article/details/5381605 VC中使用GDI+实现为按钮加载Png图片 http://www.codeprojec ...

  9. WPF中,怎样将XAML代码加载为相应的对象?

    原文:WPF中,怎样将XAML代码加载为相应的对象? 在前面"在WPF中,如何得到任何Object对象的XAML代码?"一文中,我介绍了使用System.Windows.Marku ...

随机推荐

  1. indexer_worker.go

    package) ) ) ) {             request.rankerReturnChannel <- rankerReturnRequest{}             con ...

  2. wukong.go

    package wukong import (     _ "github.com/boltdb/bolt"     _ "github.com/cznic/kv&quo ...

  3. bzoj 2821 作诗 分块

    基本思路和蒲公英一样 还是预处理出每两个块间的答案 询问时暴力跑两边的贡献 #include<cstdio> #include<cstring> #include<ios ...

  4. bzoj3594 方伯伯的玉米田 树状数组优化dp

    f[i][j]表示到第i位,使用了j次机会的最长不下降子序列长度 转移:f[i][j]=max(f[x][y])+1; x<i; y<=j; a[x]+y<=a[i]+j; 所以根据 ...

  5. BZOJ1467_Pku3243 clever Y_EXBSGS

    BZOJ1467_Pku3243 clever Y_EXBSGS Description 小Y发现,数学中有一个很有趣的式子: X^Y mod Z = K 给出X.Y.Z,我们都知道如何很快的计算K. ...

  6. [Usaco2005 nov]Grazing on the Run 边跑边吃草 BZOJ1742

    分析: 首先,连续选择一段必定最优... 区间DP,f[i][j]表示从i开始,连续j个被吃掉了,并且,牛在i处,g[i][j]则表示在i+j-1处 f[i][j]可以从g[i+1][j]和f[i+1 ...

  7. BZOJ_2141_排队_树状数组+分块

    BZOJ2141_排队_树状数组+分块 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了 ...

  8. 使用jdbc拼接条件查询语句时如何防止sql注入

    本人微信公众号,欢迎扫码关注! 使用jdbc拼接条件查询语句时如何防止sql注入 最近公司的项目在上线时需要进行安全扫描,但是有几个项目中含有部分老代码,操作数据库时使用的是jdbc,并且竟然好多都是 ...

  9. Python中的那些“坑”

    1.哪个是True,哪个是False? 这里要看三组代码: # 第一组: >>>a=256 >>>b = 256 >>>a is b # 第二组: ...

  10. C#编写扫雷游戏

    翻看了下以前大学学习的一些小项目,突然发现有个项目比较有意思,觉得有必要把它分享出来.当然现在看来,里面有很多的不足之处,但因博主现在已经工作,没有时间再去优化.这个项目就是利用C#编写一个Windo ...