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在加载的时候,会找不到这些脚本文件,在这儿的
问题就是找不到这些脚本对应的数据。
unity中ScriptableObject在assetbundle中的加载的更多相关文章
- Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案
转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53205878本文出自[DylanAndroid的博客] Android中Vie ...
- VC++ 使用WebBrowser控件中html文件以资源形式加载
. . . . //加载资源文件中的HTML,IDR_HTML1就是HTML文件在资源文件中的ID wchar_t self_path[MAX_PATH] = { }; GetModuleFileNa ...
- Android中使用WebView, WebChromeClient和WebViewClient加载网页 (能够执行js)
Android中使用WebView, WebChromeClient和WebViewClient加载网页 在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android ...
- HTML5中script的async属性异步加载JS
HTML5中script的async属性异步加载JS HTML4.01为script标签定义了5个属性: charset 可选.指定src引入代码的字符集,大多数浏览器忽略该值.defer 可 ...
- getContext在谷歌浏览器中,使用时要先加载canvas对象,否则会提示'getContext is null'
<body> <canvas id=" style="border:1px solid #c3c3c3;"> Your browser does ...
- 在Vue中的load或ready的加载时机
在Vue中的load或ready的加载时机 1.我们来插入一段代码来分析: Js代码如下 <script type="text/javascript"> var app ...
- 此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库
警告:此编译单元不包含在frame元数据中指定的factoryClass,无法加载配置的运行时共享库.要在没有运行时共享库的情况下进行编译,请将 -static-link-runtime-shared ...
- VC中使用GDI+实现为按钮加载Png图片
http://blog.csdn.net/flyfish1986/article/details/5381605 VC中使用GDI+实现为按钮加载Png图片 http://www.codeprojec ...
- WPF中,怎样将XAML代码加载为相应的对象?
原文:WPF中,怎样将XAML代码加载为相应的对象? 在前面"在WPF中,如何得到任何Object对象的XAML代码?"一文中,我介绍了使用System.Windows.Marku ...
随机推荐
- 转载:selenium webdriver定位不到元素的五种原因及解决办法
1.动态id定位不到元素for example: //WebElement xiexin_element = driver.findElement(By.id("_mail_c ...
- MySQL如何优化
对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库--林林总总,但是第一必备技能还应该是MySQL.从LAMP的兴起,到Ma ...
- 终于将 SQL Server 成功迁移至 MySQL8.0 啦!!!
之前一直使用 SQL Server 作为主数据库而不是 MySQL ,原因之一是单机 SQL Server 性能比 MySQL 强很多,另一个原因是之前客户的系统管理员大多只有 SQL Server ...
- bzoj3598 [Scoi2014]方伯伯的商场之旅
数位dp,我们肯定枚举集合的位置,但是如果每次都重新dp的话会很麻烦,所以我们可以先钦定在最低位集合,dp出代价,然后再一步步找到正确的集合点,每次更改的代价也dp算就好了. #include < ...
- BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法
BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考 ...
- python黑科技:还在为没有wifi而烦心吗?这篇文章解决你的困扰
python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可以专注于解决问题而不是去搞明白语言本身.Python虽然是基于C语言编写,但是 ...
- linux系统版本查看
Linux下如何查看版本信息, 包括位数.版本信息以及CPU内核信息.CPU具体型号等等,整个CPU信息一目了然. 1.# uname -a (Linux查看版本当前操作系统内核信息) Lin ...
- [CTF隐写]png中CRC检验错误的分析
[CTF隐写]png中CRC检验错误的分析 最近接连碰到了3道关于png中CRC检验错误的隐写题,查阅了相关资料后学到了不少姿势,在这里做一个总结 题目来源: bugku-MISC-隐写2 bugku ...
- 【.NETCore开源】开弓没有回头箭
2019.2.11 开工大吉!经过了半个月的休假,今天回归岗位重新拾起工作,却发现熟悉的代码生疏了.年前的计划回忆不起来了,俗称"节后综合症". 忆半月圈子 过年放假的前几天有多篇 ...
- 【原】javascript笔记之this用法
javascript中的this学习起来相对复杂,最近花了点时间研究,总结起来大概这只有5种情况,相信只要熟悉这5种用法,基本是可以解决所有的this问题,文本不介绍this设计原理,只介绍用法,阅读 ...