【Unity】AssetBundleのハッシュ値を計算する方法

AssetBundleのハッシュ値を計算する方法のまとめです。

Unityの機能を使わずにハッシュ値を計算する

まず、Unityの機能を使わずにAssetBundleのファイルハッシュを求める方法を紹介します。
これは以下の記事にまとめているのでこちらを参照してください。

light11.hatenadiary.com

細かい制御を行いたければこの方法をお勧めします。

Unityの機能を使ってハッシュ値を計算する

AssetBundleのハッシュ値AssetBundleManifest.GetAssetBundleHash()で求めることもできます。

docs.unity3d.com

もともとAssetBundleのキャッシュの仕組みを実現するためのAPIのようです。
実際には以下のようにして使います。

using UnityEngine;

public class Example : MonoBehaviour
{
    private void Start()
    {
        var assetBundle = AssetBundle.LoadFromFile(@"C:\Path\To\ManifestAssetBundle");
        var manifest = assetBundle.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
        var hash = manifest.GetAssetBundleHash("example");
        Debug.Log(hash);
    }
}

得られるのは.manifestのAssetFileHash

ちなみに、前節のAssetBundleManifest.GetAssetBundleHash()で取得できる値は、
.manifestファイル内のAssetFileHashの値と一致するようです。

ManifestFileVersion: 0
CRC: 111306602
Hashes:
  AssetFileHash:
    serializedVersion: 2
    Hash: b0bc61a23cff86b3d8fef6bd18899500
  TypeTreeHash:
    serializedVersion: 2
    Hash: a15026e7645264409a88f84f584030a1
HashAppended: 0
ClassTypes:
- Class: 21
  Script: {instanceID: 0}
- Class: 48
  Script: {instanceID: 0}
Assets:
- Assets/Material.mat
Dependencies: []

関連

light11.hatenadiary.com

参考

docs.unity3d.com