AssetBundle第二篇

60 阅读1分钟

一、资源包的优化

1.场景包和模型包如果重复,就会占用两份模型包的资源,可以选择删除场景包中的重复资源。 2.依赖包一般不超过三层 3.分包设计时。角色预制体需要单独打包。 4.一个AB包只能被加载一次,如果重复加载,会报错。这就需要记录加载过的包。

通过判空,避免资源包的重复加载。

protected void InstantiateBundle() 
    {
        //通过判空,避免文件重复加载的问题
        if (asset == null)
        {//加载包,需要传递的参数为:包名、包所在的路径
            asset = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, bundleName));
            //泛型读取对象
            var asset_gob = asset.LoadAsset<GameObject>(assetName);
            //Type指定类型加载
            // GameObject assetobj=asset.LoadAsset(assetName,typeof(GameObject)) as GameObject; 
            //实例化对象      
            Instantiate(asset_gob);
        }
    }

5.在后期开发过程中,需要打的AB包太多,浪费时间,为了提升开发效率,采用不需要打包,也可以实例化模型的方式进行开发。


//不需要打包,也可以实例化出模型
    [ContextMenu("InstantiateBundle")]
    protected void InstantiateBundle2()
    {
        var assetsPaths = AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(bundleName, assetName);
        var gob = UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(assetsPaths[0]);
        MonoBehaviour.Instantiate(gob);
    }