美文网首页
AssetBundle使用总结

AssetBundle使用总结

作者: 晓龙酱 | 来源:发表于2017-10-21 17:47 被阅读102次

    https://unity3d.com/fr/learn/tutorials/temas/best-practices/assetbundle-usage-patterns?_ga=2.236038465.1329205867.1508579438-695585774.1480855561#Managing_Loaded_Assets

    UGUI打包策略
    • 一个UI模块对应一个图集
    • 一个UI模块的图集打一个AB包
    • 一个图集打成多个包加载后会造成冗余
    • 一个图集有多个Page,虽然打成了一个AB包,但加载后是多个贴图。但使用起来就像是一个贴图一样。
    • 一个UI模块的若干预设可以分别打包
    • 公共图集打若干AB包
    注意
    • 一个AB包重复加载多次,则其中的Asset就会冗余几次
      所以要做好加载管理,避免AB的重复加载,同时也要避免资源的重复打包
    资源卸载顺序
    • Destroy
    • ab.Unload(true)
    • Resources.UnloadUnusedAssets()
      如果在ab.Unload前执行此方法可能会无效,因为ab仍在引用assets。
    其它
    • 如果我有一个Prefab,它的Dependencies都在Resources文件夹中,那么,当我在AssetBundle打包时,只打包这个Prefab(不指定BuildAssetBundleOptions.CompleteAssets和BuildAssetBundleOptions.CollectDependencies)的话,这个Prefab能够正确实例化吗?

    这是不能正确实例化的,因为AssetBundle中的资源和Resource文件夹下资源是不会建立依赖关系的(脚本除外,因为开启BuildAssetBundleOptions.CollectDependencies 时,脚本依然不会打包到AssetBundle中)。所以会出现Mesh、Material等的丢失。

    • 获取所有AssetBundleName
    var names = AssetDatabase.GetAllAssetBundleNames();
    foreach (var name in names)
        Debug.Log ("AssetBundle: " + name);
    
    • 监听资源的AssetBundleName变化
    using UnityEngine;
    using UnityEditor;
    
    public class MyPostprocessor : AssetPostprocessor {
    
        void OnPostprocessAssetbundleNameChanged ( string path,
                string previous, string next) {
            Debug.Log("AB: " + path + " old: " + previous + " new: " + next);
        }
    }
    
    • Editor下可以加载任意平台下的AssetBundle,此外必须加载对应平台下的AssetBundle,否则会报以下错误
    The file can not be loaded because it was created for another build target 
    that is not compatible with this platform.
    
    • 通过AssetBundle加载的材质,Shader出现InternalErrorShader的情况
      • 被依赖的Shader没有在材质之前加载
      • 被依赖的Shader过早被Unload

    相关文章

      网友评论

          本文标题:AssetBundle使用总结

          本文链接:https://www.haomeiwen.com/subject/xwsvuxtx.html