转载请标明出处: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. BZOJ_1030_[JSOI2007]文本生成器_AC自动机+DP

    BZOJ_1030_[JSOI2007]文本生成器_AC自动机+DP Description JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他 ...

  2. STL--multiset用法

    multiset: multiset<int>s; 定义正向迭代器与正向遍历: multiset<int>::iterator it; for(it=s.begin();it! ...

  3. BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组

    BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...

  4. BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划

    BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...

  5. 自动化测试框架 hierarchyViewer、Uiautomator、Appium的区别比较!

    一.HierarchyViewer: 优点:1)能够可视化的角度直观地获得UI布局设计结构和各种属性的信息 2)使用hierarchyviewer.bat来检索手机界面布局 缺点:1)稳定性差,出现过 ...

  6. Text-CNN-文本分类-keras

    Text CNN 1. 简介 TextCNN 是利用卷积神经网络对文本进行分类的算法,由 Yoon Kim 在 "Convolutional Neural Networks for Sent ...

  7. 开发 chrome 扩展 GitHub-Remarks 的一些想法以及遗憾

    前文 对于单页应用中如何监听 URL 变化的思考 说到我在开发 chrome 扩展 GitHub Remarks 中遇到的一个问题,本文来聊聊开发这个扩展的前后心路历程. 为什么开发这个扩展?前文说到 ...

  8. 七牛云免费对象存储,并绑定到cloudreve中

    之前开通了腾讯云的对象存储COS并使用中,不过之前主要将它当作云盘使用,这两天再做博客系统时发现也可以将它作为网站的图库,这样对网站的访问效率也会提高. 今天了解到七牛云有免费的对象存储可以使用,于是 ...

  9. 深入学习Redis(3):主从复制

    前言 在前面的两篇文章中,分别介绍了Redis的内存模型和Redis的持久化. 在Redis的持久化中曾提到,Redis高可用的方案包括持久化.主从复制(及读写分离).哨兵和集群.其中持久化侧重解决的 ...

  10. 图解:HTTP 范围请求,助力断点续传、多线程下载的核心原理

    题图:by Charles Loyer 一.序 Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header) ...