問題の原因
ゲーム開発には基本的にリソースのバージョン管理と更新が含まれますが、この記事では、パッケージ化プロセス中に遭遇した小さな問題を記録します。
開発中にリソースのバージョンをマークするために一般的に使用される方法には、ファイル ハッシュ、VCS バージョンなどの計算が含まれます。
Unityで同じリソースファイル( AssetBundle )を複数回パッケージ化すると、abファイルのハッシュ値が毎回異なることが分かりました。
これは科学的ではありませんか? 同じファイルが異なるハッシュ値で複数回パッケージ化されている場合、ハッシュを使用してバージョンをマークするこの方法は基本的に役に立ちません。
情報を確認したところ、AssetBuildPipeline.BuildAssetBundle
インターフェースoptions
パラメータに項目を1つ追加できることが分かりましたBuildAssetBundleOptions.DeterministicAssetBundle
。これにより、アセットバンドルが一意のハッシュによって識別されるようになります。このパラメーターが追加されない場合、アセットバンドルは構築されるたびに異なる ID を生成します。
パッケージ化スクリプト
私の簡単なパッケージ化スクリプトは次のとおりです。
[MenuItem( " Tools/打包 settings_client " )] public static void BuildWd_SettingClient() { var settings_client = AssetDatabase.LoadAssetAtPath( " Assets\\setting_client.bytes " , typeof (Object)); //注意 路径自己定义 var savePath = @"d :\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から参照されています。