Unity によってパッケージ化されたハッシュ値は一意ではありません。

問題の原因

ゲーム開発には基本的にリソースのバージョン管理と更新が含まれますが、この記事では、パッケージ化プロセス中に遭遇した小さな問題を記録します。

開発中にリソースのバージョンをマークするために一般的に使用される方法には、ファイル ハッシュ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 が見つかりません" ); 
    } 
}
コードをコピーする

 

ドキュメンテーション

ハッシュ MD5 CRC の知識

内容の一部はhttp://blog.dou.li/Unity3D-AssetBundle-Build-Hash-No-Same.htmlから参照されています。


おすすめ

転載: blog.csdn.net/qq_25189313/article/details/77930070