問題起因
游戲開發基本都會涉及到資源版本管理及更新,本文記錄我在打包過程中遇到的一小問題:
開過中常用於標記資源版本的方法有計算文件Hash、VCS的版本等。
在Unity中對同一個資源文件進行多次打包(AssetBundle),發現每次打出ab文件的Hash值都不一樣。
這不科學啊?打包同一文件多次Hash值不一樣,這對於用Hash來標記版本的方法基本是廢了。
我的Unity版本:Unity4.X
查資料發現:AssetBuildPipeline.BuildAssetBundle
接口options
參數,可以增加一項BuildAssetBundleOptions.DeterministicAssetBundle
。這將保證AssetBundle使用唯一Hash進行標識,若不加這個參數AssetBundle每次構建時都生成不同ID。
打包腳本
下現貼一個我簡單打包腳本:
[MenuItem("Tools/打包 setting_client")] public static void BuildWd_SettingClient() { var setting_client = AssetDatabase.LoadAssetAtPath("Assets\\setting_client.bytes", typeof(Object)); //NOTE 這個路徑寫死先 var savePath = @"e:\xxx_online\data\setting_client.ab"; if (setting_client != null) { BuildPipeline.BuildAssetBundle(setting_client, null, savePath, BuildAssetBundleOptions.UncompressedAssetBundle | BuildAssetBundleOptions.CompleteAssets |BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows); Debug.Log("打包成功,文件在:" + savePath); } else { Debug.LogError("請檢查,找不到 setting_client.bytes "); } }
資料文獻
部分內容參考自:http://blog.dou.li/Unity3D-AssetBundle-Build-Hash-No-Same.html