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在加载的时候,会找不到这些脚本文件,在这儿的

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

  • 相关阅读:
    USACO 3.3 A Game
    USACO 3.3 Camelot
    USACO 3.3 Shopping Offers
    USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解
    USACO 3.3 Riding the Fences
    USACO 3.2 Magic Squares
    USACO 3.2 Stringsobits
    USACO 3.2 Factorials
    USACO 3.2 Contact
    USACO 3.1 Humble Numbers
  • 原文地址:https://www.cnblogs.com/zblade/p/9887929.html
Copyright © 2011-2022 走看看