zoukankan      html  css  js  c++  java
  • 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在加载的时候,会找不到这些脚本文件,在这儿的

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

  • 相关阅读:
    GUI 之 JDialog弹窗
    GUI Swing 之 JFrame窗体
    GUI 键盘监听事件
    GUI 窗口监听事件
    GUI 鼠标监听事件,模拟画图工具
    shell编程
    Ubuntu20.04 Linux初识
    rlwrap的使用
    5个相见恨晚的Linux命令,每一个都非常实用
    Bash初识与常用命令
  • 原文地址:https://www.cnblogs.com/zblade/p/9887929.html
Copyright © 2011-2022 走看看