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 ...
随机推荐
- indexer_worker.go
package) ) ) ) { request.rankerReturnChannel <- rankerReturnRequest{} con ...
- wukong.go
package wukong import ( _ "github.com/boltdb/bolt" _ "github.com/cznic/kv&quo ...
- bzoj 2821 作诗 分块
基本思路和蒲公英一样 还是预处理出每两个块间的答案 询问时暴力跑两边的贡献 #include<cstdio> #include<cstring> #include<ios ...
- 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; 所以根据 ...
- BZOJ1467_Pku3243 clever Y_EXBSGS
BZOJ1467_Pku3243 clever Y_EXBSGS Description 小Y发现,数学中有一个很有趣的式子: X^Y mod Z = K 给出X.Y.Z,我们都知道如何很快的计算K. ...
- [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 ...
- BZOJ_2141_排队_树状数组+分块
BZOJ2141_排队_树状数组+分块 Description 排排坐,吃果果,生果甜嗦嗦,大家笑呵呵.你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家 乐和和.红星幼儿园的小朋友们排起了 ...
- 使用jdbc拼接条件查询语句时如何防止sql注入
本人微信公众号,欢迎扫码关注! 使用jdbc拼接条件查询语句时如何防止sql注入 最近公司的项目在上线时需要进行安全扫描,但是有几个项目中含有部分老代码,操作数据库时使用的是jdbc,并且竟然好多都是 ...
- Python中的那些“坑”
1.哪个是True,哪个是False? 这里要看三组代码: # 第一组: >>>a=256 >>>b = 256 >>>a is b # 第二组: ...
- C#编写扫雷游戏
翻看了下以前大学学习的一些小项目,突然发现有个项目比较有意思,觉得有必要把它分享出来.当然现在看来,里面有很多的不足之处,但因博主现在已经工作,没有时间再去优化.这个项目就是利用C#编写一个Windo ...