Unityでgitのautocrlfを設定しないとWindowsとMacでAssetBundleのハッシュが異なる件についてまとめました。
Unity2019.3.0
AssetFileHash?
AssetFileHashとは、AssetBundleの更新判定に使われるハッシュ値です。
Assetにシリアライズされている情報が変わったりするとこの値も変わります。
AssetFileHashについては次の記事にまとめていますので、必要に応じて参照してください。
WindowsとMacでAssetBundleのハッシュ値が異なる問題
いま、適当なリポジトリに、適当なUnityプロジェクトをプッシュしておきます。
中には一つだけAssetBundleを配置しておきます。
ここで、Windows PCとMac PCを用意してそれぞれこのリポジトリをチェックアウトします。
そしてそれぞれのPCでAssetBundleをビルドします。
出来上がったAssetBundleのmanifestを見ると、それぞれAssetFileHashが別の値を示していることがわかります。
同じAssetBundleをビルドしているはずなのでAssetFileHashも同一でないとおかしいです。
gitのautocrlfをfalseにする必要がある
こうなってしまう原因は、Windows版のgitのautocrlfという機能です。
これはチェックアウト時に改行コードを自動的にCRLFに変えてくれる便利機能なのですが、
WindowsだけCRLFに書き換えられてしまうためアセットの同一性判定がWin <-> Mac間でおかしくなってしまいます。
git config -l
でcore.autocrlf=true
となっていたらこの機能が有効になっています。
この場合、git config --global core.autocrlf false
とすればこの機能を無効化できます。
git config --global core.autocrlf input
でもOKですが、下記のフォーラムではUnityの方がfalseにすることを推奨しています。
https://forum.unity.com/threads/how-are-assetfilehashes-calculated.488550/
結果
上記の手順でautocrlfをfalseにして再度WindowsとMacでチェックアウト・AssetBundleビルドを行ったところ、
WindowsとMacで同じAssetFileHashが得られることが確認できました。
参考
https://forum.unity.com/threads/how-are-assetfilehashes-calculated.488550/