La causa del problema
El desarrollo de juegos básicamente implica la gestión y actualización de versiones de recursos. Este artículo registra un pequeño problema que encontré durante el proceso de empaquetado:
Los métodos comúnmente utilizados para marcar versiones de recursos en desarrollo incluyen el cálculo de hash de archivos , versiones de VCS , etc.
Al empaquetar el mismo archivo de recursos ( AssetBundle ) varias veces en Unity, descubrí que el valor hash del archivo ab es diferente cada vez.
¿No es esto científico? Si el mismo archivo se empaqueta varias veces con diferentes valores hash, este método de usar Hash para marcar la versión es básicamente inútil.
Después de verificar la información, descubrí que se puede agregar un elemento a los parámetrosAssetBuildPipeline.BuildAssetBundle
de la interfaz . Esto garantizará que AssetBundle esté identificado por un Hash único. Si no se agrega este parámetro, AssetBundle generará una ID diferente cada vez que se cree.options
BuildAssetBundleOptions.DeterministicAssetBundle
guión de embalaje
Aquí está mi script de empaquetado simple:
[MenuItem( " Herramientas/打包 configuración_client " )] public static void BuildWd_SettingClient() { var configuración_client = AssetDatabase.LoadAssetAtPath( " Assets\\setting_client.bytes " , tipo de (Objeto)); // NOTA 路径自己定义 var savePath = @"d :\xxx_online\data\setting_client.ab " ; if (setting_client! = nulo ) { BuildPipeline.BuildAssetBundle(setting_client, nulo , savePath, BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.CompleteAssets | BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows); Debug.Log( " Empaquetado exitoso, archivo en: " + savePath); } else { Debug.LogError( " Verifique, no se puede encontrar settings_client.bytes " ); } }
Documentación
Se hace referencia a parte del contenido en: http://blog.dou.li/Unity3D-AssetBundle-Build-Hash-No-Same.html