UnityWebRequestAssetBundle은 해시 값을 애셋번들에서 생성하지 않는다.
https://gist.github.com/IJEMIN/8d175564e10a1a8baa19d955176f25da
UnityWebRequestAssetBundle.GetAssetBundle() 메서드는 문서상으로 해시 값을 비교해 같은 버전으로 캐싱된 애셋번들을 다시 다운로드하지 않는다고 한다.
그런데 이때 비교하는 값은 캐싱된 애셋번들에서 생성한 해시가 아니라, 개발자가 직접 매핑한 해시다.
나는 서버 파일의 해시를 미리 가져와 다운로드를 시도하면, 유니티가 이미 받은 파일의 해시와 자동으로 비교해 다운로드를 생략할 것으로 생각했다. 실제로는 이전에 받은 파일에 매핑한 키와 새로 다운로드하려는 파일에 붙일 키가 같으면 생략하고, 다르면 다시 받는 구조였다.
즉 애셋번들에 매핑할 해시 값을 클라이언트 버전에 따라 직접 관리해야 한다. 이 차이를 몰라 같은 파일이 반복해서 다운로드되는 원인을 찾는 데 시간이 걸렸다.
해시의 기준 값을 하드코딩하는 대신, 마이크로소프트 애저 스토리지가 자동으로 붙이는 ETag를 해시 생성 기준으로 삼아 해결했다.